summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2016-06-18 22:58:42 +0000
committerjabiertxof <info@marker.es>2016-06-18 22:58:42 +0000
commit6820ee49d69cd419c5e8d3c9de74b0552758c842 (patch)
tree9d28789e1c620584983d48e28d6afe8411f396d6 /src
parentfixing bug moving nodes (diff)
downloadinkscape-6820ee49d69cd419c5e8d3c9de74b0552758c842.tar.gz
inkscape-6820ee49d69cd419c5e8d3c9de74b0552758c842.zip
Fixes when moves a path
(bzr r13645.1.163)
Diffstat (limited to 'src')
-rw-r--r--src/helper/geom-pathvectorsatellites.cpp26
-rw-r--r--src/live_effects/effect.cpp13
-rw-r--r--src/live_effects/lpe-fillet-chamfer.cpp24
-rw-r--r--src/live_effects/lpe-fillet-chamfer.h1
-rw-r--r--src/live_effects/parameter/satellitesarray.cpp1
-rw-r--r--src/ui/tools/node-tool.cpp9
6 files changed, 29 insertions, 45 deletions
diff --git a/src/helper/geom-pathvectorsatellites.cpp b/src/helper/geom-pathvectorsatellites.cpp
index 1f71a2e91..f72841b30 100644
--- a/src/helper/geom-pathvectorsatellites.cpp
+++ b/src/helper/geom-pathvectorsatellites.cpp
@@ -63,16 +63,11 @@ std::pair<size_t, size_t> PathVectorSatellites::getIndexData(size_t index)
void PathVectorSatellites::setSelected(std::vector<size_t> selected)
{
size_t counter = 0;
- for (size_t h = 0; h < selected.size(); ++h) {
- std::cout << selected[h] << "vec\n";
- }
for (size_t i = 0; i < _satellites.size(); ++i) {
for (size_t j = 0; j < _satellites[i].size(); ++j) {
if(find (selected.begin(), selected.end(), counter) != selected.end()){
- std::cout << counter << "true\n";
_satellites[i][j].setSelected(true);
} else {
- std::cout << "false\n";
_satellites[i][j].setSelected(false);
}
counter++;
@@ -182,23 +177,14 @@ void PathVectorSatellites::recalculateForNewPathVector(Geom::PathVector const pa
size_t number_nodes = pathv.nodes().size();
size_t previous_number_nodes = _pathvector.nodes().size();
for (size_t i = 0; i < pathv.size(); i++) {
- satellites.reserve(pathv.size());
- std::vector<Satellite> pathsatellites;
+ std::vector<Satellite> path_satellites;
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())))
+ if (Geom::are_near(_pathvector[k][l].initialPoint(), pathv[i][j].initialPoint()))
{
- pathsatellites.push_back(_satellites[k][l]);
+ path_satellites.push_back(_satellites[k][l]);
found = true;
break;
}
@@ -208,11 +194,11 @@ void PathVectorSatellites::recalculateForNewPathVector(Geom::PathVector const pa
}
}
- if (found == false && previous_number_nodes < number_nodes) {
- pathsatellites.push_back(S);
+ if (!found && previous_number_nodes < number_nodes) {
+ path_satellites.push_back(S);
}
}
- satellites.push_back(pathsatellites);
+ satellites.push_back(path_satellites);
}
setPathVector(pathv);
setSatellites(satellites);
diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp
index 7b36e30f9..5ac5e2407 100644
--- a/src/live_effects/effect.cpp
+++ b/src/live_effects/effect.cpp
@@ -421,6 +421,9 @@ Effect::getSelectedNodes()
{
size_t counter = 0;
std::vector<size_t> result;
+ if (pathvector_before_effect.empty()){
+ return result;
+ }
for (size_t i = 0; i < pathvector_before_effect.size(); i++) {
for (size_t j = 0; j < pathvector_before_effect[i].size_closed(); j++) {
if ((!pathvector_before_effect[i].closed() &&
@@ -440,15 +443,11 @@ Effect::getSelectedNodes()
bool
Effect::isNodeSelected(Geom::Point const &node_point) const
{
- if (_selected_nodes_pos.size() > 0) {
- using Geom::X;
- using Geom::Y;
- Geom::Affine transformCoordinate = sp_lpe_item->i2dt_affine();
+ if (!_selected_nodes_pos.empty()) {
for (std::vector<Geom::Point>::const_iterator i = _selected_nodes_pos.begin();
i != _selected_nodes_pos.end(); ++i) {
- Geom::Point p = *i;
- Geom::Point p2(node_point[X],node_point[Y]);
- p2 *= transformCoordinate;
+ Geom::Point p = (*i);
+ Geom::Point p2(node_point[Geom::X],node_point[Geom::Y]);
if (Geom::are_near(p, p2, 0.01)) {
return true;
}
diff --git a/src/live_effects/lpe-fillet-chamfer.cpp b/src/live_effects/lpe-fillet-chamfer.cpp
index c9d3d4afd..47b91bf03 100644
--- a/src/live_effects/lpe-fillet-chamfer.cpp
+++ b/src/live_effects/lpe-fillet-chamfer.cpp
@@ -258,26 +258,23 @@ void LPEFilletChamfer::doBeforeEffect(SPLPEItem const *lpeItem)
Geom::PathVector const pathv = pathv_to_linear_and_cubic_beziers(c->get_pathvector());
//if are diferent sizes call to poinwise recalculate
//TODO: Update the satellite data in paths modified, Goal 0.93
+ Satellites satellites = _satellites_param.data();
+ if(satellites.empty()) {
+ doOnApply(lpeItem);
+ satellites = _satellites_param.data();
+ }
if (_pathvector_satellites) {
size_t number_nodes = pathv.nodes().size();
- size_t previous_number_nodes = _pathvector_satellites->getPathVector().nodes().size();
+ size_t previous_number_nodes = _pathvector_satellites->getTotalSatellites();
if (number_nodes != previous_number_nodes) {
Satellite satellite(FILLET);
satellite.setIsTime(_flexible);
satellite.setHasMirror(_mirror_knots);
satellite.setHidden(_hide_knots);
_pathvector_satellites->recalculateForNewPathVector(pathv, satellite);
- _pathvector_satellites->setSelected(getSelectedNodes());
- _satellites_param.setPathVectorSatellites(_pathvector_satellites);
- refreshKnots();
- return;
+ satellites = _pathvector_satellites->getSatellites();
}
}
- Satellites satellites = _satellites_param.data();
- if(satellites.empty()) {
- doOnApply(lpeItem);
- satellites = _satellites_param.data();
- }
if (_degenerate_hide) {
_satellites_param.setGlobalKnotHide(true);
} else {
@@ -311,7 +308,9 @@ void LPEFilletChamfer::doBeforeEffect(SPLPEItem const *lpeItem)
satellites[i][j].hidden = _hide_knots;
}
}
- _pathvector_satellites = new PathVectorSatellites();
+ if (!_pathvector_satellites) {
+ _pathvector_satellites = new PathVectorSatellites();
+ }
_pathvector_satellites->setPathVector(pathv);
_pathvector_satellites->setSatellites(satellites);
_pathvector_satellites->setSelected(getSelectedNodes());
@@ -378,8 +377,7 @@ LPEFilletChamfer::doEffect_path(Geom::PathVector const &path_in)
}
Geom::Curve const &curve_it2 = pathv[path][next_index];
Satellite satellite = satellites[path][next_index];
- if (Geom::are_near((*curve_it1).initialPoint(), (*curve_it1).finalPoint()) ||
- Geom::are_near(curve_it2.initialPoint(), curve_it2.finalPoint())) {
+ if (Geom::are_near((*curve_it1).initialPoint(), (*curve_it1).finalPoint())) {
_degenerate_hide = true;
g_warning("Knots hidded if consecutive nodes has the same position.");
return path_in;
diff --git a/src/live_effects/lpe-fillet-chamfer.h b/src/live_effects/lpe-fillet-chamfer.h
index 134886950..d3f437afd 100644
--- a/src/live_effects/lpe-fillet-chamfer.h
+++ b/src/live_effects/lpe-fillet-chamfer.h
@@ -16,6 +16,7 @@
#include "live_effects/parameter/satellitesarray.h"
#include "live_effects/effect.h"
#include "helper/geom-pathvectorsatellites.h"
+#include "helper/geom-satellite.h"
namespace Inkscape {
namespace LivePathEffect {
diff --git a/src/live_effects/parameter/satellitesarray.cpp b/src/live_effects/parameter/satellitesarray.cpp
index 8c86f64ca..d4182d459 100644
--- a/src/live_effects/parameter/satellitesarray.cpp
+++ b/src/live_effects/parameter/satellitesarray.cpp
@@ -81,7 +81,6 @@ void SatellitesArrayParam::setHelperSize(int hs)
void SatellitesArrayParam::updateCanvasIndicators(bool mirror)
{
-
if (!_last_pathvector_satellites) {
return;
}
diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp
index 6a1feb760..9bdc578c1 100644
--- a/src/ui/tools/node-tool.cpp
+++ b/src/ui/tools/node-tool.cpp
@@ -292,15 +292,16 @@ void NodeTool::update_helperpath () {
if (SP_IS_LPE_ITEM(selection->singleItem())) {
Inkscape::LivePathEffect::Effect *lpe = SP_LPE_ITEM(selection->singleItem())->getCurrentLPE();
if (lpe && lpe->isVisible()/* && lpe->showOrigPath()*/) {
- Inkscape::UI::ControlPointSelection::Set &selection_nodes = _selected_nodes->allPoints();
- std::vector<Geom::Point> selected_nodes_pos;
+ Inkscape::UI::ControlPointSelection::Set &selection_nodes = this->_selected_nodes->allPoints();
+ std::vector<Geom::Point> positions;
+ Geom::Affine affine = SP_ITEM(selection->singleItem())->i2dt_affine();
for (Inkscape::UI::ControlPointSelection::Set::iterator i = selection_nodes.begin(); i != selection_nodes.end(); ++i) {
if ((*i)->selected()) {
Inkscape::UI::Node *n = dynamic_cast<Inkscape::UI::Node *>(*i);
- selected_nodes_pos.push_back(n->position());
+ positions.push_back(n->position() * affine);
}
}
- lpe->setSelectedNodes(selected_nodes_pos);
+ lpe->setSelectedNodes(positions);
lpe->setCurrentZoom(this->desktop->current_zoom());
SPCurve *c = new SPCurve();
SPCurve *cc = new SPCurve();