Sketcher: Arc to arc or circle distance constraint

This commit is contained in:
Florian Foinant-Willig
2023-11-29 20:36:26 +01:00
committed by abdullahtahiriyo
parent 5ae3a5da9d
commit 838802e28d
6 changed files with 530 additions and 469 deletions

View File

@@ -410,16 +410,37 @@ double SketcherGui::GetPointAngle(const Base::Vector2d& p1, const Base::Vector2d
// Set the two points on circles at minimal distance
// in concentric case set points on relative X axis
void SketcherGui::GetCirclesMinimalDistance(const Part::GeomCircle* circle1,
const Part::GeomCircle* circle2,
void SketcherGui::GetCirclesMinimalDistance(const Part::Geometry* geom1,
const Part::Geometry* geom2,
Base::Vector3d& point1,
Base::Vector3d& point2)
{
double radius1 = circle1->getRadius();
double radius2 = circle2->getRadius();
double radius1 = 0.0;
double radius2 = 0.0;
point1 = circle1->getCenter();
point2 = circle2->getCenter();
if (geom1->is<Part::GeomCircle>()) {
auto circle = static_cast<const Part::GeomCircle*>(geom1);
radius1 = circle->getRadius();
point1 = circle->getCenter();
}
else if (geom1->is<Part::GeomArcOfCircle>()) {
auto arc = static_cast<const Part::GeomArcOfCircle*>(geom1);
radius1 = arc->getRadius();
point1 = arc->getCenter();
}
if (geom2->is<Part::GeomCircle>()) {
auto circle = static_cast<const Part::GeomCircle*>(geom2);
radius2 = circle->getRadius();
point2 = circle->getCenter();
}
else if (geom2->is<Part::GeomArcOfCircle>()) {
auto arc = static_cast<const Part::GeomArcOfCircle*>(geom2);
radius2 = arc->getRadius();
point2 = arc->getCenter();
}
assert(radius1 == 0 || radius2 == 0 /*Circles characteristics not available*/);
Base::Vector3d v = point2 - point1;
double length = v.Length();