| 
						
						
						
					 | 
					@ -1,11 +1,14 @@ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					#pragma once | 
					 | 
					 | 
					#pragma once | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					#include <chrono> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					#include "organizer/blobtree.hpp" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					#include "organizer/loader.hpp" | 
					 | 
					 | 
					#include "organizer/loader.hpp" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					#include "organizer/timer.hpp" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					void loaderPolyTilted() | 
					 | 
					 | 
					void loaderPolyTilted() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					{ | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    Loader               loader; | 
					 | 
					 | 
					    Loader               loader; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					
 | 
					 | 
					 | 
					    Timer                timer("loading and blob construction"); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    std::vector<Point3D> points = { | 
					 | 
					 | 
					    std::vector<Point3D> pointsA = { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        {11748.40944836227, -4325.95442631630,  21549.59021205360}, | 
					 | 
					 | 
					        {11748.40944836227, -4325.95442631630,  21549.59021205360}, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        {11748.40944836227, -4325.95442631630,  21688.15427665911}, | 
					 | 
					 | 
					        {11748.40944836227, -4325.95442631630,  21688.15427665911}, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        {12484.47483358811, -3577.50000026381,  21256.03391230463}, | 
					 | 
					 | 
					        {12484.47483358811, -3577.50000026381,  21256.03391230463}, | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -295,7 +298,7 @@ void loaderPolyTilted() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        {17624.99999998905, -8632.93491411901,  18198.71313931236}, | 
					 | 
					 | 
					        {17624.99999998905, -8632.93491411901,  18198.71313931236}, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        {17624.99999998906, -9996.24203115674,  18211.84978571097} | 
					 | 
					 | 
					        {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, | 
					 | 
					 | 
					        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, | 
					 | 
					 | 
					        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, | 
					 | 
					 | 
					        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, | 
					 | 
					 | 
					        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, | 
					 | 
					 | 
					        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}; | 
					 | 
					 | 
					        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 }, | 
					 | 
					 | 
					        {0,   4 }, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        {4,   6 }, | 
					 | 
					 | 
					        {4,   6 }, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        {10,  5 }, | 
					 | 
					 | 
					        {10,  5 }, | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -353,18 +356,24 @@ void loaderPolyTilted() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        {217, 4 }, | 
					 | 
					 | 
					        {217, 4 }, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        {221, 3 } | 
					 | 
					 | 
					        {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
 | 
					 | 
					 | 
					    // debug strange face
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    std::vector<Point3D> strangeFace; | 
					 | 
					 | 
					    std::vector<Point3D> strangeFace; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    for (int index = faces[13].first; index < faces[13].first + faces[13].second; index++) { | 
					 | 
					 | 
					    for (int index = facesA[13].first; index < facesA[13].first + facesA[13].second; index++) { | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					        strangeFace.push_back(points[indices[index]]); | 
					 | 
					 | 
					        strangeFace.push_back(pointsA[indicesA[index]]); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    } | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    auto tag1 = loader.addMesh(points, indices, faces); | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    // std::cout << "Des volume:" << std::endl;
 | 
					 | 
					 | 
					    // std::cout << "Des volume:" << std::endl;
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    // loader.getAreaAndVolume(tag1);
 | 
					 | 
					 | 
					    // loader.getAreaAndVolume(tag1);
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    auto tag2 = loader.addMesh( | 
					 | 
					 | 
					    std::vector<Point3D> pointsB = { | 
				
			
			
				
				
			
		
	
		
		
			
				
					 | 
					 | 
					        { | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        {17624.99999998905, -8510.00401819123, 17830.90112057791}, | 
					 | 
					 | 
					        {17624.99999998905, -8510.00401819123, 17830.90112057791}, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        {17374.99999998905, -8510.00401819123, 17830.90112057791}, | 
					 | 
					 | 
					        {17374.99999998905, -8510.00401819123, 17830.90112057791}, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        {17374.99999998905, -8510.00401819123, 18408.25138976753}, | 
					 | 
					 | 
					        {17374.99999998905, -8510.00401819123, 18408.25138976753}, | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -373,13 +382,32 @@ void loaderPolyTilted() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        {17374.99999998906, -3577.50000024273, 20678.68364311939}, | 
					 | 
					 | 
					        {17374.99999998906, -3577.50000024273, 20678.68364311939}, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        {17374.99999998906, -3577.50000024273, 21256.03391230901}, | 
					 | 
					 | 
					        {17374.99999998906, -3577.50000024273, 21256.03391230901}, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        {17624.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}, | 
					 | 
					 | 
					    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}; | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					        {{0, 4}, {4, 4}, {8, 4}, {12, 4}, {16, 4}, {20, 4}}); | 
					 | 
					 | 
					    std::vector<std::pair<int, int>> facesB   = { | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					    // std::cout << "Src volume:" << std::endl;
 | 
					 | 
					 | 
					        {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.getAreaAndVolume(tag2);
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    loader.differentNode(tag1, tag2); | 
					 | 
					 | 
					    loader.differentNode(tag1, tag2); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    timer.stop(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    loader.getAreaAndVolume(tag1); | 
					 | 
					 | 
					    loader.getAreaAndVolume(tag1); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					} | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -387,6 +415,7 @@ void loaderPolyThickPlane() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					{ | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    Loader loader; | 
					 | 
					 | 
					    Loader loader; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Timer timer("loading and blob construction"); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    auto  tag1 = loader.addMesh( | 
					 | 
					 | 
					    auto  tag1 = loader.addMesh( | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        { | 
					 | 
					 | 
					        { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            {2629.82969004962, 6801.21455575771, 49030.00000000000}, | 
					 | 
					 | 
					            {2629.82969004962, 6801.21455575771, 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, 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}}); | 
					 | 
					 | 
					        {{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);
 | 
					 | 
					 | 
					    // 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); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					} | 
					 | 
					 | 
					} | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					
  |