summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2016-06-12 10:09:57 +0000
committerjabiertxof <info@marker.es>2016-06-12 10:09:57 +0000
commit1b8a4e46125f60f7bbe497bde69a11b7b3153b00 (patch)
tree0a70ee48750e521017342b29f6104d69ce5ffa84 /src
parentupdate to trunk (diff)
downloadinkscape-1b8a4e46125f60f7bbe497bde69a11b7b3153b00.tar.gz
inkscape-1b8a4e46125f60f7bbe497bde69a11b7b3153b00.zip
Handle path add and remove nodes
(bzr r13645.1.150)
Diffstat (limited to 'src')
-rw-r--r--src/helper/geom-pathvectorsatellites.cpp40
1 files changed, 36 insertions, 4 deletions
diff --git a/src/helper/geom-pathvectorsatellites.cpp b/src/helper/geom-pathvectorsatellites.cpp
index c423c9b1b..625506b2f 100644
--- a/src/helper/geom-pathvectorsatellites.cpp
+++ b/src/helper/geom-pathvectorsatellites.cpp
@@ -59,15 +59,47 @@ std::pair<size_t, size_t> PathVectorSatellites::getIndexData(size_t index)
}
return std::make_pair(0,0);
}
+
void PathVectorSatellites::recalculateForNewPathVector(Geom::PathVector const pathv, Satellite const S)
{
Satellites satellites;
+ bool found = false;
+ //TODO evaluate fix on nodes at same position
+ size_t number_nodes = pathv.nodes().size();
+ size_t previous_number_nodes = _pathvector.nodes().size();
for (size_t i = 0; i < pathv.size(); i++) {
- std::vector<Satellite> subpath_satellites;
- for (size_t k = 0; k < pathv[i].size_closed(); k++) {
- subpath_satellites.push_back(S);
+ satellites.reserve(pathv.size());
+ std::vector<Satellite> pathsatellites;
+ for (size_t j = 0; j < pathv[i].size_closed(); j++) {
+ satellites[i].reserve(pathv[i].size_closed());
+ found = false;
+ for (size_t k = 0; k < _pathvector.size(); k++) {
+ for (size_t l = 0; l < _pathvector[k].size_closed(); l++) {
+ if ((l == _pathvector[k].size_closed() -1 &&
+ j == pathv[i].size_closed() -1 &&
+ Geom::are_near(_pathvector[k][l-1].finalPoint(), pathv[i][j-1].finalPoint())) ||
+ (l == _pathvector[k].size_closed() -1 &&
+ Geom::are_near(_pathvector[k][l-1].finalPoint(), pathv[i][j].finalPoint())) ||
+ (j == pathv[i].size_closed() -1 &&
+ Geom::are_near(_pathvector[k][l].finalPoint(), pathv[i][j-1].finalPoint())) ||
+ (Geom::are_near(_pathvector[k][l].initialPoint(), pathv[i][j].initialPoint())))
+ {
+ pathsatellites.push_back(_satellites[k][l]);
+ std::cout << "dgsgdsgsdgsdgsdgsdgsdgsdgsdgsdgsd\n";
+ found = true;
+ break;
+ }
+ }
+ if (found) {
+ break;
+ }
+ }
+
+ if (found == false && previous_number_nodes < number_nodes) {
+ pathsatellites.push_back(S);
+ }
}
- satellites.push_back(subpath_satellites);
+ satellites.push_back(pathsatellites);
}
setPathVector(pathv);
setSatellites(satellites);