MCPcopy Create free account
hub / github.com/PyMesh/PyMesh / extract_result

Method extract_result

tools/Boolean/Clipper/ClipperEngine.cpp:178–226  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

176}
177
178void ClipperEngine::extract_result(const ClipperLib::Paths& paths) {
179 std::list<Vector2F> vertices;
180 Loops loops;
181 size_t num_segments = 0;
182 for (const auto& path : paths) {
183 Loop loop = path_to_loop(path, vertices);
184 loops.push_back(loop);
185 num_segments += loop.size();
186 }
187
188 const size_t num_loop_vertices = vertices.size();
189 MatrixFr loop_vertices(num_loop_vertices, 2);
190 size_t count = 0;
191 for (const auto& v : vertices) {
192 loop_vertices.row(count) = v;
193 count++;
194 }
195
196 MatrixIr segments(num_segments, 2);
197 count = 0;
198 for (auto loop : loops) {
199 const size_t loop_size = loop.size();
200 size_t i=0;
201 for (auto v_index : loop) {
202 const size_t curr_segment = count + i;
203 const size_t next_segment = count + (i+1)%loop_size;
204 segments.coeffRef(curr_segment, 1) = v_index;
205 segments.coeffRef(next_segment, 0) = v_index;
206 i++;
207 }
208 count+=loop_size;
209 }
210
211 if (num_segments > 0) {
212 // Known issue: duplicated vertices from different loops cause triangle to crash.
213 ::remove_duplicated_vertices(loop_vertices, segments);
214 TriangleWrapper tri_wrapper;
215 tri_wrapper.set_points(loop_vertices);
216 tri_wrapper.set_segments(segments);
217 tri_wrapper.set_split_boundary(false);
218 tri_wrapper.set_auto_hole_detection(true);
219 tri_wrapper.set_max_num_steiner_points(0);
220 tri_wrapper.set_verbosity(0);
221 tri_wrapper.run();
222
223 m_vertices = tri_wrapper.get_vertices();
224 m_faces = tri_wrapper.get_faces();
225 }
226}
227
228#endif

Callers

nothing calls this directly

Calls 12

path_to_loopFunction · 0.85
sizeMethod · 0.45
set_pointsMethod · 0.45
set_segmentsMethod · 0.45
set_split_boundaryMethod · 0.45
set_verbosityMethod · 0.45
runMethod · 0.45
get_verticesMethod · 0.45
get_facesMethod · 0.45

Tested by

no test coverage detected