| 18 | typedef boost::shared_ptr<BSPlib::Bsp> BSPPtr; |
| 19 | |
| 20 | BSPPtr raw_to_bsp(const MatrixFr& vertices, const MatrixIr& faces) { |
| 21 | const size_t num_vertices = vertices.rows(); |
| 22 | const size_t num_faces = faces.rows(); |
| 23 | assert(vertices.cols() == 3); |
| 24 | assert(faces.cols() == 3); |
| 25 | |
| 26 | PLYmesh mesh; |
| 27 | mesh.vertices.resize(num_vertices * 3); |
| 28 | std::copy(vertices.data(), vertices.data() + num_vertices*3, |
| 29 | mesh.vertices.begin()); |
| 30 | |
| 31 | mesh.faces.resize(num_faces); |
| 32 | for (size_t i=0; i<num_faces; i++) { |
| 33 | mesh.faces[i] = {faces(i,0), faces(i,1), faces(i,2)}; |
| 34 | } |
| 35 | BRep brep; |
| 36 | Ply2Convex(mesh, brep); |
| 37 | { |
| 38 | auto r = BSPlib::Bsp::BuildTree(brep); |
| 39 | auto convex_polys = r->GetBoundary(); |
| 40 | std::vector<BSPlib::MetricPolygon> metric_polys(convex_polys.size()); |
| 41 | std::transform(convex_polys.begin(), convex_polys.end(), |
| 42 | metric_polys.begin(), [](const BSPlib::ConvexPolygon& p) { |
| 43 | return BSPlib::Approximate(p); }); |
| 44 | PLYmesh tmp; |
| 45 | Metric2Ply(metric_polys, tmp); |
| 46 | Write("tmp.ply", tmp); |
| 47 | } |
| 48 | return BSPlib::Bsp::BuildTree(brep); |
| 49 | } |
| 50 | |
| 51 | void bsp_to_raw(const BSPPtr bsp, MatrixFr& vertices, MatrixIr& faces) { |
| 52 | const auto convex_polys = bsp->GetBoundary(); |
no test coverage detected