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

Method run_triangle

tools/Triangle/TriangleWrapper.cpp:263–422  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

261}
262
263void TriangleWrapper::run_triangle(const std::string& flags) {
264 const size_t num_points = m_points.rows();
265 const size_t dim = m_points.cols();
266 const size_t num_segments = m_segments.rows();
267 const size_t pt_per_segment = m_segments.cols();
268 const size_t num_holes = m_holes.rows();
269 const size_t num_triangles = m_triangles.rows();
270 const size_t pt_per_triangle = m_triangles.cols();
271 const size_t num_areas = m_max_areas.size();
272
273 if (num_segments > 0 && pt_per_segment != 2) {
274 throw RuntimeError("Segments must consist of 2 points!");
275 }
276 if (num_triangles > 0 && pt_per_triangle != 3) {
277 throw RuntimeError("Triangles must consists of 3 points!");
278 }
279 if (dim != 2) {
280 throw RuntimeError("Triangle only works in 2D domain.");
281 }
282
283 auto generate_empty_triangulateio = []() {
284 triangulateio io;
285 io.numberofpoints = 0;
286 io.numberofpointattributes = 0;
287 io.numberoftriangles = 0;
288 io.numberoftriangleattributes = 0;
289 io.numberofcorners = 0;
290 io.numberofsegments = 0;
291 io.numberofholes = 0;
292 io.numberofregions = 0;
293 io.numberofedges = 0;
294 io.pointlist = nullptr;
295 io.pointattributelist = nullptr;
296 io.pointmarkerlist = nullptr;
297 io.trianglelist = nullptr;
298 io.triangleattributelist = nullptr;
299 io.trianglearealist = nullptr;
300 io.neighborlist = nullptr;
301 io.segmentlist = nullptr;
302 io.segmentmarkerlist = nullptr;
303 io.edgelist = nullptr;
304 io.edgemarkerlist = nullptr;
305 io.holelist = nullptr;
306 io.regionlist = nullptr;
307 io.normlist = nullptr;
308 return io;
309 };
310
311 triangulateio in = generate_empty_triangulateio();
312 triangulateio out = generate_empty_triangulateio();
313 triangulateio out_voro = generate_empty_triangulateio();
314
315 in.numberofpoints = num_points;
316 in.numberofpointattributes = 0;
317 in.pointlist = new REAL[num_points * dim];
318 std::copy(m_points.data(), m_points.data() + num_points * dim,
319 in.pointlist);
320

Callers

nothing calls this directly

Calls 3

RuntimeErrorClass · 0.85
triangulateFunction · 0.50
sizeMethod · 0.45

Tested by

no test coverage detected