#include #include #include #include #include #include // filepath: c:\Users\mckay\programs\ImplicitSurfaceNetwork\application\main.cpp void write_obj(const polymesh_t& mesh, std::string filename = "output.obj") { std::ofstream obj(filename); if (!obj) return; // 写入顶点 for (uint32_t i = 0; i < mesh.num_vertices; ++i) { const auto& v = mesh.vertices[i]; obj << "v " << v.x << " " << v.y << " " << v.z << "\n"; } // 写入面 uint32_t idx = 0; for (uint32_t i = 0; i < mesh.num_faces; ++i) { obj << "f"; for (uint32_t j = 0; j < mesh.vertex_counts[i]; ++j) { // OBJ 索引从1开始 obj << " " << (mesh.faces[idx++] + 1); } obj << "\n"; } std::cout << "OBJ file written to: " << std::filesystem::absolute(filename) << std::endl; } 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 cylinder = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); primitive_apply_translation(sphere1, {0.5, 0.0, 0.0}); std::cout << "primitive created..." << std::endl; auto runtime_blobtree = create_blobtree(); auto node_iter1 = blobtree_add_primitive_node(runtime_blobtree, cylinder); 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 baked_blobtree = bake_blobtree(runtime_blobtree); destroy_blobtree(runtime_blobtree); std::cout << "blobtree created..." << std::endl; s_settings settings{}; settings.resolution = 21; settings.scene_aabb_margin = 1e-5; settings.restricted_primitive_bounding_test = true; auto solver = create_solver(baked_blobtree, settings); auto result = generate_polymesh(solver); write_obj(result.mesh, "output.obj"); print_statistics(solver); destroy_solver(solver); destroy_baked_blobtree(baked_blobtree); destroy_primitive(sphere1); destroy_primitive(cylinder); destroy_primitive_data_center(primitive_data_center); return 0; }