| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -7,55 +7,94 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <construct_helper.hpp> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include "primitive_descriptor.h" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include "internal_primitive_desc.hpp" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					int main() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    std::cout << "Setting scene..." << std::endl; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    sphere_descriptor_t sphere1{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        {.0, .0, .0}, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        0.5 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void testExtrudeSDF() { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							printf("Testing extrude polyline SDF\n"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    auto profilePoints = std::array{raw_vector3d_t{-1., 0., 0.}, raw_vector3d_t{1., 0., 0.}}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							auto profileBulges = std::array{1.0, 1.0}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							polyline_descriptor_t profile{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								2, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								profilePoints.data(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								2, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								profileBulges.data(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								raw_vector3d_t{0., 0., 1.}, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								true | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    sphere_descriptor_t sphere2{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        {.01, .0, .0}, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        0.5 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							auto axisPoints = std::array{raw_vector3d_t{0., 0., 0.}, raw_vector3d_t{0., 0., 2.}}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							auto axisBulges = std::array{0.0}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							polyline_descriptor_t axis{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								2, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								axisPoints.data(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								1, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								axisBulges.data(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								raw_vector3d_t{0., 1., 0.}, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								false | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    box_descriptor_t box{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        {0., 0., 0.}, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        {1., 1., 1.} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    auto points = std::array{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        raw_vector3d_t{-7200.0000000000282, -7479.9999999993715, 0.0}, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        raw_vector3d_t{-4420.0000000000000, -7479.9999999993724, 0.0}, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        raw_vector3d_t{-4420.0000000000000, -7719.9999999993724, 0.0}, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        raw_vector3d_t{-7200.0000000000282, -7719.9999999993715, 0.0} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    extrude_polyline_descriptor_t extrude{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								1, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								&profile, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								axis | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // auto                 buldges = std::array{0.0, 0.0, 0.0, 0.0};
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // extrude_descriptor_t extrude{
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //     static_cast<uint32_t>(buldges.size()),
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //     raw_vector3d_t{0.0, 0.0, 78.000000000251021},
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //     points.data(),
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //     buldges.data()
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							aabb_t<> aabb{}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							internal::extrude_polyline extrude_polyline{extrude, aabb}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							Eigen::Vector3d p{1., 2., 1.}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							double res = extrude_polyline.evaluate_sdf(p); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							printf("SDF at (%f, %f, %f) is %f\n", p.x(), p.y(), p.z(), res); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					int main() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							testExtrudeSDF(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // std::cout << "Setting scene..." << std::endl;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // sphere_descriptor_t sphere1{
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //     {.0, .0, .0},
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //     0.5
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // };
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // sphere_descriptor_t sphere2{
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //     {.01, .0, .0},
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //     0.5
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // };
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // box_descriptor_t box{
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //     {0., 0., 0.},
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //     {1., 1., 1.}
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // };
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // auto tree_root = blobtree_new_node(&sphere1, PRIMITIVE_TYPE_SPHERE);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // auto tree_root = blobtree_new_node(&box, PRIMITIVE_TYPE_BOX);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // auto tree_root = blobtree_new_node(&sphere1, PRIMITIVE_TYPE_SPHERE);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // auto another_sphere_node = blobtree_new_node(&sphere2, PRIMITIVE_TYPE_SPHERE);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // virtual_node_boolean_union(&tree_root, &another_sphere_node);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    auto tree_root = make_primitive_node_by_move(box); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // auto tree_root = make_primitive_node_by_move(extrude);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    std::cout << "Setting environments..." << std::endl; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    setting_descriptor setting_desc{21, 1e-5}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    update_setting(setting_desc); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    update_environment(&tree_root); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    std::cout << "Executing solver..." << std::endl; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    auto result = execute_solver(&tree_root); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    std::cout << "Surface integral result: " << result.surf_int_result << std::endl; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    std::cout << "Volume integral result: " << result.vol_int_result << std::endl; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    std::cout << "Time statistics: " << std::endl; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    print_statistics(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // auto points = std::array{
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //     raw_vector3d_t{-7200.0000000000282, -7479.9999999993715, 0.0},
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //     raw_vector3d_t{-4420.0000000000000, -7479.9999999993724, 0.0},
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //     raw_vector3d_t{-4420.0000000000000, -7719.9999999993724, 0.0},
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    //     raw_vector3d_t{-7200.0000000000282, -7719.9999999993715, 0.0}
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // };
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // // auto                 buldges = std::array{0.0, 0.0, 0.0, 0.0};
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // // extrude_descriptor_t extrude{
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // //     static_cast<uint32_t>(buldges.size()),
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // //     raw_vector3d_t{0.0, 0.0, 78.000000000251021},
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // //     points.data(),
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // //     buldges.data()
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // // };
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // // auto tree_root = blobtree_new_node(&sphere1, PRIMITIVE_TYPE_SPHERE);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // // auto tree_root = blobtree_new_node(&box, PRIMITIVE_TYPE_BOX);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // // auto tree_root = blobtree_new_node(&sphere1, PRIMITIVE_TYPE_SPHERE);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // // auto another_sphere_node = blobtree_new_node(&sphere2, PRIMITIVE_TYPE_SPHERE);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // // virtual_node_boolean_union(&tree_root, &another_sphere_node);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // auto tree_root = make_primitive_node_by_move(box);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // // auto tree_root = make_primitive_node_by_move(extrude);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // std::cout << "Setting environments..." << std::endl;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // setting_descriptor setting_desc{21, 1e-5};
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // update_setting(setting_desc);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // update_environment(&tree_root);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // std::cout << "Executing solver..." << std::endl;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // auto result = execute_solver(&tree_root);
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // std::cout << "Surface integral result: " << result.surf_int_result << std::endl;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // std::cout << "Volume integral result: " << result.vol_int_result << std::endl;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // std::cout << "Time statistics: " << std::endl;
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // print_statistics();
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    return 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} |