| 261 | } |
| 262 | |
| 263 | void 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 |
nothing calls this directly
no test coverage detected