#include #include #include #include #include "SDF_Visualize/sdf_visualizer.hpp" #include // 新增 #include // 新增 int main() { auto primitive_data_center = create_primitive_data_center(); //auto sphere1 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_SPHERE); //auto sphere2 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_SPHERE); //auto cylinder1 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); //auto cylinder2 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); auto polyline_extrude = create_primitive(primitive_data_center, PRIMITIVE_TYPE_EXTRUDE_POLYLINE); //auto helixline_extrude = create_primitive(primitive_data_center, PRIMITIVE_TYPE_EXTRUDE_HELIXLINE); //primitive_apply_translation(cylinder1, {1.0, 0.0, 0.0}); //primitive_apply_translation(sphere1, {1.0, 0.0, 0.0}); //primitive_apply_translation(polyline_extrude, {-2.0, 0.0, 0.0}); //primitive_apply_scale(cylinder1, {0.5, 1.0, 1.5}); //primitive_apply_scale(sphere2, {0.5, 1.0, 1.5}); //primitive_apply_scale(polyline_extrude, {1.3, 2.0, 0.6}); ////primitive_apply_scale(helixline_extrude, {0.7, 2.0, 1.0}); //double angle_x = 90.0 * pi / 180.0; // 角度转弧度 //primitive_apply_rotation(cylinder1, {sin(angle_x / 2.0), 0.0, 0.0, cos(angle_x / 2.0)}); //primitive_apply_rotation(sphere1, {sin(angle_x / 2.0), 0.0, 0.0, cos(angle_x / 2.0)}); ////primitive_apply_rotation(polyline_extrude, {sin(angle_x / 3.0), 0.0, 0.0, cos(angle_x / 1.0)}); //std::cout << "primitive created..." << std::endl; //double angle_x = 45.0 * pi / 180.0; // 角度转弧度 //primitive_apply_rotation(polyline_extrude, {0.0, -sin(angle_x / 2.0), 0.0, cos(angle_x / 1.0)}); //std::cout << "primitive created..." << std::endl; auto runtime_blobtree = create_blobtree(); auto node_iter = blobtree_add_primitive_node(runtime_blobtree, polyline_extrude); //auto node_iter1 = blobtree_add_primitive_node(runtime_blobtree, cylinder1); //auto node_iter2 = blobtree_add_primitive_node(runtime_blobtree, sphere1); //auto node_iter3 = blobtree_add_operation_node(runtime_blobtree, node_iter1, node_iter2, INTERSECTION_OP); //auto node_iter4 = blobtree_add_primitive_node(runtime_blobtree, sphere2); //auto node_iter5 = blobtree_add_operation_node(runtime_blobtree, node_iter3, node_iter4, UNION_OP); //auto node_iter6 = blobtree_add_primitive_node(runtime_blobtree, cylinder2); //auto node_iter7 = blobtree_add_operation_node(runtime_blobtree, node_iter6, node_iter5, DIFFERENCE_OP); //auto node_iter8 = blobtree_add_primitive_node(runtime_blobtree, polyline_extrude); //auto node_iter9 = blobtree_add_operation_node(runtime_blobtree, node_iter1, node_iter8, UNION_OP); auto baked_blobtree = bake_blobtree(runtime_blobtree); destroy_blobtree(runtime_blobtree); std::cout << "blobtree created..." << std::endl; // 定义SDF数据文件的保存路径 std::filesystem::path base_dir = "E:\\projects\\ImplicitSurfaceNetwork-xj\\application\\SDF_Visualize"; std::filesystem::path file_path = base_dir / "sdf_slice.txt"; // 确保目录存在 if (!std::filesystem::exists(base_dir)) { std::filesystem::create_directories(base_dir); std::cout << "已创建目录: " << base_dir.string() << std::endl; } // 打印文件存储路径 std::string sdf_output_path = file_path.string(); std::cout << "SDF数据将保存到: " << sdf_output_path << std::endl; // 打印文件存储路径 std::cout << "SDF数据将保存到: " << sdf_output_path << std::endl; dump_sdf_slice(*baked_blobtree, /*output_path=*/sdf_output_path, /*y_slice =*/0.0, /*grid_res =*/256, /*extra_margin=*/0.2); // 确认文件已生成 std::ifstream test_file(sdf_output_path); if (test_file.good()) { std::cout << "SDF数据文件已成功生成: " << sdf_output_path << std::endl; // 获取文件绝对路径 std::filesystem::path abs_path = std::filesystem::absolute(sdf_output_path); std::cout << " 绝对路径: " << abs_path.string() << std::endl; } else { std::cerr << "✗ 错误: SDF数据文件生成失败" << std::endl; } s_settings settings{}; settings.resolution = 48; // 72 settings.scene_aabb_margin = 1e-5; settings.restricted_primitive_bounding_test = true; auto solver = create_solver(baked_blobtree, settings); auto result = generate_polymesh(solver); print_statistics(solver); destroy_solver(solver); destroy_baked_blobtree(baked_blobtree); //destroy_primitive(sphere1); //destroy_primitive(cylinder1); //destroy_primitive(polyline_extrude); //destroy_primitive(helixline_extrude); destroy_primitive_data_center(primitive_data_center); return 0; }