%module{Slic3r::XS}; %package{Slic3r::TriangleMesh::XS}; %{ PROTOTYPES: DISABLE #include std::string hello_world() CODE: RETVAL = "Hello world!"; OUTPUT: RETVAL void stl_repair(input_file, output_file) char* input_file; char* output_file; CODE: int i; stl_file stl_in; stl_open(&stl_in, input_file); // checking exact stl_check_facets_exact(&stl_in); stl_in.stats.facets_w_1_bad_edge = (stl_in.stats.connected_facets_2_edge - stl_in.stats.connected_facets_3_edge); stl_in.stats.facets_w_2_bad_edge = (stl_in.stats.connected_facets_1_edge - stl_in.stats.connected_facets_2_edge); stl_in.stats.facets_w_3_bad_edge = (stl_in.stats.number_of_facets - stl_in.stats.connected_facets_1_edge); // checking nearby int last_edges_fixed = 0; float tolerance = stl_in.stats.shortest_edge; float increment = stl_in.stats.bounding_diameter / 10000.0; int iterations = 2; if (stl_in.stats.connected_facets_3_edge < stl_in.stats.number_of_facets) { for (i = 0; i < iterations; i++) { if (stl_in.stats.connected_facets_3_edge < stl_in.stats.number_of_facets) { printf("Checking nearby. Tolerance= %f Iteration=%d of %d...", tolerance, i + 1, iterations); stl_check_facets_nearby(&stl_in, tolerance); printf(" Fixed %d edges.\n", stl_in.stats.edges_fixed - last_edges_fixed); last_edges_fixed = stl_in.stats.edges_fixed; tolerance += increment; } else { printf("All facets connected. No further nearby check necessary.\n"); break; } } } else { printf("All facets connected. No nearby check necessary.\n"); } // remove_unconnected if (stl_in.stats.connected_facets_3_edge < stl_in.stats.number_of_facets) { printf("Removing unconnected facets...\n"); stl_remove_unconnected_facets(&stl_in); } else printf("No unconnected need to be removed.\n"); // fill_holes if (stl_in.stats.connected_facets_3_edge < stl_in.stats.number_of_facets) { printf("Filling holes...\n"); stl_fill_holes(&stl_in); } else printf("No holes need to be filled.\n"); // normal_directions printf("Checking normal directions...\n"); stl_fix_normal_directions(&stl_in); // normal_values printf("Checking normal values...\n"); stl_fix_normal_values(&stl_in); // write STL //stl_write_ascii(&stl_in, output_file, (char*)"Repaired by Slic3r + ADMesh"); stl_generate_shared_vertices(&stl_in); stl_write_obj(&stl_in, output_file); stl_close(&stl_in); %}