From c2108911d6fe6eb0c177095143980dc46cdac462 Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Sat, 12 Dec 2020 06:44:43 +0100 Subject: [PATCH] Sketcher: ViewProvider fix Weight length when dragging https://forum.freecadweb.org/viewtopic.php?f=10&t=51716&sid=d469aaf654946813912b9419f4fc529f&start=60#p456814 --- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 22 +++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index a9733532523e..3bd1e8582c41 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -1401,10 +1401,28 @@ void ViewProviderSketch::moveConstraint(int constNum, const Base::Vector2d &toPo Base::Vector3d tmpDir = Base::Vector3d(toPos.x, toPos.y, 0) - p1; double angle = atan2(tmpDir.y, tmpDir.x); + Base::Vector3d dir = radius * Base::Vector3d(cos(angle),sin(angle),0.); + if(Constr->Type == Sketcher::Diameter) - p1 = center - radius * Base::Vector3d(cos(angle),sin(angle),0.); + p1 = center - dir; - p2 = center + radius * Base::Vector3d(cos(angle),sin(angle),0.); + if(Constr->Type == Sketcher::Weight) { + + double scalefactor = 1.0; + + if(circle->hasExtension(SketcherGui::ViewProviderSketchGeometryExtension::getClassTypeId())) + { + auto vpext = std::static_pointer_cast( + circle->getExtension(SketcherGui::ViewProviderSketchGeometryExtension::getClassTypeId()).lock()); + + scalefactor = vpext->getRepresentationFactor(); + } + + p2 = center + dir * scalefactor; + + } + else + p2 = center + dir; } else return;