|
|
@ -1,11 +1,14 @@ |
|
|
|
#pragma once |
|
|
|
#include <chrono> |
|
|
|
#include "organizer/blobtree.hpp" |
|
|
|
#include "organizer/loader.hpp" |
|
|
|
#include "organizer/timer.hpp" |
|
|
|
|
|
|
|
void loaderPolyTilted() |
|
|
|
{ |
|
|
|
Loader loader; |
|
|
|
|
|
|
|
std::vector<Point3D> points = { |
|
|
|
Loader loader; |
|
|
|
Timer timer("loading and blob construction"); |
|
|
|
std::vector<Point3D> pointsA = { |
|
|
|
{11748.40944836227, -4325.95442631630, 21549.59021205360}, |
|
|
|
{11748.40944836227, -4325.95442631630, 21688.15427665911}, |
|
|
|
{12484.47483358811, -3577.50000026381, 21256.03391230463}, |
|
|
@ -295,7 +298,7 @@ void loaderPolyTilted() |
|
|
|
{17624.99999998905, -8632.93491411901, 18198.71313931236}, |
|
|
|
{17624.99999998906, -9996.24203115674, 18211.84978571097} |
|
|
|
}; |
|
|
|
std::vector<int> indices = { |
|
|
|
std::vector<int> indicesA = { |
|
|
|
0, 1, 2, 3, 4, 1, 0, 5, 6, 7, 8, 2, 1, 4, 9, 3, 2, 8, 10, 11, 10, 8, 9, |
|
|
|
12, 6, 5, 11, 12, 11, 5, 0, 3, 10, 7, 6, 12, 9, 4, 7, 12, 85, 86, 87, 88, 89, 90, |
|
|
|
91, 92, 86, 85, 91, 93, 94, 95, 96, 97, 87, 86, 92, 98, 99, 100, 101, 102, 103, 96, 95, 104, 105, |
|
|
@ -306,7 +309,7 @@ void loaderPolyTilted() |
|
|
|
197, 188, 187, 186, 148, 197, 187, 271, 272, 273, 274, 241, 266, 275, 276, 277, 272, 271, 278, 279, 280, 281, 282, |
|
|
|
283, 266, 241, 284, 280, 279, 285, 286, 273, 285, 279, 284, 274, 273, 272, 277, 287, 286, 285, 287, 277, 276, 282, |
|
|
|
281, 280, 286, 276, 275, 283, 282, 266, 283, 275, 284, 241, 278, 274, 278, 271, 274}; |
|
|
|
std::vector<std::pair<int, int>> faces = { |
|
|
|
std::vector<std::pair<int, int>> facesA = { |
|
|
|
{0, 4 }, |
|
|
|
{4, 6 }, |
|
|
|
{10, 5 }, |
|
|
@ -353,33 +356,58 @@ void loaderPolyTilted() |
|
|
|
{217, 4 }, |
|
|
|
{221, 3 } |
|
|
|
}; |
|
|
|
|
|
|
|
std::vector<int> objExclusiveScan = {0, 9, 24, 34}; |
|
|
|
std::vector<std::vector<std::pair<int, int>>> objFaces(objExclusiveScan.size()); |
|
|
|
for (int i = 0; i < objExclusiveScan.size(); i++) { |
|
|
|
objFaces[i].assign(facesA.begin() + objExclusiveScan[i], |
|
|
|
i == objExclusiveScan.size() - 1 ? facesA.end() : facesA.begin() + objExclusiveScan[i + 1]); |
|
|
|
} |
|
|
|
|
|
|
|
// debug strange face
|
|
|
|
std::vector<Point3D> strangeFace; |
|
|
|
for (int index = faces[13].first; index < faces[13].first + faces[13].second; index++) { |
|
|
|
strangeFace.push_back(points[indices[index]]); |
|
|
|
for (int index = facesA[13].first; index < facesA[13].first + facesA[13].second; index++) { |
|
|
|
strangeFace.push_back(pointsA[indicesA[index]]); |
|
|
|
} |
|
|
|
|
|
|
|
auto tag1 = loader.addMesh(points, indices, faces); |
|
|
|
// std::cout << "Des volume:" << std::endl;
|
|
|
|
// loader.getAreaAndVolume(tag1);
|
|
|
|
|
|
|
|
auto tag2 = loader.addMesh( |
|
|
|
{ |
|
|
|
{17624.99999998905, -8510.00401819123, 17830.90112057791}, |
|
|
|
{17374.99999998905, -8510.00401819123, 17830.90112057791}, |
|
|
|
{17374.99999998905, -8510.00401819123, 18408.25138976753}, |
|
|
|
{17624.99999998905, -8510.00401819123, 18408.25138976753}, |
|
|
|
{17624.99999998906, -3577.50000024273, 20678.68364311939}, |
|
|
|
{17374.99999998906, -3577.50000024273, 20678.68364311939}, |
|
|
|
{17374.99999998906, -3577.50000024273, 21256.03391230901}, |
|
|
|
{17624.99999998906, -3577.50000024273, 21256.03391230901} |
|
|
|
}, |
|
|
|
{0, 1, 2, 3, 0, 1, 5, 4, 1, 2, 6, 5, 2, 3, 7, 6, 3, 0, 4, 7, 4, 5, 6, 7}, |
|
|
|
{{0, 4}, {4, 4}, {8, 4}, {12, 4}, {16, 4}, {20, 4}}); |
|
|
|
// std::cout << "Src volume:" << std::endl;
|
|
|
|
std::vector<Point3D> pointsB = { |
|
|
|
{17624.99999998905, -8510.00401819123, 17830.90112057791}, |
|
|
|
{17374.99999998905, -8510.00401819123, 17830.90112057791}, |
|
|
|
{17374.99999998905, -8510.00401819123, 18408.25138976753}, |
|
|
|
{17624.99999998905, -8510.00401819123, 18408.25138976753}, |
|
|
|
{17624.99999998906, -3577.50000024273, 20678.68364311939}, |
|
|
|
{17374.99999998906, -3577.50000024273, 20678.68364311939}, |
|
|
|
{17374.99999998906, -3577.50000024273, 21256.03391230901}, |
|
|
|
{17624.99999998906, -3577.50000024273, 21256.03391230901} |
|
|
|
}; |
|
|
|
std::vector<int> indicesB = {0, 1, 2, 3, 0, 1, 5, 4, 1, 2, 6, 5, 2, 3, 7, 6, 3, 0, 4, 7, 4, 5, 6, 7}; |
|
|
|
std::vector<std::pair<int, int>> facesB = { |
|
|
|
{0, 4}, |
|
|
|
{4, 4}, |
|
|
|
{8, 4}, |
|
|
|
{12, 4}, |
|
|
|
{16, 4}, |
|
|
|
{20, 4} |
|
|
|
}; |
|
|
|
|
|
|
|
const std::array<std::array<double, 3>, 3> rotationMatrix = {-0.6402, 0.6868, 0.3440, 0.6713, 0.7180, |
|
|
|
-0.1840, 0.3734, -0.1131, 0.9208}; |
|
|
|
// for (auto& point : pointsA) { point.rotation(rotationMatrix); }
|
|
|
|
|
|
|
|
auto tag1 = loader.addMesh(pointsA, indicesA, objFaces[0]); |
|
|
|
for (int i = 1; i < objFaces.size(); i++) { |
|
|
|
auto tmpTag = loader.addMesh(pointsA, indicesA, objFaces[i]); |
|
|
|
loader.unionNode(tag1, tmpTag); |
|
|
|
} |
|
|
|
auto tag2 = loader.addMesh(pointsB, indicesB, facesB); |
|
|
|
|
|
|
|
// loader.getAreaAndVolume(tag2);
|
|
|
|
|
|
|
|
loader.differentNode(tag1, tag2); |
|
|
|
timer.stop(); |
|
|
|
loader.getAreaAndVolume(tag1); |
|
|
|
} |
|
|
|
|
|
|
@ -387,7 +415,8 @@ void loaderPolyThickPlane() |
|
|
|
{ |
|
|
|
Loader loader; |
|
|
|
|
|
|
|
auto tag1 = loader.addMesh( |
|
|
|
Timer timer("loading and blob construction"); |
|
|
|
auto tag1 = loader.addMesh( |
|
|
|
{ |
|
|
|
{2629.82969004962, 6801.21455575771, 49030.00000000000}, |
|
|
|
{2869.82968877607, 6801.18983125328, 49030.00000000000}, |
|
|
@ -404,28 +433,34 @@ void loaderPolyThickPlane() |
|
|
|
}, |
|
|
|
{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}, |
|
|
|
{{0, 4}, {4, 6}, {10, 4}, {14, 4}, {18, 6}, {24, 4}, {28, 4}, {32, 4}}); |
|
|
|
std::cout << "Des volume:" << std::endl; |
|
|
|
loader.getAreaAndVolume(tag1); |
|
|
|
|
|
|
|
// auto tag2 = loader.addMesh(
|
|
|
|
// {
|
|
|
|
// {2629.99453728099, 8340.01156816906, 52180.00000000000},
|
|
|
|
// {2869.99453728099, 8340.01156816906, 52180.00000000000},
|
|
|
|
// {2869.99453728099, 8401.36916293070, 52180.00000000000},
|
|
|
|
// {2869.99453728099, 8580.01156816906, 52180.00000000000},
|
|
|
|
// {2629.99453728099, 8580.01156816906, 52180.00000000000},
|
|
|
|
// {2629.99453728099, 8340.02684557581, 52180.00000000000},
|
|
|
|
// {2629.99453728099, 8340.01156816906, 49030.00000000000},
|
|
|
|
// {2869.99453728099, 8340.01156816906, 49030.00000000000},
|
|
|
|
// {2869.99453728099, 8401.36916293070, 49030.00000000000},
|
|
|
|
// {2869.99453728099, 8580.01156816906, 49030.00000000000},
|
|
|
|
// {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},
|
|
|
|
// {{0, 6}, {6, 4}, {10, 6}, {16, 4}, {20, 5}, {25, 5}});
|
|
|
|
// std::cout << "Src volume:" << std::endl;
|
|
|
|
// loader.getAreaAndVolume(tag2);
|
|
|
|
|
|
|
|
// loader.differentNode(tag1, tag2);
|
|
|
|
/**** 处理凹多面体 */ |
|
|
|
auto& rep = loader.getVisible(tag1); |
|
|
|
rep.subBlobTree.structure[5].nodeOp = algoim::organizer::OP_UNION; |
|
|
|
// std::cout << "Des volume:" << std::endl;
|
|
|
|
// loader.getAreaAndVolume(tag1);
|
|
|
|
|
|
|
|
auto tag2 = loader.addMesh( |
|
|
|
{ |
|
|
|
{2629.99453728099, 8340.01156816906, 52180.00000000000}, |
|
|
|
{2869.99453728099, 8340.01156816906, 52180.00000000000}, |
|
|
|
{2869.99453728099, 8401.36916293070, 52180.00000000000}, |
|
|
|
{2869.99453728099, 8580.01156816906, 52180.00000000000}, |
|
|
|
{2629.99453728099, 8580.01156816906, 52180.00000000000}, |
|
|
|
{2629.99453728099, 8340.02684557581, 52180.00000000000}, |
|
|
|
{2629.99453728099, 8340.01156816906, 49030.00000000000}, |
|
|
|
{2869.99453728099, 8340.01156816906, 49030.00000000000}, |
|
|
|
{2869.99453728099, 8401.36916293070, 49030.00000000000}, |
|
|
|
{2869.99453728099, 8580.01156816906, 49030.00000000000}, |
|
|
|
{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}, |
|
|
|
{{0, 6}, {6, 4}, {10, 6}, {16, 4}, {20, 5}, {25, 5}}); |
|
|
|
|
|
|
|
loader.differentNode(tag1, tag2); |
|
|
|
|
|
|
|
timer.stop(); |
|
|
|
|
|
|
|
loader.getAreaAndVolume(tag1); |
|
|
|
} |
|
|
|