From b5e79b2558be6b5382c670d62c185f2e4abde5b2 Mon Sep 17 00:00:00 2001 From: Ken Arroyo Ohori Date: Fri, 10 Mar 2017 17:44:19 -0600 Subject: [PATCH 1/3] Debug code --- .../kernels/cgal/CgalIfcGeomShapes.cpp | 4 --- src/ifcgeom/kernels/cgal/CgalKernel.cpp | 25 +++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/ifcgeom/kernels/cgal/CgalIfcGeomShapes.cpp b/src/ifcgeom/kernels/cgal/CgalIfcGeomShapes.cpp index 3eba31aa9c..788db838aa 100644 --- a/src/ifcgeom/kernels/cgal/CgalIfcGeomShapes.cpp +++ b/src/ifcgeom/kernels/cgal/CgalIfcGeomShapes.cpp @@ -37,8 +37,6 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcMappedItem* l, ConversionR IfcSchema::IfcCartesianTransformationOperator* transform = l->MappingTarget(); if ( transform->is(IfcSchema::Type::IfcCartesianTransformationOperator3DnonUniform) ) { IfcGeom::CgalKernel::convert((IfcSchema::IfcCartesianTransformationOperator3DnonUniform*)transform,gtrsf); - Logger::Message(Logger::LOG_ERROR, "Unsupported MappingTarget:", transform->entity); - return false; } else if ( transform->is(IfcSchema::Type::IfcCartesianTransformationOperator2DnonUniform) ) { Logger::Message(Logger::LOG_ERROR, "Unsupported MappingTarget:", transform->entity); return false; @@ -46,8 +44,6 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcMappedItem* l, ConversionR cgal_placement_t trsf; IfcGeom::CgalKernel::convert((IfcSchema::IfcCartesianTransformationOperator3D*)transform,trsf); gtrsf = trsf; -// Logger::Message(Logger::LOG_ERROR, "Unsupported MappingTarget:", transform->entity); -// return false; } else if ( transform->is(IfcSchema::Type::IfcCartesianTransformationOperator2D) ) { cgal_placement_t trsf_2d; Logger::Message(Logger::LOG_ERROR, "Unsupported MappingTarget:", transform->entity); diff --git a/src/ifcgeom/kernels/cgal/CgalKernel.cpp b/src/ifcgeom/kernels/cgal/CgalKernel.cpp index f111d9bc93..16c58bbd5b 100644 --- a/src/ifcgeom/kernels/cgal/CgalKernel.cpp +++ b/src/ifcgeom/kernels/cgal/CgalKernel.cpp @@ -213,6 +213,13 @@ bool IfcGeom::CgalKernel::convert_openings(const IfcSchema::IfcProduct* entity, // Move the opening into the coordinate system of the IfcProduct opening_trsf = opening_trsf * entity_trsf.inverse(); +// std::cout << "opening_trsf" << 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; +// } + IfcSchema::IfcProductRepresentation* prodrep = fes->Representation(); IfcSchema::IfcRepresentation::list::ptr reps = prodrep->Representations(); @@ -246,7 +253,25 @@ bool IfcGeom::CgalKernel::convert_openings(const IfcSchema::IfcProduct* entity, cgal_shape_t brep_cut_result(entity_shape); for (auto &opening: opening_shapelist) { + + CGAL::Polyhedron_3 polyhedron; + brep_cut_result.convert_to_polyhedron(polyhedron); + std::ofstream fresult; + fresult.open("/Users/ken/Desktop/before.off"); + fresult << polyhedron << std::endl; + fresult.close(); + + opening.convert_to_polyhedron(polyhedron); + fresult.open("/Users/ken/Desktop/opening.off"); + fresult << polyhedron << std::endl; + fresult.close(); + brep_cut_result -= opening; + + brep_cut_result.convert_to_polyhedron(polyhedron); + fresult.open("/Users/ken/Desktop/after.off"); + fresult << polyhedron << std::endl; + fresult.close(); } if (brep_cut_result.is_valid()) { From ac7099ab39803f6e6f53d55dbd844ff0cda86b59 Mon Sep 17 00:00:00 2001 From: Ken Arroyo Ohori Date: Fri, 10 Mar 2017 18:21:15 -0600 Subject: [PATCH 2/3] Fixed bug with opening placements --- .../kernels/cgal/CgalIfcGeomShapes.cpp | 24 +++++++++++--- src/ifcgeom/kernels/cgal/CgalKernel.cpp | 33 +++++++++++++++---- 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/ifcgeom/kernels/cgal/CgalIfcGeomShapes.cpp b/src/ifcgeom/kernels/cgal/CgalIfcGeomShapes.cpp index 788db838aa..e06163c425 100644 --- a/src/ifcgeom/kernels/cgal/CgalIfcGeomShapes.cpp +++ b/src/ifcgeom/kernels/cgal/CgalIfcGeomShapes.cpp @@ -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(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; } diff --git a/src/ifcgeom/kernels/cgal/CgalKernel.cpp b/src/ifcgeom/kernels/cgal/CgalKernel.cpp index 16c58bbd5b..bc13ea6fb0 100644 --- a/src/ifcgeom/kernels/cgal/CgalKernel.cpp +++ b/src/ifcgeom/kernels/cgal/CgalKernel.cpp @@ -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; +// } } } From d02918070d601811f730663f400048bc11ffe203 Mon Sep 17 00:00:00 2001 From: Ken Arroyo Ohori Date: Fri, 10 Mar 2017 18:26:15 -0600 Subject: [PATCH 3/3] Remove debug code --- src/ifcgeom/kernels/cgal/CgalKernel.cpp | 34 +++++++++++++------------ 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/ifcgeom/kernels/cgal/CgalKernel.cpp b/src/ifcgeom/kernels/cgal/CgalKernel.cpp index bc13ea6fb0..10e616c318 100644 --- a/src/ifcgeom/kernels/cgal/CgalKernel.cpp +++ b/src/ifcgeom/kernels/cgal/CgalKernel.cpp @@ -245,7 +245,9 @@ 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(); + 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()); opening_shape.transform(gtrsf); @@ -275,24 +277,24 @@ bool IfcGeom::CgalKernel::convert_openings(const IfcSchema::IfcProduct* entity, for (auto &opening: opening_shapelist) { - CGAL::Polyhedron_3 polyhedron; - brep_cut_result.convert_to_polyhedron(polyhedron); - std::ofstream fresult; - fresult.open("/Users/ken/Desktop/before.off"); - fresult << polyhedron << std::endl; - fresult.close(); - - opening.convert_to_polyhedron(polyhedron); - fresult.open("/Users/ken/Desktop/opening.off"); - fresult << polyhedron << std::endl; - fresult.close(); +// CGAL::Polyhedron_3 polyhedron; +// brep_cut_result.convert_to_polyhedron(polyhedron); +// std::ofstream fresult; +// fresult.open("/Users/ken/Desktop/before.off"); +// fresult << polyhedron << std::endl; +// fresult.close(); +// +// opening.convert_to_polyhedron(polyhedron); +// fresult.open("/Users/ken/Desktop/opening.off"); +// fresult << polyhedron << std::endl; +// fresult.close(); brep_cut_result -= opening; - brep_cut_result.convert_to_polyhedron(polyhedron); - fresult.open("/Users/ken/Desktop/after.off"); - fresult << polyhedron << std::endl; - fresult.close(); +// brep_cut_result.convert_to_polyhedron(polyhedron); +// fresult.open("/Users/ken/Desktop/after.off"); +// fresult << polyhedron << std::endl; +// fresult.close(); } if (brep_cut_result.is_valid()) {