Fixed bug with opening placements

This commit is contained in:
Ken Arroyo Ohori
2017-03-10 18:21:15 -06:00
parent b5e79b2558
commit ac7099ab39
2 changed files with 46 additions and 11 deletions
+19 -5
View File
@@ -235,11 +235,12 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcExtrudedAreaSolid *l, cgal
// std::cout << "Before: " << hole_polyhedron.size_of_vertices() << " vertices and " << hole_polyhedron.size_of_facets() << " facets" << std::endl;
CGAL::Polygon_mesh_processing::stitch_borders(hole_polyhedron);
if (!hole_polyhedron.is_valid()) {
std::cout << "Invalid hole polyhedron!" << std::endl;
std::ofstream fresult;
fresult.open("/Users/ken/Desktop/invalid.off");
fresult << hole_polyhedron << std::endl;
fresult.close();
// std::cout << "Invalid hole polyhedron!" << std::endl;
// std::ofstream fresult;
// fresult.open("/Users/ken/Desktop/invalid.off");
// fresult << hole_polyhedron << std::endl;
// fresult.close();
return false;
}
for (auto &vertex : vertices(hole_polyhedron)) {
@@ -254,6 +255,19 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcExtrudedAreaSolid *l, cgal
shape -= CGAL::Nef_polyhedron_3<Kernel>(hole_polyhedron);
}
// std::cout << "trsf" << std::endl;
// for (int i = 0; i < 3; ++i) {
// for (int j = 0; j < 4; ++j) {
// std::cout << trsf.cartesian(i, j) << " ";
// } std::cout << std::endl;
// }
// shape.convert_to_polyhedron(polyhedron);
// std::ofstream fresult;
// fresult.open("/Users/ken/Desktop/extrusion.off");
// fresult << polyhedron << std::endl;
// fresult.close();
return true;
}
+27 -6
View File
@@ -210,10 +210,24 @@ bool IfcGeom::CgalKernel::convert_openings(const IfcSchema::IfcProduct* entity,
} catch (...) {}
}
// std::cout << "entity_trsf" << std::endl;
// for (int i = 0; i < 3; ++i) {
// for (int j = 0; j < 4; ++j) {
// std::cout << entity_trsf.cartesian(i, j) << " ";
// } std::cout << std::endl;
// }
//
// std::cout << "opening_trsf before" << std::endl;
// for (int i = 0; i < 3; ++i) {
// for (int j = 0; j < 4; ++j) {
// std::cout << opening_trsf.cartesian(i, j) << " ";
// } std::cout << std::endl;
// }
// Move the opening into the coordinate system of the IfcProduct
opening_trsf = opening_trsf * entity_trsf.inverse();
// std::cout << "opening_trsf" << std::endl;
// std::cout << "opening_trsf after" << std::endl;
// for (int i = 0; i < 3; ++i) {
// for (int j = 0; j < 4; ++j) {
// std::cout << opening_trsf.cartesian(i, j) << " ";
@@ -230,12 +244,19 @@ bool IfcGeom::CgalKernel::convert_openings(const IfcSchema::IfcProduct* entity,
}
for ( unsigned int i = 0; i < opening_shapes.size(); ++ i ) {
cgal_placement_t gtrsf;
if (opening_shapes[i].Placement()) gtrsf = *(CgalPlacement*)opening_shapes[i].Placement();
gtrsf = gtrsf * opening_trsf;
cgal_shape_t opening_shape(((CgalShape*)opening_shapes[i].Shape())->shape());
if (opening_shapes[i].Placement()) {
cgal_placement_t gtrsf = *(CgalPlacement*)opening_shapes[i].Placement();
gtrsf = gtrsf * opening_trsf;
opening_shape.transform(gtrsf);
} opening_shapelist.push_back(opening_shape);
opening_shape.transform(gtrsf);
opening_shapelist.push_back(opening_shape);
// std::cout << "gtrsf" << std::endl;
// for (int i = 0; i < 3; ++i) {
// for (int j = 0; j < 4; ++j) {
// std::cout << gtrsf.cartesian(i, j) << " ";
// } std::cout << std::endl;
// }
}
}