mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-22 05:00:53 +00:00
Zero-radius rounded rectangles
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user