diff options
| author | Jabier Arraiza Cenoz <jabier.arraiza@marker.es> | 2016-06-12 10:09:57 +0000 |
|---|---|---|
| committer | jabiertxof <info@marker.es> | 2016-06-12 10:09:57 +0000 |
| commit | 1b8a4e46125f60f7bbe497bde69a11b7b3153b00 (patch) | |
| tree | 0a70ee48750e521017342b29f6104d69ce5ffa84 /src | |
| parent | update to trunk (diff) | |
| download | inkscape-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.cpp | 40 |
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); |
