diff options
| author | Jabier Arraiza Cenoz <jabier.arraiza@marker.es> | 2015-04-22 16:47:54 +0000 |
|---|---|---|
| committer | Jabiertxof <jtx@jtx.marker.es> | 2015-04-22 16:47:54 +0000 |
| commit | f3f25749ce81d3664a53e723c611645f78bdefa2 (patch) | |
| tree | fa80c43a8cc70a36062b40e1b13fc7319b8fe129 /src | |
| parent | update to trunk (diff) | |
| download | inkscape-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.cpp | 6 | ||||
| -rw-r--r-- | src/helper/geom-pointwise.cpp | 24 | ||||
| -rw-r--r-- | src/helper/geom-pointwise.h | 1 |
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); |
