diff options
| author | JF Barraud <jf.barraud@gmail.com> | 2008-02-05 00:51:50 +0000 |
|---|---|---|
| committer | jfbarraud <jfbarraud@users.sourceforge.net> | 2008-02-05 00:51:50 +0000 |
| commit | f2c38e461990416ebc72d873609615208a4cc88c (patch) | |
| tree | 2743d6c47f1d03613c0bbd6fc0e84d0cf0a55085 /src | |
| parent | fix axonomgrid emphasizing (diff) | |
| download | inkscape-f2c38e461990416ebc72d873609615208a4cc88c.tar.gz inkscape-f2c38e461990416ebc72d873609615208a4cc88c.zip | |
lpe-skeletal-stroke: make spacing and normal_offset parameters do something...
(bzr r4658)
Diffstat (limited to 'src')
| -rw-r--r-- | src/live_effects/lpe-skeletalstrokes.cpp | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/src/live_effects/lpe-skeletalstrokes.cpp b/src/live_effects/lpe-skeletalstrokes.cpp index 6ba9ac65c..ea1610546 100644 --- a/src/live_effects/lpe-skeletalstrokes.cpp +++ b/src/live_effects/lpe-skeletalstrokes.cpp @@ -72,13 +72,14 @@ LPESkeletalStrokes::LPESkeletalStrokes(LivePathEffectObject *lpeobject) : registerParameter( dynamic_cast<Parameter *>(©type) ); registerParameter( dynamic_cast<Parameter *>(&prop_scale) ); registerParameter( dynamic_cast<Parameter *>(&scale_y_rel) ); -// registerParameter( dynamic_cast<Parameter *>(&spacing) ); -// registerParameter( dynamic_cast<Parameter *>(&normal_offset) ); -// registerParameter( dynamic_cast<Parameter *>(&tang_offset) ); + registerParameter( dynamic_cast<Parameter *>(&spacing) ); + registerParameter( dynamic_cast<Parameter *>(&normal_offset) ); + registerParameter( dynamic_cast<Parameter *>(&tang_offset) ); registerParameter( dynamic_cast<Parameter *>(&vertical_pattern) ); prop_scale.param_set_digits(3); prop_scale.param_set_increments(0.01, 0.10); + tang_offset.param_set_range(0, NR_HUGE); } LPESkeletalStrokes::~LPESkeletalStrokes() @@ -105,28 +106,37 @@ LPESkeletalStrokes::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > & pw Piecewise<SBasis> x = vertical_pattern.get_value() ? Piecewise<SBasis>(patternd2[1]) : Piecewise<SBasis>(patternd2[0]); Piecewise<SBasis> y = vertical_pattern.get_value() ? Piecewise<SBasis>(patternd2[0]) : Piecewise<SBasis>(patternd2[1]); Interval pattBnds = bounds_exact(x); - x -= pattBnds.min(); + x -= pattBnds.min(); Interval pattBndsY = bounds_exact(y); - y -= pattBndsY.middle(); + y -= pattBndsY.middle()+normal_offset; - int nbCopies = int(uskeleton.cuts.back()/pattBnds.extent()); + //Prevent more than 90% overlap... + if (spacing < -pattBnds.extent()*.9) { + spacing.param_set_value(-pattBnds.extent()*.9); + } + + int nbCopies = 0; double scaling = 1; switch(type) { case SSCT_REPEATED: + nbCopies = floor((uskeleton.domain().extent() - tang_offset + spacing)/(pattBnds.extent()+spacing)); + pattBnds = Interval(pattBnds.min(),pattBnds.max()+spacing); break; case SSCT_SINGLE: - nbCopies = (nbCopies > 0) ? 1 : 0; + nbCopies = (tang_offset + pattBnds.extent() < uskeleton.domain().extent()) ? 1 : 0; break; case SSCT_SINGLE_STRETCHED: nbCopies = 1; - scaling = uskeleton.cuts.back()/pattBnds.extent(); + scaling = (uskeleton.domain().extent() - tang_offset)/pattBnds.extent(); break; case SSCT_REPEATED_STRETCHED: - scaling = uskeleton.cuts.back()/(((double)nbCopies)*pattBnds.extent()); + nbCopies = std::floor((uskeleton.domain().extent() - tang_offset + spacing)/(pattBnds.extent()+spacing)); + pattBnds = Interval(pattBnds.min(),pattBnds.max()+spacing); + scaling = (uskeleton.domain().extent() - tang_offset)/(((double)nbCopies)*pattBnds.extent() - spacing); break; default: @@ -143,6 +153,7 @@ LPESkeletalStrokes::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > & pw } else { if (prop_scale != 1.0) y *= prop_scale; } + x += tang_offset; double offs = 0; Piecewise<D2<SBasis> > output; |
