summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2010-07-27 20:30:10 +0000
committerJohan Engelen <goejendaagh@zonnet.nl>2010-07-27 20:30:10 +0000
commit813ae6f7f9543c0b16f785907890e6cc1a43f990 (patch)
tree22003020738fce01f7e76bddfa392a2e51651074 /src
parentpowerstroke: arbitrary number of control points. (diff)
downloadinkscape-813ae6f7f9543c0b16f785907890e6cc1a43f990.tar.gz
inkscape-813ae6f7f9543c0b16f785907890e6cc1a43f990.zip
powerstroke: sort point option
(bzr r9660)
Diffstat (limited to 'src')
-rw-r--r--src/live_effects/lpe-powerstroke.cpp14
-rw-r--r--src/live_effects/lpe-powerstroke.h3
2 files changed, 15 insertions, 2 deletions
diff --git a/src/live_effects/lpe-powerstroke.cpp b/src/live_effects/lpe-powerstroke.cpp
index da2b9d6a9..cb45e0518 100644
--- a/src/live_effects/lpe-powerstroke.cpp
+++ b/src/live_effects/lpe-powerstroke.cpp
@@ -26,11 +26,13 @@ namespace LivePathEffect {
LPEPowerStroke::LPEPowerStroke(LivePathEffectObject *lpeobject) :
Effect(lpeobject),
- offset_points(_("Offset points"), _("Offset points"), "offset_points", &wr, this)
+ offset_points(_("Offset points"), _("Offset points"), "offset_points", &wr, this),
+ sort_points(_("Sort points"), _("Sort offset points according to their time value along the curve."), "sort_points", &wr, this, true)
{
show_orig_path = true;
registerParameter( dynamic_cast<Parameter *>(&offset_points) );
+ registerParameter( dynamic_cast<Parameter *>(&sort_points) );
}
LPEPowerStroke::~LPEPowerStroke()
@@ -60,11 +62,18 @@ static void append_half_circle(Geom::Piecewise<Geom::D2<Geom::SBasis> > &pwd2,
pwd2.continuousConcat(cap_pwd2);
}
+static bool compare_offsets (Geom::Point first, Geom::Point second)
+{
+ return first[Geom::X] <= second[Geom::X];
+}
+
+
Geom::Piecewise<Geom::D2<Geom::SBasis> >
LPEPowerStroke::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd2_in)
{
using namespace Geom;
+ // perhaps use std::list instead of std::vector?
std::vector<Geom::Point> ts(offset_points.data().size());
for (unsigned int i; i < ts.size(); ++i) {
@@ -72,6 +81,9 @@ LPEPowerStroke::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const &
double offset = L2(pwd2_in.valueAt(t) - offset_points.data().at(i));
ts.at(i) = Geom::Point(t, offset);
}
+ if (sort_points) {
+ sort(ts.begin(), ts.end(), compare_offsets);
+ }
// create stroke path where points (x,y) = (t, offset)
Path strokepath;
diff --git a/src/live_effects/lpe-powerstroke.h b/src/live_effects/lpe-powerstroke.h
index 66b2ab89f..6c208fda4 100644
--- a/src/live_effects/lpe-powerstroke.h
+++ b/src/live_effects/lpe-powerstroke.h
@@ -13,7 +13,7 @@
#define INKSCAPE_LPE_POWERSTROKE_H
#include "live_effects/effect.h"
-#include "live_effects/parameter/point.h"
+#include "live_effects/parameter/bool.h"
#include "live_effects/parameter/powerstrokepointarray.h"
namespace Inkscape {
@@ -30,6 +30,7 @@ public:
private:
PowerStrokePointArrayParam offset_points;
+ BoolParam sort_points;
LPEPowerStroke(const LPEPowerStroke&);
LPEPowerStroke& operator=(const LPEPowerStroke&);