Merge pull request #18273 from Ondsel-Development/sk_group_drag
Sketcher: Group dragging
This commit is contained in:
@@ -1340,9 +1340,10 @@ int SketchObject::diagnoseAdditionalConstraints(
|
||||
return lastDoF;
|
||||
}
|
||||
|
||||
int SketchObject::movePoint(int GeoId, PointPos PosId, const Base::Vector3d& toPoint, bool relative,
|
||||
int SketchObject::moveGeometries(std::vector<GeoElementId> geoEltIds, const Base::Vector3d& toPoint, bool relative,
|
||||
bool updateGeoBeforeMoving)
|
||||
{
|
||||
|
||||
// no need to check input data validity as this is an sketchobject managed operation.
|
||||
Base::StateLocker lock(managedoperation, true);
|
||||
|
||||
@@ -1369,7 +1370,7 @@ int SketchObject::movePoint(int GeoId, PointPos PosId, const Base::Vector3d& toP
|
||||
return -1;
|
||||
|
||||
// move the point and solve
|
||||
lastSolverStatus = solvedSketch.movePoint(GeoId, PosId, toPoint, relative);
|
||||
lastSolverStatus = solvedSketch.moveGeometries(geoEltIds, toPoint, relative);
|
||||
|
||||
// moving the point can not result in a conflict that we did not have
|
||||
// or a redundancy that we did not have before, or a change of DoF
|
||||
@@ -1378,10 +1379,10 @@ int SketchObject::movePoint(int GeoId, PointPos PosId, const Base::Vector3d& toP
|
||||
std::vector<Part::Geometry*> geomlist = solvedSketch.extractGeometry();
|
||||
Geometry.setValues(geomlist);
|
||||
// Constraints.acceptGeometry(getCompleteGeometry());
|
||||
for (std::vector<Part::Geometry*>::iterator it = geomlist.begin(); it != geomlist.end();
|
||||
++it) {
|
||||
if (*it)
|
||||
delete *it;
|
||||
for (auto* geo : geomlist) {
|
||||
if (geo){
|
||||
delete geo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1390,6 +1391,13 @@ int SketchObject::movePoint(int GeoId, PointPos PosId, const Base::Vector3d& toP
|
||||
return lastSolverStatus;
|
||||
}
|
||||
|
||||
int SketchObject::moveGeometry(int geoId, PointPos pos, const Base::Vector3d& toPoint, bool relative,
|
||||
bool updateGeoBeforeMoving)
|
||||
{
|
||||
std::vector<GeoElementId> geoEltIds = { GeoElementId(geoId, pos) };
|
||||
return moveGeometries(geoEltIds, toPoint, relative, updateGeoBeforeMoving);
|
||||
}
|
||||
|
||||
template <>
|
||||
Base::Vector3d SketchObject::getPointForGeometry<>(const Part::GeomPoint *geomPoint, PointPos PosId)
|
||||
{
|
||||
@@ -2777,14 +2785,14 @@ int SketchObject::fillet(int GeoId1, int GeoId2, const Base::Vector3d& refPnt1,
|
||||
if (dist1.Length() < dist2.Length()) {
|
||||
filletPosId1 = PointPos::start;
|
||||
filletPosId2 = PointPos::end;
|
||||
movePoint(GeoId1, PosId1, p1, false, true);
|
||||
movePoint(GeoId2, PosId2, p2, false, true);
|
||||
moveGeometry(GeoId1, PosId1, p1, false, true);
|
||||
moveGeometry(GeoId2, PosId2, p2, false, true);
|
||||
}
|
||||
else {
|
||||
filletPosId1 = PointPos::end;
|
||||
filletPosId2 = PointPos::start;
|
||||
movePoint(GeoId1, PosId1, p2, false, true);
|
||||
movePoint(GeoId2, PosId2, p1, false, true);
|
||||
moveGeometry(GeoId1, PosId1, p2, false, true);
|
||||
moveGeometry(GeoId2, PosId2, p1, false, true);
|
||||
}
|
||||
|
||||
auto tangent1 = std::make_unique<Sketcher::Constraint>();
|
||||
@@ -3272,14 +3280,14 @@ int SketchObject::fillet(int GeoId1, int GeoId2, const Base::Vector3d& refPnt1,
|
||||
if (dist1 < dist2) {
|
||||
filletPosId1 = PointPos::start;
|
||||
filletPosId2 = PointPos::end;
|
||||
movePoint(GeoId1, PosId1, p1, false, true);
|
||||
movePoint(GeoId2, PosId2, p2, false, true);
|
||||
moveGeometry(GeoId1, PosId1, p1, false, true);
|
||||
moveGeometry(GeoId2, PosId2, p2, false, true);
|
||||
}
|
||||
else {
|
||||
filletPosId1 = PointPos::end;
|
||||
filletPosId2 = PointPos::start;
|
||||
movePoint(GeoId1, PosId1, p2, false, true);
|
||||
movePoint(GeoId2, PosId2, p1, false, true);
|
||||
moveGeometry(GeoId1, PosId1, p2, false, true);
|
||||
moveGeometry(GeoId2, PosId2, p1, false, true);
|
||||
}
|
||||
|
||||
auto* tangent1 = new Sketcher::Constraint();
|
||||
@@ -3377,7 +3385,7 @@ int SketchObject::extend(int GeoId, double increment, PointPos endpoint)
|
||||
newPoint.Normalize();
|
||||
newPoint.Scale(scaleFactor, scaleFactor, scaleFactor);
|
||||
newPoint = newPoint + endVec;
|
||||
retcode = movePoint(GeoId, Sketcher::PointPos::start, newPoint, false, true);
|
||||
retcode = moveGeometry(GeoId, Sketcher::PointPos::start, newPoint, false, true);
|
||||
}
|
||||
else if (endpoint == PointPos::end) {
|
||||
Base::Vector3d newPoint = endVec - startVec;
|
||||
@@ -3385,7 +3393,7 @@ int SketchObject::extend(int GeoId, double increment, PointPos endpoint)
|
||||
newPoint.Normalize();
|
||||
newPoint.Scale(scaleFactor, scaleFactor, scaleFactor);
|
||||
newPoint = newPoint + startVec;
|
||||
retcode = movePoint(GeoId, Sketcher::PointPos::end, newPoint, false, true);
|
||||
retcode = moveGeometry(GeoId, Sketcher::PointPos::end, newPoint, false, true);
|
||||
}
|
||||
}
|
||||
else if (geom->is<Part::GeomArcOfCircle>()) {
|
||||
|
||||
Reference in New Issue
Block a user