#pragma once #include #include "organizer/organizer.hpp" #include "organizer/primitive.hpp" #include "organizer/blobtree.hpp" #include "uvector.hpp" using namespace algoim::organizer; using namespace algoim; void casePolyhedronTilted() { const int PRIMITIVE_CNT = 2; std::vector> primitiveDescriptions(PRIMITIVE_CNT); primitiveDescriptions[0] = std::make_shared(MeshDesc( { uvector3{2629.82969004962, 6801.21455575771, 49030.00000000000}, uvector3{2869.82968877607, 6801.18983125328, 49030.00000000000}, uvector3{2869.82968877607, 6801.18983125328, 52180.00000000000}, uvector3{2629.82969004962, 6801.21455575771, 52180.00000000000}, uvector3{2870.01294237553, 8580.02684557581, 49030.00000000000}, uvector3{2629.98821659743, 8340.02684557581, 49030.00000000000}, uvector3{1939.99863941572, 8340.02684557581, 49030.00000000000}, uvector3{1939.99863941572, 8580.02684557581, 49030.00000000000}, uvector3{2629.98821659743, 8340.02684557581, 52180.00000000000}, uvector3{1939.99863941572, 8340.02684557581, 52180.00000000000}, uvector3{2870.01294237553, 8580.02684557581, 52180.00000000000}, uvector3{1939.99863941572, 8580.02684557581, 52180.00000000000}, }, {0, 1, 2, 3, 4, 1, 0, 5, 6, 7, 6, 5, 8, 9, 5, 0, 3, 8, 8, 3, 2, 10, 11, 9, 1, 4, 10, 2, 4, 7, 11, 10, 7, 6, 9, 11}, {uvector2i{0, 4}, uvector2i{4, 6}, uvector2i{10, 4}, uvector2i{14, 4}, uvector2i{18, 6}, uvector2i{24, 4}, uvector2i{28, 4}, uvector2i{32, 4}})); primitiveDescriptions[1] = std::make_shared(CuboidDesc(uvector3(0.6, 0.6, -0.6), 2.)); // primitiveDescriptions[1] = std::make_shared(SphereDesc(1., uvector3(0.6, 0.6, -0.6), 1.)); primitiveDescriptions[2] = std::make_shared(SphereDesc(0.7, uvector3(0.8, 0.8, 0.8), 1.)); primitiveDescriptions[3] = std::make_shared(SphereDesc(0.5, uvector3(-0.3, -0.8, 0.8), 1.)); std::vector pyramidBottomVertices = { uvector3{-1, -1, 0}, uvector3{1, -1, 0}, uvector3{1, 1, 0}, uvector3{-1, 1, 0} }; // primitiveDescriptions[4] = std::make_shared(pyramidBottomVertices, uvector3{0, 0, 1}); primitiveDescriptions[4] = std::make_shared(SphereDesc(0.2, uvector3(0.2, -0.7, 0.), 1.)); // primitiveDescriptions[5] = std::make_shared(SphereDesc(0.2, uvector3(0., -0.5, 0.), 1)); primitiveDescriptions[5] = std::make_shared(ConeDesc(uvector3(0., -0.2, 0.), 0.4, -0.7, 1)); // primitiveDescriptions[6] = std::make_shared(CylinderDesc(uvector3(-0.3, 0.3, 2.3), 0.4, 3.6, 1)); organizer::BlobTree blobTree; blobTree.structure.resize(PRIMITIVE_CNT * 2 - 1); blobTree.primitiveNodeIdx.resize(PRIMITIVE_CNT); blobTree.structure[0] = {1, 0, 0, 0, 1, 2}; // cube1 blobTree.structure[1] = {1, 0, 0, 0, 0, 0}; // cube2 blobTree.structure[2] = {0, OP_UNION, 0, 0, 1, 6 - 2}; // Union of cubes = opNode1 blobTree.structure[3] = {1, 0, 0, 0, 1, 5 - 3}; // sphere1 blobTree.structure[4] = {1, 0, 0, 0, 0, 0}; // sphere2 blobTree.structure[5] = {0, OP_UNION, 0, 0, 0, 0}; // Union of spheres = opNode2 blobTree.structure[6] = {0, OP_DIFFERENCE, 0, 0, 1, 10 - 6}; // Difference of opNode1 and opNode2 = opNode3 blobTree.structure[7] = {1, 0, 0, 0, 1, 9 - 7}; // Pyramid (sphere3) blobTree.structure[8] = {1, 0, 0, 0, 0, 0}; // Cone blobTree.structure[9] = {0, OP_UNION, 0, 0, 0, 0}; // UNION of Pyramid (sphere3) and Cone = opNode4 blobTree.structure[10] = { 0, OP_DIFFERENCE, 0, 0, 1, 12 - 10}; // Difference of opNode3 and opNode4 = opNode5 // blobTree.structure[11] = {1, 0, 0, 0, 0, 0}; // Cylinder // blobTree.structure[12] = {0, 2, 0, 0, 1, 0}; // Difference of opNode5 and Cylinder // blobTree.primitiveNodeIdx = {0, 1, 3, 4, 7, 8, 11}; // quadratureScene(primitiveDescriptions, uvector3(-1., -1.3, -1.6), uvector3(1.6, 1.6, 2.3), blobTree); blobTree.primitiveNodeIdx = {0, 1, 3, 4, 7, 8}; quadratureScene(primitiveDescriptions, uvector3(-0.8, -1.3, -1.6), uvector3(1.6, 1.6, 1.5), blobTree); } void casePolyhedronDifFace() { const int PRIMITIVE_CNT = 2; std::vector> primitiveDescriptions(PRIMITIVE_CNT); primitiveDescriptions[1] = std::make_shared(HalfPlaneDesc({ uvector3{4543.06080677052, -3903.14378907895, 5000.00000000000}, uvector3{4543.06080677052, -6019.09878238160, 5000.00000000000}, uvector3{1879.87607382063, -6019.09878238160, 1000.00000000000}, uvector3{1879.87607382063, -3903.14378907895, 1000.00000000000} })); primitiveDescriptions[0] = std::make_shared(MeshDesc( { uvector3{2594.16907620245, -4314.08525101657, 3773.59344941283}, uvector3{2594.16907620245, -4314.08525101657, 3573.59344941283}, uvector3{2594.16907620245, -5754.08525101657, 3573.59344941283}, uvector3{2594.16907620245, -5754.08525101657, 3773.59344941283}, uvector3{3726.28373273492, -4314.08525101657, 3773.59344941283}, uvector3{3593.12449608742, -4314.08525101657, 3573.59344941283}, uvector3{3726.28373273492, -5754.08525101657, 3773.59344941283}, uvector3{3593.12449608742, -5754.08525101657, 3573.59344941283} }, {0, 1, 2, 3, 1, 0, 4, 5, 0, 3, 6, 4, 3, 2, 7, 6, 2, 1, 5, 7, 6, 7, 5, 4}, {uvector2i{0, 4}, uvector2i{4, 4}, uvector2i{8, 4}, uvector2i{12, 4}, uvector2i{16, 4}, uvector2i{20, 4}})); organizer::BlobTree blobTree; blobTree.structure.resize(PRIMITIVE_CNT * 2 - 1); blobTree.primitiveNodeIdx.resize(PRIMITIVE_CNT); blobTree.structure[0] = {1, 0, 0, 0, 1, 2}; blobTree.structure[1] = {1, 0, 0, 0, 0, 0}; blobTree.structure[2] = {0, OP_DIFFERENCE, 0, 0, 1, 6 - 2}; blobTree.primitiveNodeIdx = {0, 1}; quadratureScene(primitiveDescriptions, uvector3(1879, -6020, 1000), uvector3(4544, -3903, 5000), blobTree); } void casePolyDifPolyThickFace() { const int PRIMITIVE_CNT = 2; std::vector> primitiveDescriptions(PRIMITIVE_CNT); primitiveDescriptions[0] = std::make_shared(MeshDesc( { uvector3{2629.82969004962, 6801.21455575771, 49030.00000000000}, uvector3{2869.82968877607, 6801.18983125328, 49030.00000000000}, uvector3{2869.82968877607, 6801.18983125328, 52180.00000000000}, uvector3{2629.82969004962, 6801.21455575771, 52180.00000000000}, uvector3{2870.01294237553, 8580.02684557581, 49030.00000000000}, uvector3{2629.98821659743, 8340.02684557581, 49030.00000000000}, uvector3{1939.99863941572, 8340.02684557581, 49030.00000000000}, uvector3{1939.99863941572, 8580.02684557581, 49030.00000000000}, uvector3{2629.98821659743, 8340.02684557581, 52180.00000000000}, uvector3{1939.99863941572, 8340.02684557581, 52180.00000000000}, uvector3{2870.01294237553, 8580.02684557581, 52180.00000000000}, uvector3{1939.99863941572, 8580.02684557581, 52180.00000000000} }, {0, 1, 2, 3, 4, 1, 0, 5, 6, 7, 6, 5, 8, 9, 5, 0, 3, 8, 8, 3, 2, 10, 11, 9, 1, 4, 10, 2, 4, 7, 11, 10, 7, 6, 9, 11}, {uvector2i{0, 4}, uvector2i{4, 6}, uvector2i{10, 4}, uvector2i{14, 4}, uvector2i{18, 6}, uvector2i{24, 4}, uvector2i{28, 4}, uvector2i{32, 4}})); primitiveDescriptions[1] = std::make_shared(MeshDesc( { uvector3{2629.99453728099, 8340.01156816906, 52180.00000000000}, uvector3{2869.99453728099, 8340.01156816906, 52180.00000000000}, uvector3{2869.99453728099, 8401.36916293070, 52180.00000000000}, uvector3{2869.99453728099, 8580.01156816906, 52180.00000000000}, uvector3{2629.99453728099, 8580.01156816906, 52180.00000000000}, uvector3{2629.99453728099, 8340.02684557581, 52180.00000000000}, uvector3{2629.99453728099, 8340.01156816906, 49030.00000000000}, uvector3{2869.99453728099, 8340.01156816906, 49030.00000000000}, uvector3{2869.99453728099, 8401.36916293070, 49030.00000000000}, uvector3{2869.99453728099, 8580.01156816906, 49030.00000000000}, uvector3{2629.99453728099, 8580.01156816906, 49030.00000000000} }, {0, 1, 2, 3, 4, 5, 6, 7, 1, 0, 7, 8, 9, 3, 2, 1, 9, 10, 4, 3, 10, 6, 0, 5, 4, 6, 10, 9, 8, 7}, {uvector2i{0, 6}, uvector2i{6, 4}, uvector2i{10, 6}, uvector2i{16, 4}, uvector2i{20, 5}, uvector2i{25, 5}})); organizer::BlobTree blobTree; blobTree.structure.resize(PRIMITIVE_CNT * 2 - 1); blobTree.primitiveNodeIdx.resize(PRIMITIVE_CNT); blobTree.structure[0] = {1, 0, 0, 0, 1, 2}; blobTree.structure[1] = {1, 0, 0, 0, 0, 0}; blobTree.structure[2] = {0, OP_DIFFERENCE, 0, 0, 1, 6 - 2}; blobTree.primitiveNodeIdx = {0, 1}; quadratureScene(primitiveDescriptions, uvector3(1939, 6801, 49030), uvector3(2871, 8581, 52180), blobTree); } void testPM() { // casePolyhedronDifFace(); // casePolyhedronTilted(); casePolyDifPolyThickFace(); }