From 66048610e239232237983ede202bbc92bbbb4001 Mon Sep 17 00:00:00 2001 From: Ken Arroyo Ohori Date: Tue, 7 Mar 2017 13:41:04 -0600 Subject: [PATCH] Rounded rectangles work now, def must be before rectangles --- src/ifcgeom/kernels/cgal/CgalEntityMapping.h | 2 +- src/ifcgeom/kernels/cgal/CgalIfcGeomFaces.cpp | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/ifcgeom/kernels/cgal/CgalEntityMapping.h b/src/ifcgeom/kernels/cgal/CgalEntityMapping.h index f9f1b43252..52ca33352d 100644 --- a/src/ifcgeom/kernels/cgal/CgalEntityMapping.h +++ b/src/ifcgeom/kernels/cgal/CgalEntityMapping.h @@ -52,8 +52,8 @@ FACE(IfcArbitraryClosedProfileDef); FACE(IfcCircleHollowProfileDef); FACE(IfcCircleProfileDef); FACE(IfcFace); -FACE(IfcRectangleProfileDef); FACE(IfcRoundedRectangleProfileDef); +FACE(IfcRectangleProfileDef); FACE(IfcTrapeziumProfileDef); FACE(IfcEllipseProfileDef); diff --git a/src/ifcgeom/kernels/cgal/CgalIfcGeomFaces.cpp b/src/ifcgeom/kernels/cgal/CgalIfcGeomFaces.cpp index f49fcc8cf2..c5e861b587 100644 --- a/src/ifcgeom/kernels/cgal/CgalIfcGeomFaces.cpp +++ b/src/ifcgeom/kernels/cgal/CgalIfcGeomFaces.cpp @@ -43,6 +43,8 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcRectangleProfileDef* l, cg // TODO: Untested bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcRoundedRectangleProfileDef* l, cgal_face_t& face) { + std::cout << "IfcRoundedRectangleProfileDef" << std::endl; + const double x = l->XDim() / 2.0f * getValue(GV_LENGTH_UNIT); const double y = l->YDim() / 2.0f * getValue(GV_LENGTH_UNIT); const double r = l->RoundingRadius() * getValue(GV_LENGTH_UNIT); @@ -73,14 +75,17 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcRoundedRectangleProfileDef for (int current_segment = 0; current_segment <= segments; ++current_segment) { double current_angle = current_segment*0.5*3.141592653589793/((double)segments); face.outer.push_back(Kernel::Point_3(x-r+r*cos(current_angle), y-r+r*sin(current_angle), 0)); - } for (int current_segment = 0; current_segment <= segments; ++current_segment) { - double current_angle = (0.5*3.141592653589793+current_segment*0.5*3.141592653589793)/((double)segments); + } + for (int current_segment = 0; current_segment <= segments; ++current_segment) { + double current_angle = 0.5*3.141592653589793+current_segment*0.5*3.141592653589793/((double)segments); face.outer.push_back(Kernel::Point_3(-x+r+r*cos(current_angle), y-r+r*sin(current_angle), 0)); - } for (int current_segment = 0; current_segment <= segments; ++current_segment) { - double current_angle = (1.0*3.141592653589793+current_segment*0.5*3.141592653589793)/((double)segments); + } + for (int current_segment = 0; current_segment <= segments; ++current_segment) { + double current_angle = 1.0*3.141592653589793+current_segment*0.5*3.141592653589793/((double)segments); face.outer.push_back(Kernel::Point_3(-x+r+r*cos(current_angle), -y+r+r*sin(current_angle), 0)); - } for (int current_segment = 0; current_segment <= segments; ++current_segment) { - double current_angle = (1.5*3.141592653589793+current_segment*0.5*3.141592653589793)/((double)segments); + } + for (int current_segment = 0; current_segment <= segments; ++current_segment) { + double current_angle = 1.5*3.141592653589793+current_segment*0.5*3.141592653589793/((double)segments); face.outer.push_back(Kernel::Point_3(x-r+r*cos(current_angle), -y+r+r*sin(current_angle), 0)); } }