|
|
|
#pragma once
|
|
|
|
#include <memory>
|
|
|
|
#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<std::shared_ptr<PrimitiveDesc>> primitiveDescriptions(PRIMITIVE_CNT);
|
|
|
|
primitiveDescriptions[0] = std::make_shared<MeshDesc>(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>(CuboidDesc(uvector3(0.6, 0.6, -0.6), 2.));
|
|
|
|
// primitiveDescriptions[1] = std::make_shared<SphereDesc>(SphereDesc(1., uvector3(0.6, 0.6, -0.6), 1.));
|
|
|
|
primitiveDescriptions[2] = std::make_shared<SphereDesc>(SphereDesc(0.7, uvector3(0.8, 0.8, 0.8), 1.));
|
|
|
|
primitiveDescriptions[3] = std::make_shared<SphereDesc>(SphereDesc(0.5, uvector3(-0.3, -0.8, 0.8), 1.));
|
|
|
|
std::vector<uvector3> pyramidBottomVertices = {
|
|
|
|
uvector3{-1, -1, 0},
|
|
|
|
uvector3{1, -1, 0},
|
|
|
|
uvector3{1, 1, 0},
|
|
|
|
uvector3{-1, 1, 0}
|
|
|
|
};
|
|
|
|
// primitiveDescriptions[4] = std::make_shared<PyramidDesc>(pyramidBottomVertices, uvector3{0, 0, 1});
|
|
|
|
primitiveDescriptions[4] = std::make_shared<SphereDesc>(SphereDesc(0.2, uvector3(0.2, -0.7, 0.), 1.));
|
|
|
|
|
|
|
|
// primitiveDescriptions[5] = std::make_shared<SphereDesc>(SphereDesc(0.2, uvector3(0., -0.5, 0.), 1));
|
|
|
|
primitiveDescriptions[5] = std::make_shared<ConeDesc>(ConeDesc(uvector3(0., -0.2, 0.), 0.4, -0.7, 1));
|
|
|
|
// primitiveDescriptions[6] = std::make_shared<CylinderDesc>(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<std::shared_ptr<PrimitiveDesc>> primitiveDescriptions(PRIMITIVE_CNT);
|
|
|
|
primitiveDescriptions[1] = std::make_shared<HalfPlaneDesc>(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>(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<std::shared_ptr<PrimitiveDesc>> primitiveDescriptions(PRIMITIVE_CNT);
|
|
|
|
primitiveDescriptions[0] = std::make_shared<MeshDesc>(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>(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();
|
|
|
|
}
|