summaryrefslogtreecommitdiffstats
path: root/src/ui/tool/path-manipulator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/tool/path-manipulator.cpp')
-rw-r--r--src/ui/tool/path-manipulator.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/ui/tool/path-manipulator.cpp b/src/ui/tool/path-manipulator.cpp
index be5514e1f..6cad60fee 100644
--- a/src/ui/tool/path-manipulator.cpp
+++ b/src/ui/tool/path-manipulator.cpp
@@ -1248,8 +1248,22 @@ Geom::Point PathManipulator::BSplineHandleReposition(Handle *h,double pos){
}
void PathManipulator::BSplineNodeHandlesReposition(Node *n){
- n->front()->setPosition(BSplineHandleReposition(n->front(),n->bsplineWeight));
- n->back()->setPosition(BSplineHandleReposition(n->back(),n->bsplineWeight));
+ if(n->selected()){
+ Node * nextNode = n->nodeToward(n->front());
+ Node * prevNode = n->nodeToward(n->back());
+ double prevPos = 0;
+ double nextPos = 0;
+ if(prevNode)
+ prevPos = BSplineHandlePosition(prevNode->front());
+ if(nextNode)
+ nextPos = BSplineHandlePosition(nextNode->back());
+ n->front()->setPosition(BSplineHandleReposition(n->front(),n->bsplineWeight));
+ n->back()->setPosition(BSplineHandleReposition(n->back(),n->bsplineWeight));
+ if(prevNode)
+ prevNode->front()->setPosition(BSplineHandleReposition(prevNode->front(),prevPos));
+ if(nextNode)
+ nextNode->back()->setPosition(BSplineHandleReposition(nextNode->back(),nextPos));
+ }
}
/** Construct the geometric representation of nodes and handles, update the outline