Zero-radius rounded rectangles

This commit is contained in:
Ken Arroyo Ohori
2017-03-06 15:03:57 -06:00
parent 484cea968e
commit ca19d447cc
+21 -18
View File
@@ -60,26 +60,29 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcRoundedRectangleProfileDef
const int segments = 3; const int segments = 3;
face = cgal_face_t(); if (r == 0.0) {
face = cgal_face_t();
for (int current_segment = 0; current_segment <= segments; ++current_segment) { face.outer.push_back(Kernel::Point_3(-x, -y, 0.0));
double current_angle = current_segment*0.5*3.141592653589793/((double)segments); face.outer.push_back(Kernel::Point_3( x, -y, 0.0));
face.outer.push_back(Kernel::Point_3(x-r+r*cos(current_angle), y-r+r*sin(current_angle), 0)); face.outer.push_back(Kernel::Point_3( x, y, 0.0));
face.outer.push_back(Kernel::Point_3(-x, y, 0.0));
} }
for (int current_segment = 0; current_segment <= segments; ++current_segment) { else {
double current_angle = (0.5*3.141592653589793+current_segment*0.5*3.141592653589793)/((double)segments); face = cgal_face_t();
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 = 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) { } 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); 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)); 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) { face.outer.push_back(Kernel::Point_3(-x+r+r*cos(current_angle), -y+r+r*sin(current_angle), 0));
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) {
face.outer.push_back(Kernel::Point_3(x-r+r*cos(current_angle), -y+r+r*sin(current_angle), 0)); 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));
}
} }
if (has_position) { if (has_position) {