summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2013-10-07 15:09:32 +0000
committerJabiertxof <jtx@jtx.marker.es>2013-10-07 15:09:32 +0000
commitf238a7004752e4e56b7e6d602f675c97c0ce4733 (patch)
tree03e632f227e882cda5a70d7299626e3c3e62b78c /src
parentupdate to trunk (diff)
downloadinkscape-f238a7004752e4e56b7e6d602f675c97c0ce4733.tar.gz
inkscape-f238a7004752e4e56b7e6d602f675c97c0ce4733.zip
Fixing BSplines
(bzr r11950.1.174)
Diffstat (limited to 'src')
-rw-r--r--src/ui/tool/node.cpp1
-rw-r--r--src/ui/tool/path-manipulator.cpp16
2 files changed, 11 insertions, 6 deletions
diff --git a/src/ui/tool/node.cpp b/src/ui/tool/node.cpp
index c5ab2f316..c6d4537dd 100644
--- a/src/ui/tool/node.cpp
+++ b/src/ui/tool/node.cpp
@@ -726,6 +726,7 @@ void Node::transform(Geom::Affine const &m)
/* Affine transforms keep handle invariants for smooth and symmetric nodes,
* but smooth nodes at ends of linear segments and auto nodes need special treatment */
_fixNeighbors(old_pos, position());
+ _pm().BSplineNodeHandlesReposition(this);
}
Geom::Rect Node::bounds() const
diff --git a/src/ui/tool/path-manipulator.cpp b/src/ui/tool/path-manipulator.cpp
index 27def4cb1..b90fa4ac7 100644
--- a/src/ui/tool/path-manipulator.cpp
+++ b/src/ui/tool/path-manipulator.cpp
@@ -1261,12 +1261,16 @@ void PathManipulator::BSplineNodeHandlesReposition(Node *n){
Node * prevNode = n->nodeToward(n->back());
if(prevNode){
n->back()->setPosition(BSplineHandleReposition(n->back()));
+ if(prevNode->front()->position() == prevNode->position())
+ prevNode->bsplineWeight = 0.000;
if(!prevNode->isEndNode())
prevNode->back()->setPosition(BSplineHandleReposition(prevNode->back(),prevNode->bsplineWeight));
prevNode->front()->setPosition(BSplineHandleReposition(prevNode->front(),prevNode->bsplineWeight));
}
if(nextNode){
n->front()->setPosition(BSplineHandleReposition(n->front()));
+ if(nextNode->front()->position() == nextNode->position())
+ nextNode->bsplineWeight = 0.000;
if(!nextNode->isEndNode())
nextNode->front()->setPosition(BSplineHandleReposition(nextNode->front(),nextNode->bsplineWeight));
nextNode->back()->setPosition(BSplineHandleReposition(nextNode->back(),nextNode->bsplineWeight));
@@ -1287,14 +1291,14 @@ void PathManipulator::_createGeometryFromControlPoints(bool alert_LPE)
continue;
}
NodeList::iterator prev = subpath->begin();
- if(isBSpline){
- BSplineNodeHandlesReposition(prev.ptr());
- }
+ //if(isBSpline){
+ // BSplineNodeHandlesReposition(prev.ptr());
+ //}
builder.moveTo(prev->position());
for (NodeList::iterator i = ++subpath->begin(); i != subpath->end(); ++i) {
- if(isBSpline){
- BSplineNodeHandlesReposition(i.ptr());
- }
+ //if(isBSpline){
+ // BSplineNodeHandlesReposition(i.ptr());
+ //}
build_segment(builder, prev.ptr(), i.ptr());
prev = i;
}