| 14 | using namespace PyMesh; |
| 15 | |
| 16 | void Arrangement2::run() { |
| 17 | const size_t num_pts = m_points.rows(); |
| 18 | |
| 19 | std::vector<Point_2> points; |
| 20 | points.reserve(num_pts); |
| 21 | for (size_t i=0; i<num_pts; i++) { |
| 22 | points.emplace_back(m_points(i, 0), m_points(i, 1)); |
| 23 | } |
| 24 | |
| 25 | const size_t num_segments = m_segments.rows(); |
| 26 | std::vector<Segment_2> segments; |
| 27 | segments.reserve(num_segments); |
| 28 | for (size_t i=0; i<num_segments; i++) { |
| 29 | segments.emplace_back( |
| 30 | points[m_segments(i, 0)], |
| 31 | points[m_segments(i, 1)]); |
| 32 | } |
| 33 | |
| 34 | CGAL::insert(m_arrangement, segments.begin(), segments.end()); |
| 35 | CGAL::is_valid(m_arrangement); |
| 36 | |
| 37 | const size_t num_vertices = m_arrangement.number_of_vertices(); |
| 38 | m_vertices.resize(num_vertices, 2); |
| 39 | size_t count = 0; |
| 40 | for (auto itr=m_arrangement.vertices_begin(); |
| 41 | itr != m_arrangement.vertices_end(); itr++) { |
| 42 | m_vertices(count, 0) = CGAL::to_double(itr->point()[0]); |
| 43 | m_vertices(count, 1) = CGAL::to_double(itr->point()[1]); |
| 44 | itr->set_data(count); |
| 45 | count++; |
| 46 | } |
| 47 | |
| 48 | const size_t num_edges = m_arrangement.number_of_edges(); |
| 49 | m_edges.resize(num_edges, 2); |
| 50 | count = 0; |
| 51 | for (auto itr=m_arrangement.edges_begin(); |
| 52 | itr != m_arrangement.edges_end(); itr++) { |
| 53 | m_edges(count, 0) = itr->source()->data(); |
| 54 | m_edges(count, 1) = itr->target()->data(); |
| 55 | itr->set_data(count); |
| 56 | itr->twin()->set_data(count); |
| 57 | count++; |
| 58 | } |
| 59 | |
| 60 | count=0; |
| 61 | for (auto itr=m_arrangement.faces_begin(); |
| 62 | itr != m_arrangement.faces_end(); itr++) { |
| 63 | itr->set_data(count); |
| 64 | count++; |
| 65 | } |
| 66 | } |
| 67 | |
| 68 | std::vector<std::pair<Arrangement2::ElementType, int>> Arrangement2::query( |
| 69 | const Matrix2Fr& pts) { |
no test coverage detected