diff options
| author | Jabier Arraiza Cenoz <jabier.arraiza@marker.es> | 2014-03-31 22:48:28 +0000 |
|---|---|---|
| committer | Jabiertxof <jtx@jtx.marker.es> | 2014-03-31 22:48:28 +0000 |
| commit | 2b19c5f6508b7a59766d89f315f9f4fbc364f288 (patch) | |
| tree | 11c692eb43b44fca5c9a636eb991d13495e0ddae /src/ui/tool/path-manipulator.cpp | |
| parent | use <cmath> instead <math.h> by point of Vinícius (diff) | |
| download | inkscape-2b19c5f6508b7a59766d89f315f9f4fbc364f288.tar.gz inkscape-2b19c5f6508b7a59766d89f315f9f4fbc364f288.zip | |
Some node.cpp/h work moved to path_manipulator.
Header variable bsplineWeight removed from all.
Simplification of code with less functions in path_manipulator.
To fix: tips stop working because is handled by two static functions and
couldent call to path_manipulator from here. Vinícius, any work arround? lines
480,481,1426,1427,1462 of node.cpp.
gez: ¿Puedes probar si notas algun bug o problema? principalmente con
la herramienta nodo, gracias.
(bzr r11950.1.322)
Diffstat (limited to 'src/ui/tool/path-manipulator.cpp')
| -rw-r--r-- | src/ui/tool/path-manipulator.cpp | 46 |
1 files changed, 15 insertions, 31 deletions
diff --git a/src/ui/tool/path-manipulator.cpp b/src/ui/tool/path-manipulator.cpp index 841ab659a..905df61f4 100644 --- a/src/ui/tool/path-manipulator.cpp +++ b/src/ui/tool/path-manipulator.cpp @@ -666,14 +666,11 @@ unsigned PathManipulator::_deleteStretch(NodeList::iterator start, NodeList::ite } // if we are removing, we readjust the handlers if(isBSpline()){ - double pos = 0.0000; if(start.prev()){ - pos = BSplineHandlePosition(start.prev()->back()); - start.prev()->front()->setPosition(BSplineHandleReposition(start.prev()->front(),pos)); + start.prev()->front()->setPosition(BSplineHandleReposition(start.prev()->front(),true)); } if(end){ - pos = BSplineHandlePosition(end->front()); - end->back()->setPosition(BSplineHandleReposition(end->back(),pos)); + end->back()->setPosition(BSplineHandleReposition(end->back(),true)); } } @@ -1209,31 +1206,36 @@ bool PathManipulator::isBSpline(bool recalculate){ return _is_bspline; } -// returns the corresponding strength to the position of a handler -double PathManipulator::BSplineHandlePosition(Handle *h){ +// returns the corresponding strength to the position of the handlers +double PathManipulator::BSplineHandlePosition(Handle *h, bool other){ using Geom::X; using Geom::Y; double pos = 0.0000; Node *n = h->parent(); Node * nextNode = NULL; + if(other){ + h = h->other(); + } nextNode = n->nodeToward(h); - if(nextNode && n->position() != h->position()){ + if(nextNode && !Geom::are_near(n->position(), h->position())){ SPCurve *lineInsideNodes = new SPCurve(); lineInsideNodes->moveto(n->position()); lineInsideNodes->lineto(nextNode->position()); pos = Geom::nearest_point(h->position(),*lineInsideNodes->first_segment()); } - n->bsplineWeight = pos; + if ((pos == 0.0000 || pos == 1.0000) && other == false){ + return BSplineHandlePosition(h, true); + } return pos; } -// moves the handler to the corresponding position -Geom::Point PathManipulator::BSplineHandleReposition(Handle *h){ - double pos = this->BSplineHandlePosition(h); +// give the location for the handler in the corresponding position +Geom::Point PathManipulator::BSplineHandleReposition(Handle *h, bool other){ + double pos = this->BSplineHandlePosition(h, other); return BSplineHandleReposition(h,pos); } -// moves the handler to the specified position +// give the location for the handler to the specified position Geom::Point PathManipulator::BSplineHandleReposition(Handle *h,double pos){ using Geom::X; using Geom::Y; @@ -1247,34 +1249,16 @@ Geom::Point PathManipulator::BSplineHandleReposition(Handle *h,double pos){ lineInsideNodes->moveto(n->position()); lineInsideNodes->lineto(nextNode->position()); SBasisInsideNodes = lineInsideNodes->first_segment()->toSBasis(); - n->bsplineWeight = pos; ret = SBasisInsideNodes.valueAt(pos); ret = Geom::Point(ret[X] + 0.005,ret[Y] + 0.005); }else{ if(pos == 0.0000){ - n->bsplineWeight = 0.0000; ret = n->position(); } } return ret; } -//moves the node handlers and its oposite handlers to the strength of its nodes -void PathManipulator::BSplineNodeHandlesReposition(Node *n){ - Node * nextNode = n->nodeToward(n->front()); - Node * prevNode = n->nodeToward(n->back()); - if(prevNode){ - if(!prevNode->isEndNode()) - prevNode->back()->setPosition(BSplineHandleReposition(prevNode->back(),prevNode->bsplineWeight)); - prevNode->front()->setPosition(BSplineHandleReposition(prevNode->front(),prevNode->bsplineWeight)); - } - if(nextNode){ - if(!nextNode->isEndNode()) - nextNode->front()->setPosition(BSplineHandleReposition(nextNode->front(),nextNode->bsplineWeight)); - nextNode->back()->setPosition(BSplineHandleReposition(nextNode->back(),nextNode->bsplineWeight)); - } -} - /** Construct the geometric representation of nodes and handles, update the outline * and display * \param alert_LPE if true, first the LPE is warned what the new path is going to be before updating it |
