summaryrefslogtreecommitdiffstats
path: root/src/live_effects
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2015-03-14 12:19:17 +0000
committerJabiertxof <jtx@jtx.marker.es>2015-03-14 12:19:17 +0000
commit6c5501612d54559bd8497e78d4f7bd8601432323 (patch)
treed335832ff25926a0549af362f589530b4c09541e /src/live_effects
parentupdate to trunk (diff)
parentPartial fix for bug 1430873. Rectangles should behave properly with % values. (diff)
downloadinkscape-6c5501612d54559bd8497e78d4f7bd8601432323.tar.gz
inkscape-6c5501612d54559bd8497e78d4f7bd8601432323.zip
update to trunk
(bzr r13645.1.41)
Diffstat (limited to 'src/live_effects')
-rw-r--r--src/live_effects/effect.cpp12
-rw-r--r--src/live_effects/lpe-bspline.cpp49
-rw-r--r--src/live_effects/lpe-bspline.h2
-rw-r--r--src/live_effects/lpe-lattice.cpp30
-rw-r--r--src/live_effects/lpe-lattice2.cpp349
-rw-r--r--src/live_effects/lpe-lattice2.h13
-rw-r--r--src/live_effects/lpe-offset.cpp2
-rw-r--r--src/live_effects/lpe-parallel.cpp2
-rw-r--r--src/live_effects/lpe-perspective-envelope.cpp17
-rw-r--r--src/live_effects/lpe-simplify.cpp70
-rw-r--r--src/live_effects/lpe-simplify.h5
-rw-r--r--src/live_effects/lpe-test-doEffect-stack.cpp2
-rw-r--r--src/live_effects/parameter/point.cpp80
-rw-r--r--src/live_effects/parameter/point.h11
14 files changed, 348 insertions, 296 deletions
diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp
index aab64fe64..1da364580 100644
--- a/src/live_effects/effect.cpp
+++ b/src/live_effects/effect.cpp
@@ -363,6 +363,10 @@ Effect::Effect(LivePathEffectObject *lpeobject)
show_orig_path(false),
lpeobj(lpeobject),
concatenate_before_pwd2(false),
+ sp_lpe_item(NULL),
+ defaultUnit("px"),
+ current_zoom(1),
+ sp_curve(NULL),
provides_own_flash_paths(true), // is automatically set to false if providesOwnFlashPaths() is not overridden
is_ready(false) // is automatically set to false if providesOwnFlashPaths() is not overridden
{
@@ -461,9 +465,11 @@ void Effect::doBeforeEffect_impl(SPLPEItem const* lpeitem)
sp_lpe_item = const_cast<SPLPEItem *>(lpeitem);
defaultUnit = sp_lpe_item->document->getDisplayUnit()->abbr;
//printf("(SPLPEITEM*) %p\n", sp_lpe_item);
- sp_curve = SP_SHAPE(sp_lpe_item)->getCurve();
- pathvector_before_effect = sp_curve->get_pathvector();
-
+ SPShape * shape = dynamic_cast<SPShape *>(sp_lpe_item);
+ if(shape){
+ sp_curve = shape->getCurve();
+ pathvector_before_effect = sp_curve->get_pathvector();
+ }
doBeforeEffect(lpeitem);
}
diff --git a/src/live_effects/lpe-bspline.cpp b/src/live_effects/lpe-bspline.cpp
index 02a7b3711..b924d8a23 100644
--- a/src/live_effects/lpe-bspline.cpp
+++ b/src/live_effects/lpe-bspline.cpp
@@ -54,20 +54,17 @@ const double defaultEndPower = 0.6667;
LPEBSpline::LPEBSpline(LivePathEffectObject *lpeobject)
: Effect(lpeobject),
- // initialise your parameters here:
- //testpointA(_("Test Point A"), _("Test A"), "ptA", &wr, this,
- //Geom::Point(100,100)),
steps(_("Steps with CTRL:"), _("Change number of steps with CTRL pressed"), "steps", &wr, this, 2),
+ helper_size(_("Helper size:"), _("Helper size"), "helper_size", &wr, this, 0),
ignoreCusp(_("Ignore cusp nodes"), _("Change ignoring cusp nodes"), "ignoreCusp", &wr, this, true),
onlySelected(_("Change only selected nodes"), _("Change only selected nodes"), "onlySelected", &wr, this, false),
- showHelper(_("Show helper paths"), _("Show helper paths"), "showHelper", &wr, this, false),
weight(_("Change weight:"), _("Change weight of the effect"), "weight", &wr, this, defaultStartPower)
{
- registerParameter(dynamic_cast<Parameter *>(&weight));
- registerParameter(dynamic_cast<Parameter *>(&steps));
- registerParameter(dynamic_cast<Parameter *>(&ignoreCusp));
- registerParameter(dynamic_cast<Parameter *>(&onlySelected));
- registerParameter(dynamic_cast<Parameter *>(&showHelper));
+ registerParameter(&weight);
+ registerParameter(&steps);
+ registerParameter(&helper_size);
+ registerParameter(&ignoreCusp);
+ registerParameter(&onlySelected);
weight.param_set_range(noPower, 1);
weight.param_set_increments(0.1, 0.1);
@@ -76,6 +73,10 @@ LPEBSpline::LPEBSpline(LivePathEffectObject *lpeobject)
steps.param_set_range(1, 10);
steps.param_set_increments(1, 1);
steps.param_set_digits(0);
+
+ helper_size.param_set_range(0.0, 999.0);
+ helper_size.param_set_increments(5, 5);
+ helper_size.param_set_digits(2);
}
LPEBSpline::~LPEBSpline() {}
@@ -106,23 +107,7 @@ void LPEBSpline::doEffect(SPCurve *curve)
// Make copy of old path as it is changed during processing
Geom::PathVector const original_pathv = curve->get_pathvector();
curve->reset();
- double radiusHelperNodes = 12.0;
- if(current_zoom != 0){
- if(current_zoom < 0.5){
- radiusHelperNodes *= current_zoom + 0.4;
- } else if(current_zoom > 1) {
- radiusHelperNodes *= 1/current_zoom;
- }
- Geom::Affine i2doc = i2anc_affine(SP_ITEM(sp_lpe_item), SP_OBJECT(SP_ITEM(sp_lpe_item)->document->getRoot()));
- double expand = (i2doc.expansionX() + i2doc.expansionY())/2;
- std::cout << expand << "expand\n";
- if(expand != 0){
- radiusHelperNodes /= expand;
- }
- radiusHelperNodes = Inkscape::Util::Quantity::convert(radiusHelperNodes, "px", defaultUnit);
- } else {
- radiusHelperNodes = 0;
- }
+
for (Geom::PathVector::const_iterator path_it = original_pathv.begin();
path_it != original_pathv.end(); ++path_it) {
if (path_it->empty())
@@ -250,8 +235,8 @@ void LPEBSpline::doEffect(SPCurve *curve)
}
nCurve->curveto(pointAt1, pointAt2, node);
}
- if(!are_near(node,curve_it1->finalPoint()) && showHelper){
- drawHandle(node, radiusHelperNodes);
+ if(!are_near(node,curve_it1->finalPoint()) && helper_size > 0.0){
+ drawHandle(node, helper_size);
}
++curve_it1;
++curve_it2;
@@ -264,21 +249,21 @@ void LPEBSpline::doEffect(SPCurve *curve)
nCurve->reset();
delete nCurve;
}
- if(showHelper){
+ if(helper_size > 0.0){
Geom::PathVector const pathv = curve->get_pathvector();
hp.push_back(pathv[0]);
}
}
void
-LPEBSpline::drawHandle(Geom::Point p, double radiusHelperNodes)
+LPEBSpline::drawHandle(Geom::Point p, double helper_size)
{
char const * svgd = "M 1,0.5 A 0.5,0.5 0 0 1 0.5,1 0.5,0.5 0 0 1 0,0.5 0.5,0.5 0 0 1 0.5,0 0.5,0.5 0 0 1 1,0.5 Z";
Geom::PathVector pathv = sp_svg_read_pathv(svgd);
Geom::Affine aff = Geom::Affine();
- aff *= Geom::Scale(radiusHelperNodes);
+ aff *= Geom::Scale(helper_size);
pathv *= aff;
- pathv += p - Geom::Point(0.5*radiusHelperNodes, 0.5*radiusHelperNodes);
+ pathv += p - Geom::Point(0.5*helper_size, 0.5*helper_size);
hp.push_back(pathv[0]);
}
diff --git a/src/live_effects/lpe-bspline.h b/src/live_effects/lpe-bspline.h
index a17c0c4ac..642562b24 100644
--- a/src/live_effects/lpe-bspline.h
+++ b/src/live_effects/lpe-bspline.h
@@ -38,9 +38,9 @@ public:
ScalarParam steps;
private:
+ ScalarParam helper_size;
BoolParam ignoreCusp;
BoolParam onlySelected;
- BoolParam showHelper;
ScalarParam weight;
Geom::PathVector hp;
diff --git a/src/live_effects/lpe-lattice.cpp b/src/live_effects/lpe-lattice.cpp
index ce0e4941b..c05bae7e1 100644
--- a/src/live_effects/lpe-lattice.cpp
+++ b/src/live_effects/lpe-lattice.cpp
@@ -236,21 +236,21 @@ LPELattice::resetDefaults(SPItem const* item)
grid_point15[Geom::X] = 2.0/3*boundingbox_X.max()+1.0/3*boundingbox_X.min();
grid_point15[Geom::Y] = 2.0/3*boundingbox_Y.max()+1.0/3*boundingbox_Y.min();
- grid_point1.param_set_and_write_new_value(grid_point1);
- grid_point2.param_set_and_write_new_value(grid_point2);
- grid_point3.param_set_and_write_new_value(grid_point3);
- grid_point4.param_set_and_write_new_value(grid_point4);
- grid_point5.param_set_and_write_new_value(grid_point5);
- grid_point6.param_set_and_write_new_value(grid_point6);
- grid_point7.param_set_and_write_new_value(grid_point7);
- grid_point8.param_set_and_write_new_value(grid_point8);
- grid_point9.param_set_and_write_new_value(grid_point9);
- grid_point10.param_set_and_write_new_value(grid_point10);
- grid_point11.param_set_and_write_new_value(grid_point11);
- grid_point12.param_set_and_write_new_value(grid_point12);
- grid_point13.param_set_and_write_new_value(grid_point13);
- grid_point14.param_set_and_write_new_value(grid_point14);
- grid_point15.param_set_and_write_new_value(grid_point15);
+ grid_point1.param_update_default(grid_point1);
+ grid_point2.param_update_default(grid_point2);
+ grid_point3.param_update_default(grid_point3);
+ grid_point4.param_update_default(grid_point4);
+ grid_point5.param_update_default(grid_point5);
+ grid_point6.param_update_default(grid_point6);
+ grid_point7.param_update_default(grid_point7);
+ grid_point8.param_update_default(grid_point8);
+ grid_point9.param_update_default(grid_point9);
+ grid_point10.param_update_default(grid_point10);
+ grid_point11.param_update_default(grid_point11);
+ grid_point12.param_update_default(grid_point12);
+ grid_point13.param_update_default(grid_point13);
+ grid_point14.param_update_default(grid_point14);
+ grid_point15.param_update_default(grid_point15);
}
/**
diff --git a/src/live_effects/lpe-lattice2.cpp b/src/live_effects/lpe-lattice2.cpp
index 1bcbe286f..08bbbd504 100644
--- a/src/live_effects/lpe-lattice2.cpp
+++ b/src/live_effects/lpe-lattice2.cpp
@@ -23,18 +23,17 @@
#include "sp-path.h"
#include "display/curve.h"
#include "svg/svg.h"
-
+#include "helper/geom.h"
+#include <2geom/path.h>
#include <2geom/sbasis.h>
#include <2geom/sbasis-2d.h>
+#include "helper/geom-curves.h"
#include <2geom/sbasis-geometric.h>
#include <2geom/bezier-to-sbasis.h>
#include <2geom/sbasis-to-bezier.h>
#include <2geom/d2.h>
#include <2geom/piecewise.h>
#include <2geom/transforms.h>
-#include "ui/tools-switch.h"
-
-#include "desktop.h" // TODO: should be factored out (see below)
using namespace Geom;
@@ -43,61 +42,63 @@ namespace LivePathEffect {
LPELattice2::LPELattice2(LivePathEffectObject *lpeobject) :
Effect(lpeobject),
- // initialise your parameters here:
- grid_point0(_("Control handle 0:"), _("Control handle 0 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint0", &wr, this),
- grid_point1(_("Control handle 1:"), _("Control handle 1 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint1", &wr, this),
- grid_point2(_("Control handle 2:"), _("Control handle 2 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint2", &wr, this),
- grid_point3(_("Control handle 3:"), _("Control handle 3 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint3", &wr, this),
- grid_point4(_("Control handle 4:"), _("Control handle 4 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint4", &wr, this),
- grid_point5(_("Control handle 5:"), _("Control handle 5 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint5", &wr, this),
- grid_point6(_("Control handle 6:"), _("Control handle 6 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint6", &wr, this),
- grid_point7(_("Control handle 7:"), _("Control handle 7 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint7", &wr, this),
- grid_point8x9(_("Control handle 8x9:"), _("Control handle 8x9 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint8x9", &wr, this),
- grid_point10x11(_("Control handle 10x11:"), _("Control handle 10x11 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint10x11", &wr, this),
- grid_point12(_("Control handle 12:"), _("Control handle 12 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint12", &wr, this),
- grid_point13(_("Control handle 13:"), _("Control handle 13 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint13", &wr, this),
- grid_point14(_("Control handle 14:"), _("Control handle 14 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint14", &wr, this),
- grid_point15(_("Control handle 15:"), _("Control handle 15 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint15", &wr, this),
- grid_point16(_("Control handle 16:"), _("Control handle 16 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint16", &wr, this),
- grid_point17(_("Control handle 17:"), _("Control handle 17 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint17", &wr, this),
- grid_point18(_("Control handle 18:"), _("Control handle 18 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint18", &wr, this),
- grid_point19(_("Control handle 19:"), _("Control handle 19 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint19", &wr, this),
- grid_point20x21(_("Control handle 20x21:"), _("Control handle 20x21 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint20x21", &wr, this),
- grid_point22x23(_("Control handle 22x23:"), _("Control handle 22x23 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint22x23", &wr, this),
- grid_point24x26(_("Control handle 24x26:"), _("Control handle 24x26 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint24x26", &wr, this),
- grid_point25x27(_("Control handle 25x27:"), _("Control handle 25x27 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint25x27", &wr, this),
- grid_point28x30(_("Control handle 28x30:"), _("Control handle 28x30 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint28x30", &wr, this),
- grid_point29x31(_("Control handle 29x31:"), _("Control handle 29x31 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint29x31", &wr, this),
- grid_point32x33x34x35(_("Control handle 32x33x34x35:"), _("Control handle 32x33x34x35 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint32x33x34x35", &wr, this)
-
-
+ horizontalMirror(_("Mirror movements in horizontal"), _("Mirror movements in horizontal"), "horizontalMirror", &wr, this, false),
+ verticalMirror(_("Mirror movements in vertical"), _("Mirror movements in vertical"), "verticalMirror", &wr, this, false),
+ grid_point0(_("Control 0:"), _("Control 0 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint0", &wr, this),
+ grid_point1(_("Control 1:"), _("Control 1 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint1", &wr, this),
+ grid_point2(_("Control 2:"), _("Control 2 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint2", &wr, this),
+ grid_point3(_("Control 3:"), _("Control 3 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint3", &wr, this),
+ grid_point4(_("Control 4:"), _("Control 4 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint4", &wr, this),
+ grid_point5(_("Control 5:"), _("Control 5 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint5", &wr, this),
+ grid_point6(_("Control 6:"), _("Control 6 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint6", &wr, this),
+ grid_point7(_("Control 7:"), _("Control 7 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint7", &wr, this),
+ grid_point8x9(_("Control 8x9:"), _("Control 8x9 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint8x9", &wr, this),
+ grid_point10x11(_("Control 10x11:"), _("Control 10x11 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint10x11", &wr, this),
+ grid_point12(_("Control 12:"), _("Control 12 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint12", &wr, this),
+ grid_point13(_("Control 13:"), _("Control 13 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint13", &wr, this),
+ grid_point14(_("Control 14:"), _("Control 14 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint14", &wr, this),
+ grid_point15(_("Control 15:"), _("Control 15 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint15", &wr, this),
+ grid_point16(_("Control 16:"), _("Control 16 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint16", &wr, this),
+ grid_point17(_("Control 17:"), _("Control 17 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint17", &wr, this),
+ grid_point18(_("Control 18:"), _("Control 18 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint18", &wr, this),
+ grid_point19(_("Control 19:"), _("Control 19 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint19", &wr, this),
+ grid_point20x21(_("Control 20x21:"), _("Control 20x21 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint20x21", &wr, this),
+ grid_point22x23(_("Control 22x23:"), _("Control 22x23 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint22x23", &wr, this),
+ grid_point24x26(_("Control 24x26:"), _("Control 24x26 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint24x26", &wr, this),
+ grid_point25x27(_("Control 25x27:"), _("Control 25x27 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint25x27", &wr, this),
+ grid_point28x30(_("Control 28x30:"), _("Control 28x30 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint28x30", &wr, this),
+ grid_point29x31(_("Control 29x31:"), _("Control 29x31 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint29x31", &wr, this),
+ grid_point32x33x34x35(_("Control 32x33x34x35:"), _("Control 32x33x34x35 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint32x33x34x35", &wr, this),
+ expanded(false)
{
// register all your parameters here, so Inkscape knows which parameters this effect has:
- registerParameter( dynamic_cast<Parameter *>(&grid_point0) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point1) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point2) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point3) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point4) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point5) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point6) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point7) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point8x9) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point10x11) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point12) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point13) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point14) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point15) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point16) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point17) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point18) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point19) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point20x21) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point22x23) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point24x26) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point25x27) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point28x30) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point29x31) );
- registerParameter( dynamic_cast<Parameter *>(&grid_point32x33x34x35) );
+ registerParameter(&horizontalMirror);
+ registerParameter(&verticalMirror);
+ registerParameter(&grid_point0);
+ registerParameter(&grid_point1);
+ registerParameter(&grid_point2);
+ registerParameter(&grid_point3);
+ registerParameter(&grid_point4);
+ registerParameter(&grid_point5);
+ registerParameter(&grid_point6);
+ registerParameter(&grid_point7);
+ registerParameter(&grid_point8x9);
+ registerParameter(&grid_point10x11);
+ registerParameter(&grid_point12);
+ registerParameter(&grid_point13);
+ registerParameter(&grid_point14);
+ registerParameter(&grid_point15);
+ registerParameter(&grid_point16);
+ registerParameter(&grid_point17);
+ registerParameter(&grid_point18);
+ registerParameter(&grid_point19);
+ registerParameter(&grid_point20x21);
+ registerParameter(&grid_point22x23);
+ registerParameter(&grid_point24x26);
+ registerParameter(&grid_point25x27);
+ registerParameter(&grid_point28x30);
+ registerParameter(&grid_point29x31);
+ registerParameter(&grid_point32x33x34x35);
}
LPELattice2::~LPELattice2()
@@ -107,6 +108,10 @@ LPELattice2::~LPELattice2()
Geom::Piecewise<Geom::D2<Geom::SBasis> >
LPELattice2::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd2_in)
{
+ PathVector pathv = path_from_piecewise(pwd2_in,0.001);
+ //this is because strange problems whith sb2 and LineSegment
+ PathVector cubic = pathv_to_cubicbezier(pathv);
+ Geom::Piecewise<Geom::D2<Geom::SBasis> > const &pwd2_in_linear_and_cubic = paths_to_pw(cubic);
D2<SBasis2d> sb2;
//Initialisation of the sb2
@@ -118,44 +123,45 @@ LPELattice2::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd
}
//Grouping the point params in a convenient vector
- std::vector<Geom::Point *> handles(36);
+
+ std::vector<Geom::Point > handles(36);
- handles[0] = &grid_point0;
- handles[1] = &grid_point1;
- handles[2] = &grid_point2;
- handles[3] = &grid_point3;
- handles[4] = &grid_point4;
- handles[5] = &grid_point5;
- handles[6] = &grid_point6;
- handles[7] = &grid_point7;
- handles[8] = &grid_point8x9;
- handles[9] = &grid_point8x9;
- handles[10] = &grid_point10x11;
- handles[11] = &grid_point10x11;
- handles[12] = &grid_point12;
- handles[13] = &grid_point13;
- handles[14] = &grid_point14;
- handles[15] = &grid_point15;
- handles[16] = &grid_point16;
- handles[17] = &grid_point17;
- handles[18] = &grid_point18;
- handles[19] = &grid_point19;
- handles[20] = &grid_point20x21;
- handles[21] = &grid_point20x21;
- handles[22] = &grid_point22x23;
- handles[23] = &grid_point22x23;
- handles[24] = &grid_point24x26;
- handles[25] = &grid_point25x27;
- handles[26] = &grid_point24x26;
- handles[27] = &grid_point25x27;
- handles[28] = &grid_point28x30;
- handles[29] = &grid_point29x31;
- handles[30] = &grid_point28x30;
- handles[31] = &grid_point29x31;
- handles[32] = &grid_point32x33x34x35;
- handles[33] = &grid_point32x33x34x35;
- handles[34] = &grid_point32x33x34x35;
- handles[35] = &grid_point32x33x34x35;
+ handles[0] = grid_point0;
+ handles[1] = grid_point1;
+ handles[2] = grid_point2;
+ handles[3] = grid_point3;
+ handles[4] = grid_point4;
+ handles[5] = grid_point5;
+ handles[6] = grid_point6;
+ handles[7] = grid_point7;
+ handles[8] = grid_point8x9;
+ handles[9] = grid_point8x9;
+ handles[10] = grid_point10x11;
+ handles[11] = grid_point10x11;
+ handles[12] = grid_point12;
+ handles[13] = grid_point13;
+ handles[14] = grid_point14;
+ handles[15] = grid_point15;
+ handles[16] = grid_point16;
+ handles[17] = grid_point17;
+ handles[18] = grid_point18;
+ handles[19] = grid_point19;
+ handles[20] = grid_point20x21;
+ handles[21] = grid_point20x21;
+ handles[22] = grid_point22x23;
+ handles[23] = grid_point22x23;
+ handles[24] = grid_point24x26;
+ handles[25] = grid_point25x27;
+ handles[26] = grid_point24x26;
+ handles[27] = grid_point25x27;
+ handles[28] = grid_point28x30;
+ handles[29] = grid_point29x31;
+ handles[30] = grid_point28x30;
+ handles[31] = grid_point29x31;
+ handles[32] = grid_point32x33x34x35;
+ handles[33] = grid_point32x33x34x35;
+ handles[34] = grid_point32x33x34x35;
+ handles[35] = grid_point32x33x34x35;
Geom::Point origin = Geom::Point(boundingbox_X.min(),boundingbox_Y.min());
@@ -185,7 +191,7 @@ LPELattice2::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd
// i = Upperleft corner of the considerated rectangle
// corner = actual corner of the rectangle
// origin = Upperleft point
- double dl = dot((*handles[corner+4*i] - (base + origin)), dir)/dot(dir,dir);
+ double dl = dot((handles[corner+4*i] - (base + origin)), dir)/dot(dir,dir);
sb2[dim][i][corner] = dl/( dim ? height : width )*pow(4.0,ui+vi);
}
}
@@ -195,8 +201,8 @@ LPELattice2::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd
Piecewise<D2<SBasis> > output;
output.push_cut(0.);
- for(unsigned i = 0; i < pwd2_in.size(); i++) {
- D2<SBasis> B = pwd2_in[i];
+ for(unsigned i = 0; i < pwd2_in_linear_and_cubic.size(); i++) {
+ D2<SBasis> B = pwd2_in_linear_and_cubic[i];
B[Geom::X] -= origin[Geom::X];
B[Geom::X]*= 1/width;
B[Geom::Y] -= origin[Geom::Y];
@@ -211,6 +217,7 @@ LPELattice2::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd
return output;
}
+
Gtk::Widget *
LPELattice2::newWidget()
{
@@ -221,7 +228,10 @@ LPELattice2::newWidget()
vbox->set_homogeneous(false);
vbox->set_spacing(6);
Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false,0));
- Gtk::Button* resetButton = Gtk::manage(new Gtk::Button(Glib::ustring(_("Reset grid"))));
+ Gtk::VBox * vboxExpander = Gtk::manage( new Gtk::VBox(Effect::newWidget()) );
+ vboxExpander->set_border_width(0);
+ vboxExpander->set_spacing(2);
+ Gtk::Button * resetButton = Gtk::manage(new Gtk::Button(Glib::ustring(_("Reset grid"))));
resetButton->signal_clicked().connect(sigc::mem_fun (*this,&LPELattice2::resetGrid));
resetButton->set_size_request(140,30);
vbox->pack_start(*hbox, true,true,2);
@@ -236,7 +246,11 @@ LPELattice2::newWidget()
}
Glib::ustring * tip = param->param_getTooltip();
if (widg) {
- vbox->pack_start(*widg, true, true, 2);
+ if (param->param_key == "horizontalMirror" || param->param_key == "verticalMirror") {
+ vbox->pack_start(*widg, true, true, 2);
+ } else {
+ vboxExpander->pack_start(*widg, true, true, 2);
+ }
if (tip) {
widg->set_tooltip_text(*tip);
} else {
@@ -248,14 +262,96 @@ LPELattice2::newWidget()
++it;
}
+
+ expander = Gtk::manage(new Gtk::Expander(Glib::ustring(_("Show Points"))));
+ expander->add(*vboxExpander);
+ expander->set_expanded(expanded);
+ vbox->pack_start(*expander, true, true, 2);
+ expander->property_expanded().signal_changed().connect(sigc::mem_fun(*this, &LPELattice2::on_expander_changed) );
return dynamic_cast<Gtk::Widget *>(vbox);
}
void
+LPELattice2::on_expander_changed()
+{
+ expanded = expander->get_expanded();
+ if(expander->get_expanded()){
+ expander->set_label (Glib::ustring(_("Hide Points")));
+ } else {
+ expander->set_label (Glib::ustring(_("Show Points")));
+ }
+}
+void
+LPELattice2::vertical(PointParam &paramA, PointParam &paramB, Geom::Line vert){
+ Geom::Point A = paramA;
+ Geom::Point B = paramB;
+ double Y = (A[Geom::Y] + B[Geom::Y])/2;
+ A[Geom::Y] = Y;
+ B[Geom::Y] = Y;
+ Geom::Point nearest = vert.pointAt(vert.nearestPoint(A));
+ double distA = Geom::distance(A,nearest);
+ double distB = Geom::distance(B,nearest);
+ double distanceMed = (distA + distB)/2;
+ if(A[Geom::X] > B[Geom::X]){
+ distanceMed *= -1;
+ }
+ A[Geom::X] = nearest[Geom::X] - distanceMed;
+ B[Geom::X] = nearest[Geom::X] + distanceMed;
+ paramA.param_setValue(A, true);
+ paramB.param_setValue(B, true);
+}
+
+void
+LPELattice2::horizontal(PointParam &paramA, PointParam &paramB, Geom::Line horiz){
+ Geom::Point A = paramA;
+ Geom::Point B = paramB;
+ double X = (A[Geom::X] + B[Geom::X])/2;
+ A[Geom::X] = X;
+ B[Geom::X] = X;
+ Geom::Point nearest = horiz.pointAt(horiz.nearestPoint(A));
+ double distA = Geom::distance(A,nearest);
+ double distB = Geom::distance(B,nearest);
+ double distanceMed = (distA + distB)/2;
+ if(A[Geom::Y] > B[Geom::Y]){
+ distanceMed *= -1;
+ }
+ A[Geom::Y] = nearest[Geom::Y] - distanceMed;
+ B[Geom::Y] = nearest[Geom::Y] + distanceMed;
+ paramA.param_setValue(A, true);
+ paramB.param_setValue(B, true);
+}
+
+void
LPELattice2::doBeforeEffect (SPLPEItem const* lpeitem)
{
original_bbox(lpeitem);
setDefaults();
+ Geom::Line vert(grid_point8x9.param_get_default(),grid_point10x11.param_get_default());
+ Geom::Line horiz(grid_point24x26.param_get_default(),grid_point25x27.param_get_default());
+ if(verticalMirror){
+ vertical(grid_point0, grid_point1,vert);
+ vertical(grid_point2, grid_point3,vert);
+ vertical(grid_point4, grid_point5,vert);
+ vertical(grid_point6, grid_point7,vert);
+ vertical(grid_point12, grid_point13,vert);
+ vertical(grid_point14, grid_point15,vert);
+ vertical(grid_point16, grid_point17,vert);
+ vertical(grid_point18, grid_point19,vert);
+ vertical(grid_point24x26, grid_point25x27,vert);
+ vertical(grid_point28x30, grid_point29x31,vert);
+ }
+ if(horizontalMirror){
+ horizontal(grid_point0, grid_point2,horiz);
+ horizontal(grid_point1, grid_point3,horiz);
+ horizontal(grid_point4, grid_point6,horiz);
+ horizontal(grid_point5, grid_point7,horiz);
+ horizontal(grid_point8x9, grid_point10x11,horiz);
+ horizontal(grid_point12, grid_point14,horiz);
+ horizontal(grid_point13, grid_point15,horiz);
+ horizontal(grid_point16, grid_point18,horiz);
+ horizontal(grid_point17, grid_point19,horiz);
+ horizontal(grid_point20x21, grid_point22x23,horiz);
+ }
SPLPEItem * item = const_cast<SPLPEItem*>(lpeitem);
item->apply_to_clippath(item);
item->apply_to_mask(item);
@@ -369,36 +465,31 @@ LPELattice2::setDefaults()
void
LPELattice2::resetGrid()
{
- grid_point0.param_set_and_write_default();
- grid_point1.param_set_and_write_default();
- grid_point2.param_set_and_write_default();
- grid_point3.param_set_and_write_default();
- grid_point4.param_set_and_write_default();
- grid_point5.param_set_and_write_default();
- grid_point6.param_set_and_write_default();
- grid_point7.param_set_and_write_default();
- grid_point8x9.param_set_and_write_default();
- grid_point10x11.param_set_and_write_default();
- grid_point12.param_set_and_write_default();
- grid_point13.param_set_and_write_default();
- grid_point14.param_set_and_write_default();
- grid_point15.param_set_and_write_default();
- grid_point16.param_set_and_write_default();
- grid_point17.param_set_and_write_default();
- grid_point18.param_set_and_write_default();
- grid_point19.param_set_and_write_default();
- grid_point20x21.param_set_and_write_default();
- grid_point22x23.param_set_and_write_default();
- grid_point24x26.param_set_and_write_default();
- grid_point25x27.param_set_and_write_default();
- grid_point28x30.param_set_and_write_default();
- grid_point29x31.param_set_and_write_default();
- grid_point32x33x34x35.param_set_and_write_default();
- //todo:this hack is only to reposition the knots on reser grid button
- //Better update path effect in LPEITEM
- SPDesktop * desktop = SP_ACTIVE_DESKTOP;
- tools_switch(desktop, TOOLS_SELECT);
- tools_switch(desktop, TOOLS_NODES);
+ grid_point0.param_set_default();
+ grid_point1.param_set_default();
+ grid_point2.param_set_default();
+ grid_point3.param_set_default();
+ grid_point4.param_set_default();
+ grid_point5.param_set_default();
+ grid_point6.param_set_default();
+ grid_point7.param_set_default();
+ grid_point8x9.param_set_default();
+ grid_point10x11.param_set_default();
+ grid_point12.param_set_default();
+ grid_point13.param_set_default();
+ grid_point14.param_set_default();
+ grid_point15.param_set_default();
+ grid_point16.param_set_default();
+ grid_point17.param_set_default();
+ grid_point18.param_set_default();
+ grid_point19.param_set_default();
+ grid_point20x21.param_set_default();
+ grid_point22x23.param_set_default();
+ grid_point24x26.param_set_default();
+ grid_point25x27.param_set_default();
+ grid_point28x30.param_set_default();
+ grid_point29x31.param_set_default();
+ grid_point32x33x34x35.param_set_default();
}
void
diff --git a/src/live_effects/lpe-lattice2.h b/src/live_effects/lpe-lattice2.h
index 5084ceead..086bdab7e 100644
--- a/src/live_effects/lpe-lattice2.h
+++ b/src/live_effects/lpe-lattice2.h
@@ -18,7 +18,7 @@
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-
+#include <gtkmm.h>
#include "live_effects/parameter/enum.h"
#include "live_effects/effect.h"
#include "live_effects/parameter/point.h"
@@ -43,8 +43,14 @@ public:
virtual void calculateCurve(Geom::Point a,Geom::Point b, SPCurve *c, bool horizontal, bool move);
+ virtual void vertical(PointParam &paramA,PointParam &paramB, Geom::Line vert);
+
+ virtual void horizontal(PointParam &paramA,PointParam &paramB,Geom::Line horiz);
+
virtual void setDefaults();
+ virtual void on_expander_changed();
+
virtual void resetGrid();
//virtual void original_bbox(SPLPEItem const* lpeitem, bool absolute = false);
@@ -56,6 +62,8 @@ protected:
void addCanvasIndicators(SPLPEItem const */*lpeitem*/, std::vector<Geom::PathVector> &hp_vec);
private:
+ BoolParam horizontalMirror;
+ BoolParam verticalMirror;
PointParam grid_point0;
PointParam grid_point1;
PointParam grid_point2;
@@ -82,6 +90,9 @@ private:
PointParam grid_point29x31;
PointParam grid_point32x33x34x35;
+ bool expanded;
+ Gtk::Expander * expander;
+
LPELattice2(const LPELattice2&);
LPELattice2& operator=(const LPELattice2&);
};
diff --git a/src/live_effects/lpe-offset.cpp b/src/live_effects/lpe-offset.cpp
index 232f1c9db..ba7179476 100644
--- a/src/live_effects/lpe-offset.cpp
+++ b/src/live_effects/lpe-offset.cpp
@@ -44,7 +44,7 @@ LPEOffset::doOnApply(SPLPEItem const* lpeitem)
{
Geom::Point offset = *(SP_SHAPE(lpeitem)->_curve->first_point());
offset_pt.param_update_default(offset);
- offset_pt.param_set_and_write_new_value(offset);
+ offset_pt.param_setValue(offset,true);
}
static void append_half_circle(Geom::Piecewise<Geom::D2<Geom::SBasis> > &pwd2,
diff --git a/src/live_effects/lpe-parallel.cpp b/src/live_effects/lpe-parallel.cpp
index a1e713fe2..aa7405607 100644
--- a/src/live_effects/lpe-parallel.cpp
+++ b/src/live_effects/lpe-parallel.cpp
@@ -74,7 +74,7 @@ LPEParallel::doOnApply (SPLPEItem const* lpeitem)
dir = unit_vector(B - A);
Geom::Point offset = (A + B)/2 + dir.ccw() * 100;
offset_pt.param_update_default(offset);
- offset_pt.param_set_and_write_new_value(offset);
+ offset_pt.param_setValue(offset, true);
}
Geom::Piecewise<Geom::D2<Geom::SBasis> >
diff --git a/src/live_effects/lpe-perspective-envelope.cpp b/src/live_effects/lpe-perspective-envelope.cpp
index d38427d0a..d60a13c23 100644
--- a/src/live_effects/lpe-perspective-envelope.cpp
+++ b/src/live_effects/lpe-perspective-envelope.cpp
@@ -19,9 +19,7 @@
#include "helper/geom.h"
#include "display/curve.h"
#include "svg/svg.h"
-#include "ui/tools-switch.h"
#include <gsl/gsl_linalg.h>
-#include "desktop.h"
using namespace Geom;
@@ -331,15 +329,10 @@ LPEPerspectiveEnvelope::setDefaults()
void
LPEPerspectiveEnvelope::resetGrid()
{
- Up_Left_Point.param_set_and_write_default();
- Up_Right_Point.param_set_and_write_default();
- Down_Right_Point.param_set_and_write_default();
- Down_Left_Point.param_set_and_write_default();
- //todo:this hack is only to reposition the knots on reser grid button
- //Better update path effect in LPEITEM
- SPDesktop * desktop = SP_ACTIVE_DESKTOP;
- tools_switch(desktop, TOOLS_SELECT);
- tools_switch(desktop, TOOLS_NODES);
+ Up_Left_Point.param_set_default();
+ Up_Right_Point.param_set_default();
+ Down_Right_Point.param_set_default();
+ Down_Left_Point.param_set_default();
}
void
@@ -347,8 +340,8 @@ LPEPerspectiveEnvelope::resetDefaults(SPItem const* item)
{
Effect::resetDefaults(item);
original_bbox(SP_LPE_ITEM(item));
- setDefaults();
resetGrid();
+ setDefaults();
}
void
diff --git a/src/live_effects/lpe-simplify.cpp b/src/live_effects/lpe-simplify.cpp
index 590ad92af..1fe18dd5e 100644
--- a/src/live_effects/lpe-simplify.cpp
+++ b/src/live_effects/lpe-simplify.cpp
@@ -30,32 +30,36 @@ LPESimplify::LPESimplify(LivePathEffectObject *lpeobject)
steps(_("Steps:"),_("Change number of simplify steps "), "steps", &wr, this,1),
threshold(_("Roughly threshold:"), _("Roughly threshold:"), "threshold", &wr, this, 0.003),
smooth_angles(_("Smooth angles:"), _("Max degree difference on handles to preform a smooth"), "smooth_angles", &wr, this, 20.),
- nodes(_("Helper nodes"), _("Show helper nodes"), "nodes", &wr, this, false,
- "", INKSCAPE_ICON("on"), INKSCAPE_ICON("off")),
- handles(_("Helper handles"), _("Show helper handles"), "handles", &wr, this, false,
- "", INKSCAPE_ICON("on"), INKSCAPE_ICON("off")),
+ helper_size(_("Helper size:"), _("Helper size"), "helper_size", &wr, this, 5),
simplifyindividualpaths(_("Paths separately"), _("Simplifying paths (separately)"), "simplifyindividualpaths", &wr, this, false,
"", INKSCAPE_ICON("on"), INKSCAPE_ICON("off")),
simplifyJustCoalesce(_("Just coalesce"), _("Simplify just coalesce"), "simplifyJustCoalesce", &wr, this, false,
"", INKSCAPE_ICON("on"), INKSCAPE_ICON("off"))
{
- radiusHelperNodes = 6.0;
- registerParameter(dynamic_cast<Parameter *>(&steps));
- registerParameter(dynamic_cast<Parameter *>(&threshold));
- registerParameter(dynamic_cast<Parameter *>(&smooth_angles));
- registerParameter(dynamic_cast<Parameter *>(&nodes));
- registerParameter(dynamic_cast<Parameter *>(&handles));
- registerParameter(dynamic_cast<Parameter *>(&simplifyindividualpaths));
- registerParameter(dynamic_cast<Parameter *>(&simplifyJustCoalesce));
+ registerParameter(&steps);
+ registerParameter(&threshold);
+ registerParameter(&smooth_angles);
+ registerParameter(&helper_size);
+ registerParameter(&simplifyindividualpaths);
+ registerParameter(&simplifyJustCoalesce);
+
threshold.param_set_range(0.0001, Geom::infinity());
threshold.param_set_increments(0.0001, 0.0001);
threshold.param_set_digits(6);
+
steps.param_set_range(0, 100);
steps.param_set_increments(1, 1);
steps.param_set_digits(0);
+
smooth_angles.param_set_range(0.0, 365.0);
smooth_angles.param_set_increments(10, 10);
smooth_angles.param_set_digits(2);
+
+ helper_size.param_set_range(0.0, 999.0);
+ helper_size.param_set_increments(5, 5);
+ helper_size.param_set_digits(2);
+
+ radiusHelperNodes = 6.0;
}
LPESimplify::~LPESimplify() {}
@@ -68,22 +72,7 @@ LPESimplify::doBeforeEffect (SPLPEItem const* lpeitem)
}
bbox = SP_ITEM(lpeitem)->visualBounds();
SPLPEItem * item = const_cast<SPLPEItem*>(lpeitem);
- radiusHelperNodes = 12.0;
- if(current_zoom != 0 && (nodes || handles)){
- if(current_zoom < 0.5){
- radiusHelperNodes *= current_zoom + 0.4;
- } else if(current_zoom > 1) {
- radiusHelperNodes *= 1/current_zoom;
- }
- Geom::Affine i2doc = i2anc_affine(SP_ITEM(lpeitem), SP_OBJECT(SP_ITEM(lpeitem)->document->getRoot()));
- double expand = (i2doc.expansionX() + i2doc.expansionY())/2;
- if(expand != 0){
- radiusHelperNodes /= expand;
- }
- radiusHelperNodes = Inkscape::Util::Quantity::convert(radiusHelperNodes, "px", defaultUnit);
- } else {
- radiusHelperNodes = 0;
- }
+ radiusHelperNodes = helper_size;
item->apply_to_clippath(item);
item->apply_to_mask(item);
}
@@ -98,7 +87,6 @@ LPESimplify::newWidget()
vbox->set_spacing(2);
std::vector<Parameter *>::iterator it = param_vector.begin();
Gtk::HBox * buttons = Gtk::manage(new Gtk::HBox(true,0));
- Gtk::HBox * buttonsBottom = Gtk::manage(new Gtk::HBox(true,0));
while (it != param_vector.end()) {
if ((*it)->widget_is_visible) {
Parameter * param = *it;
@@ -108,19 +96,6 @@ LPESimplify::newWidget()
{
Glib::ustring * tip = param->param_getTooltip();
if (widg) {
- buttonsBottom->pack_start(*widg, true, true, 2);
- if (tip) {
- widg->set_tooltip_text(*tip);
- } else {
- widg->set_tooltip_text("");
- widg->set_has_tooltip(false);
- }
- }
- } else if (param->param_key == "nodes" ||
- param->param_key == "handles")
- {
- Glib::ustring * tip = param->param_getTooltip();
- if (widg) {
buttons->pack_start(*widg, true, true, 2);
if (tip) {
widg->set_tooltip_text(*tip);
@@ -129,7 +104,7 @@ LPESimplify::newWidget()
widg->set_has_tooltip(false);
}
}
- }else{
+ } else{
Glib::ustring * tip = param->param_getTooltip();
if (widg) {
Gtk::HBox * scalarParameter = dynamic_cast<Gtk::HBox *>(widg);
@@ -150,7 +125,6 @@ LPESimplify::newWidget()
++it;
}
vbox->pack_start(*buttons,true, true, 2);
- vbox->pack_start(*buttonsBottom,true, true, 2);
return dynamic_cast<Gtk::Widget *>(vbox);
}
@@ -213,7 +187,7 @@ LPESimplify::generateHelperPathAndSmooth(Geom::PathVector &result)
curve_endit = path_it->end_open();
}
}
- if(nodes){
+ if(helper_size > 0){
drawNode(curve_it1->initialPoint());
}
nCurve->moveto(curve_it1->initialPoint());
@@ -256,7 +230,7 @@ LPESimplify::generateHelperPathAndSmooth(Geom::PathVector &result)
if (cubic) {
pointAt1 = (*cubic)[1];
pointAt2 = (*cubic)[2];
- if(handles) {
+ if(helper_size > 0) {
if(!are_near((*cubic)[0],(*cubic)[1])){
drawHandle((*cubic)[1]);
drawHandleLine((*cubic)[0],(*cubic)[1]);
@@ -267,7 +241,7 @@ LPESimplify::generateHelperPathAndSmooth(Geom::PathVector &result)
}
}
}
- if(nodes) {
+ if(helper_size > 0) {
drawNode(curve_it1->finalPoint());
}
++curve_it1;
@@ -315,7 +289,7 @@ LPESimplify::drawHandleLine(Geom::Point p,Geom::Point p2)
Geom::Path path;
path.start( p );
double diameter = radiusHelperNodes;
- if(handles && Geom::distance(p,p2) > (diameter * 0.35)){
+ if(helper_size > 0 && Geom::distance(p,p2) > (diameter * 0.35)){
Geom::Ray ray2(p, p2);
p2 = p2 - Geom::Point::polar(ray2.angle(),(diameter * 0.35));
}
diff --git a/src/live_effects/lpe-simplify.h b/src/live_effects/lpe-simplify.h
index 15423915d..c18c3ecdf 100644
--- a/src/live_effects/lpe-simplify.h
+++ b/src/live_effects/lpe-simplify.h
@@ -41,12 +41,11 @@ private:
ScalarParam steps;
ScalarParam threshold;
ScalarParam smooth_angles;
- ToggleButtonParam nodes;
- ToggleButtonParam handles;
+ ScalarParam helper_size;
ToggleButtonParam simplifyindividualpaths;
ToggleButtonParam simplifyJustCoalesce;
- double radiusHelperNodes;
+ double radiusHelperNodes;
Geom::PathVector hp;
Geom::OptRect bbox;
diff --git a/src/live_effects/lpe-test-doEffect-stack.cpp b/src/live_effects/lpe-test-doEffect-stack.cpp
index 36ab6b547..c6787aae1 100644
--- a/src/live_effects/lpe-test-doEffect-stack.cpp
+++ b/src/live_effects/lpe-test-doEffect-stack.cpp
@@ -28,7 +28,7 @@ LPEdoEffectStackTest::LPEdoEffectStackTest(LivePathEffectObject *lpeobject) :
registerParameter( dynamic_cast<Parameter *>(&path) );
point.set_oncanvas_looks(SP_KNOT_SHAPE_SQUARE, SP_KNOT_MODE_XOR, 0x00ff0000);
- point.param_set_and_write_new_value(point);
+ point.param_setValue(point,true);
}
LPEdoEffectStackTest::~LPEdoEffectStackTest()
diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp
index 1d48bda8d..4564363db 100644
--- a/src/live_effects/parameter/point.cpp
+++ b/src/live_effects/parameter/point.cpp
@@ -15,8 +15,6 @@
#include "verbs.h"
#include "knotholder.h"
#include <glibmm/i18n.h>
-#include "ui/tools-switch.h"
-#include "ui/tools/node-tool.h"
// needed for on-canvas editting:
#include "desktop.h"
@@ -28,7 +26,9 @@ namespace LivePathEffect {
PointParam::PointParam( const Glib::ustring& label, const Glib::ustring& tip,
const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr,
Effect* effect, const gchar *htip, Geom::Point default_value)
- : Geom::Point(default_value), Parameter(label, tip, key, wr, effect), defvalue(default_value)
+ : Parameter(label, tip, key, wr, effect),
+ defvalue(default_value),
+ knoth(NULL)
{
knot_shape = SP_KNOT_SHAPE_DIAMOND;
knot_mode = SP_KNOT_MODE_XOR;
@@ -45,19 +45,34 @@ PointParam::~PointParam()
void
PointParam::param_set_default()
{
- param_setValue(defvalue);
+ param_setValue(defvalue,true);
+}
+
+Geom::Point
+PointParam::param_get_default() const{
+ return defvalue;
}
void
-PointParam::param_set_and_write_default()
+PointParam::param_update_default(Geom::Point newpoint)
{
- param_set_and_write_new_value(defvalue);
+ defvalue = newpoint;
}
void
-PointParam::param_update_default(Geom::Point newpoint)
+PointParam::param_setValue(Geom::Point newpoint, bool write)
{
- this->defvalue = newpoint;
+ *dynamic_cast<Geom::Point *>( this ) = newpoint;
+ if(write){
+ Inkscape::SVGOStringStream os;
+ os << newpoint;
+ gchar * str = g_strdup(os.str().c_str());
+ param_write_to_repr(str);
+ g_free(str);
+ }
+ if(knoth){
+ knoth->update_knots();
+ }
}
bool
@@ -84,6 +99,12 @@ PointParam::param_getSVGValue() const
return str;
}
+void
+PointParam::param_transform_multiply(Geom::Affine const& postmul, bool /*set*/)
+{
+ param_setValue( (*this) * postmul, true);
+}
+
Gtk::Widget *
PointParam::param_newWidget()
{
@@ -110,36 +131,6 @@ PointParam::param_newWidget()
}
void
-PointParam::param_setValue(Geom::Point newpoint)
-{
- *dynamic_cast<Geom::Point *>( this ) = newpoint;
- if(SP_ACTIVE_DESKTOP){
- SPDesktop* desktop = SP_ACTIVE_DESKTOP;
- if (tools_isactive( desktop, TOOLS_NODES)) {
- Inkscape::UI::Tools::NodeTool *nt = static_cast<Inkscape::UI::Tools::NodeTool*>( desktop->event_context);
- nt->update_helperpath();
- }
- }
-}
-
-void
-PointParam::param_set_and_write_new_value (Geom::Point newpoint)
-{
- Inkscape::SVGOStringStream os;
- os << newpoint;
- gchar * str = g_strdup(os.str().c_str());
- param_write_to_repr(str);
- g_free(str);
-}
-
-void
-PointParam::param_transform_multiply(Geom::Affine const& postmul, bool /*set*/)
-{
- param_set_and_write_new_value( (*this) * postmul );
-}
-
-
-void
PointParam::set_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color)
{
knot_shape = shape;
@@ -175,8 +166,11 @@ PointParamKnotHolderEntity::knot_set(Geom::Point const &p, Geom::Point const &or
s = A;
}
}
- pparam->param_setValue(s);
- sp_lpe_item_update_patheffect(SP_LPE_ITEM(item), false, false);
+ pparam->param_setValue(s, true);
+ SPLPEItem * splpeitem = dynamic_cast<SPLPEItem *>(item);
+ if(splpeitem){
+ sp_lpe_item_update_patheffect(splpeitem, false, false);
+ }
}
Geom::Point
@@ -191,7 +185,10 @@ PointParamKnotHolderEntity::knot_click(guint state)
if (state & GDK_CONTROL_MASK) {
if (state & GDK_MOD1_MASK) {
this->pparam->param_set_default();
- sp_lpe_item_update_patheffect(SP_LPE_ITEM(item), false, false);
+ SPLPEItem * splpeitem = dynamic_cast<SPLPEItem *>(item);
+ if(splpeitem){
+ sp_lpe_item_update_patheffect(splpeitem, false, false);
+ }
}
}
}
@@ -199,6 +196,7 @@ PointParamKnotHolderEntity::knot_click(guint state)
void
PointParam::addKnotHolderEntities(KnotHolder *knotholder, SPDesktop *desktop, SPItem *item)
{
+ knoth = knotholder;
PointParamKnotHolderEntity *e = new PointParamKnotHolderEntity(this);
// TODO: can we ditch handleTip() etc. because we have access to handle_tip etc. itself???
e->create(desktop, item, knotholder, Inkscape::CTRL_TYPE_UNKNOWN, handleTip(), knot_shape, knot_mode, knot_color);
diff --git a/src/live_effects/parameter/point.h b/src/live_effects/parameter/point.h
index 95854ea52..471fbc993 100644
--- a/src/live_effects/parameter/point.h
+++ b/src/live_effects/parameter/point.h
@@ -38,14 +38,10 @@ public:
bool param_readSVGValue(const gchar * strvalue);
gchar * param_getSVGValue() const;
inline const gchar *handleTip() const { return handle_tip ? handle_tip : param_tooltip.c_str(); }
-
- void param_setValue(Geom::Point newpoint);
+ void param_setValue(Geom::Point newpoint, bool write = false);
void param_set_default();
- void param_set_and_write_default();
+ Geom::Point param_get_default() const;
void param_update_default(Geom::Point newpoint);
-
- void param_set_and_write_new_value(Geom::Point newpoint);
-
virtual void param_transform_multiply(Geom::Affine const& /*postmul*/, bool /*set*/);
void set_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color);
@@ -57,9 +53,8 @@ public:
private:
PointParam(const PointParam&);
PointParam& operator=(const PointParam&);
-
Geom::Point defvalue;
-
+ KnotHolder *knoth;
SPKnotShapeType knot_shape;
SPKnotModeType knot_mode;
guint32 knot_color;