summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2015-04-22 16:47:54 +0000
committerJabiertxof <jtx@jtx.marker.es>2015-04-22 16:47:54 +0000
commitf3f25749ce81d3664a53e723c611645f78bdefa2 (patch)
treefa80c43a8cc70a36062b40e1b13fc7319b8fe129 /src
parentupdate to trunk (diff)
downloadinkscape-f3f25749ce81d3664a53e723c611645f78bdefa2.tar.gz
inkscape-f3f25749ce81d3664a53e723c611645f78bdefa2.zip
adding suport to full path reverse
(bzr r13645.1.82)
Diffstat (limited to 'src')
-rw-r--r--src/helper/geom-pathinfo.cpp6
-rw-r--r--src/helper/geom-pointwise.cpp24
-rw-r--r--src/helper/geom-pointwise.h1
3 files changed, 30 insertions, 1 deletions
diff --git a/src/helper/geom-pathinfo.cpp b/src/helper/geom-pathinfo.cpp
index 8144564cb..38d58d417 100644
--- a/src/helper/geom-pathinfo.cpp
+++ b/src/helper/geom-pathinfo.cpp
@@ -87,7 +87,11 @@ size_t Pathinfo::size() const
size_t Pathinfo::subPathSize(size_t index) const
{
- return data[index].first + 1;
+ size_t size = 0;
+ if( data.size() > index){
+ size = data[index].first + 1;
+ }
+ return size;
}
size_t Pathinfo::subPathIndex(size_t index) const
diff --git a/src/helper/geom-pointwise.cpp b/src/helper/geom-pointwise.cpp
index 6521e10b2..74c594d68 100644
--- a/src/helper/geom-pointwise.cpp
+++ b/src/helper/geom-pointwise.cpp
@@ -223,6 +223,26 @@ void Pointwise::subpathReverse(size_t start, size_t end)
setPwd2(remove_short_cuts(paths_to_pw(tmp_path), 0.01));
}
+void Pointwise::pathReverse()
+{
+ start++;
+ for (size_t i = _satellites.size()-1; i >= 0; i--) {
+ _satellites.insert(_satellites.begin() + _satellites.size(), _satellites[i]);
+ _satellites.erase(_satellites.begin() + i);
+ }
+ std::vector<Geom::Path> path_in =
+ path_from_piecewise(remove_short_cuts(_pwd2, 0.1), 0.001);
+ std::vector<Geom::Path> tmp_path;
+ for (PathVector::const_iterator path_it = path_in.begin();
+ path_it != path_in.end(); ++path_it) {
+ if (path_it->empty()) {
+ continue;
+ }
+ tmp_path.push_back(path_it->reverse());
+ }
+ setPwd2(remove_short_cuts(paths_to_pw(tmp_path), 0.01));
+}
+
/** Fired when a path is modified duplicating a node. Piecewise ignore degenerated curves.
*/
@@ -233,6 +253,10 @@ void Pointwise::insertDegenerateSatellites(Piecewise<D2<SBasis> > A, Geom::PathV
size_t size_B = _path_info.size();
size_t satellite_gap = size_B - size_A;
if (satellite_gap == 0){
+ if(_path_info.subPathSize(1) > 0 && !are_near(_pwd2[0].initialPoint(), A[0].initialPoint()) &&
+ !are_near(_pwd2[size_A-1].finalPoint(), A[size_A-1].finalPoint())){
+ pathReverse();
+ }
return;
}
size_t counter = 0;
diff --git a/src/helper/geom-pointwise.h b/src/helper/geom-pointwise.h
index e4b9f2b05..590f25f6f 100644
--- a/src/helper/geom-pointwise.h
+++ b/src/helper/geom-pointwise.h
@@ -52,6 +52,7 @@ public:
void pwd2Sustract(Piecewise<D2<SBasis> > A);
void pwd2Append(Piecewise<D2<SBasis> > A, Satellite S);
void subpathToBack(size_t subpath);
+ void pathReverse();
void subpathReverse(size_t start, size_t end);
void insertDegenerateSatellites(Piecewise<D2<SBasis> > A, Geom::PathVector B, Satellite S);