diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/helper/geom.cpp | 3 | ||||
| -rw-r--r-- | src/live_effects/lpe-lattice2.cpp | 10 | ||||
| -rw-r--r-- | src/live_effects/parameter/point.cpp | 5 | ||||
| -rw-r--r-- | src/live_effects/parameter/point.h | 2 |
4 files changed, 17 insertions, 3 deletions
diff --git a/src/helper/geom.cpp b/src/helper/geom.cpp index 307412b57..91689375f 100644 --- a/src/helper/geom.cpp +++ b/src/helper/geom.cpp @@ -558,6 +558,9 @@ pathv_to_linear( Geom::PathVector const &pathv, double /*maxdisp*/) /* * Converts all segments in all paths to Geom Cubic bezier. + * This is used in lattice2 LPE, maybe is better move the function to the effect + * But maybe could be usable by others, so i put here. + * The straight curve part is needed as it for the effect to work apropiately */ Geom::PathVector pathv_to_cubicbezier( Geom::PathVector const &pathv) diff --git a/src/live_effects/lpe-lattice2.cpp b/src/live_effects/lpe-lattice2.cpp index a0069042e..1916fc2d4 100644 --- a/src/live_effects/lpe-lattice2.cpp +++ b/src/live_effects/lpe-lattice2.cpp @@ -295,6 +295,9 @@ LPELattice2::vertical(PointParam ¶mA, PointParam ¶mB, Geom::Line vert){ 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); @@ -312,6 +315,9 @@ LPELattice2::horizontal(PointParam ¶mA, PointParam ¶mB, Geom::Line horiz 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); @@ -323,8 +329,8 @@ LPELattice2::doBeforeEffect (SPLPEItem const* lpeitem) { original_bbox(lpeitem); setDefaults(); - Geom::Line vert(grid_point8x9,grid_point10x11); - Geom::Line horiz(grid_point24x26,grid_point25x27); + 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); diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp index 30e59a2bd..aece8fb79 100644 --- a/src/live_effects/parameter/point.cpp +++ b/src/live_effects/parameter/point.cpp @@ -47,6 +47,11 @@ PointParam::param_set_default() param_setValue(defvalue,true); } +Geom::Point +PointParam::param_get_default() const{ + return defvalue; +} + void PointParam::param_update_default(Geom::Point newpoint) { diff --git a/src/live_effects/parameter/point.h b/src/live_effects/parameter/point.h index 346e79bdd..32433713a 100644 --- a/src/live_effects/parameter/point.h +++ b/src/live_effects/parameter/point.h @@ -38,9 +38,9 @@ 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, bool write = false); void param_set_default(); + Geom::Point param_get_default() const; void param_update_default(Geom::Point newpoint); virtual void param_transform_multiply(Geom::Affine const& /*postmul*/, bool /*set*/); |
