summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/helper/geom.cpp3
-rw-r--r--src/live_effects/lpe-lattice2.cpp10
-rw-r--r--src/live_effects/parameter/point.cpp5
-rw-r--r--src/live_effects/parameter/point.h2
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 &paramA, PointParam &paramB, 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 &paramA, PointParam &paramB, 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*/);