Sketcher: Fix scaling down ellipses and arcs of ellipses (#21718)

* Reorder ellipse major/minor radius assignment when scaling down

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
theo-vt
2025-06-03 05:16:56 -04:00
committed by GitHub
parent d435e31174
commit 7046383a09

View File

@@ -263,15 +263,33 @@ private:
}
else if (isEllipse(*geo)) {
auto* ellipse = static_cast<Part::GeomEllipse*>(geo); // NOLINT
ellipse->setMajorRadius(ellipse->getMajorRadius() * scaleFactor);
ellipse->setMinorRadius(ellipse->getMinorRadius() * scaleFactor);
// OpenCascade throws if we try to set a major radius smaller than
// the minor radius or conversly, so we reorder the operations
// depending on if we scale up or down
if (scaleFactor < 1.0) {
ellipse->setMinorRadius(ellipse->getMinorRadius() * scaleFactor);
ellipse->setMajorRadius(ellipse->getMajorRadius() * scaleFactor);
}
else {
ellipse->setMajorRadius(ellipse->getMajorRadius() * scaleFactor);
ellipse->setMinorRadius(ellipse->getMinorRadius() * scaleFactor);
}
ellipse->setCenter(
getScaledPoint(ellipse->getCenter(), referencePoint, scaleFactor));
}
else if (isArcOfEllipse(*geo)) {
auto* arcOfEllipse = static_cast<Part::GeomArcOfEllipse*>(geo); // NOLINT
arcOfEllipse->setMajorRadius(arcOfEllipse->getMajorRadius() * scaleFactor);
arcOfEllipse->setMinorRadius(arcOfEllipse->getMinorRadius() * scaleFactor);
// Same reasoning as Part::GeomEllipse
if (scaleFactor < 1.0) {
arcOfEllipse->setMinorRadius(arcOfEllipse->getMinorRadius() * scaleFactor);
arcOfEllipse->setMajorRadius(arcOfEllipse->getMajorRadius() * scaleFactor);
}
else {
arcOfEllipse->setMajorRadius(arcOfEllipse->getMajorRadius() * scaleFactor);
arcOfEllipse->setMinorRadius(arcOfEllipse->getMinorRadius() * scaleFactor);
}
arcOfEllipse->setCenter(
getScaledPoint(arcOfEllipse->getCenter(), referencePoint, scaleFactor));
}