summaryrefslogtreecommitdiffstats
path: root/src/live_effects
diff options
context:
space:
mode:
authorJabiertxo Arraiza Cenoz <jtx@jtx-desktop.markerlab.es>2017-10-09 18:33:01 +0000
committerJabiertxo Arraiza Cenoz <jtx@jtx-desktop.markerlab.es>2017-10-09 18:33:01 +0000
commitf318dbfe434769ab62b4f9d2971de89f1ebffc71 (patch)
treeb8a71ce927ac97ff2cd320809e7f0978213316f9 /src/live_effects
parentCircle3pts LPE: handle overlapping points (diff)
downloadinkscape-f318dbfe434769ab62b4f9d2971de89f1ebffc71.tar.gz
inkscape-f318dbfe434769ab62b4f9d2971de89f1ebffc71.zip
Fixes for transforms in LPE shapes
Diffstat (limited to 'src/live_effects')
-rw-r--r--src/live_effects/lpe-measure-segments.cpp21
-rw-r--r--src/live_effects/lpe-measure-segments.h3
2 files changed, 19 insertions, 5 deletions
diff --git a/src/live_effects/lpe-measure-segments.cpp b/src/live_effects/lpe-measure-segments.cpp
index b929f5154..738990bc0 100644
--- a/src/live_effects/lpe-measure-segments.cpp
+++ b/src/live_effects/lpe-measure-segments.cpp
@@ -31,6 +31,8 @@
#include "sp-item.h"
#include "sp-shape.h"
#include "sp-path.h"
+#include "sp-star.h"
+#include "sp-spiral.h"
#include "document.h"
#include "document-undo.h"
#include <iomanip>
@@ -136,6 +138,7 @@ LPEMeasureSegments::LPEMeasureSegments(LivePathEffectObject *lpeobject) :
helpline_overlap.param_set_range(-999999.0, 999999.0);
helpline_overlap.param_set_increments(1, 1);
helpline_overlap.param_set_digits(2);
+ star_ellipse_fix = Geom::identity();
}
LPEMeasureSegments::~LPEMeasureSegments() {}
@@ -566,7 +569,7 @@ void
LPEMeasureSegments::doBeforeEffect (SPLPEItem const* lpeitem)
{
SPLPEItem * splpeitem = const_cast<SPLPEItem *>(lpeitem);
- sp_lpe_item->parent = dynamic_cast<SPObject *>(splpeitem->parent);
+
SPDocument * document = SP_ACTIVE_DOCUMENT;
if (!document) {
return;
@@ -589,12 +592,17 @@ LPEMeasureSegments::doBeforeEffect (SPLPEItem const* lpeitem)
}
Geom::Point start_stored;
Geom::Point end_stored;
- Geom::Affine affinetransform = i2anc_affine(SP_OBJECT(lpeitem), SP_OBJECT(document->getRoot()));
+ Geom::Affine affinetransform = i2anc_affine(SP_OBJECT(lpeitem->parent), SP_OBJECT(document->getRoot()));
Geom::PathVector pathvector = pathv_to_linear_and_cubic_beziers(c->get_pathvector());
c->unref();
Geom::Affine writed_transform = Geom::identity();
sp_svg_transform_read(splpeitem->getAttribute("transform"), &writed_transform );
- pathvector *= writed_transform;
+ if (star_ellipse_fix != Geom::identity()) {
+ pathvector *= star_ellipse_fix;
+ star_ellipse_fix = Geom::identity();
+ } else {
+ pathvector *= writed_transform;
+ }
if ((Glib::ustring(format.param_getSVGValue()).empty())) {
format.param_setValue(Glib::ustring("{measure}{unit}"));
}
@@ -819,7 +827,12 @@ LPEMeasureSegments::doOnRemove (SPLPEItem const* /*lpeitem*/)
void
LPEMeasureSegments::transform_multiply(Geom::Affine const& postmul, bool set)
{
- sp_lpe_item_update_patheffect(sp_lpe_item, false, false);
+ SPStar * star = dynamic_cast<SPStar *>(sp_lpe_item);
+ SPSpiral * spiral = dynamic_cast<SPSpiral *>(sp_lpe_item);
+ if((spiral || star) && !postmul.withoutTranslation().isUniformScale()) {
+ star_ellipse_fix = postmul;
+ sp_lpe_item_update_patheffect(sp_lpe_item, false, false);
+ }
}
Geom::PathVector
diff --git a/src/live_effects/lpe-measure-segments.h b/src/live_effects/lpe-measure-segments.h
index 0b4ed5ef7..3b14fb191 100644
--- a/src/live_effects/lpe-measure-segments.h
+++ b/src/live_effects/lpe-measure-segments.h
@@ -44,7 +44,7 @@ public:
virtual void doOnRemove (SPLPEItem const* /*lpeitem*/);
virtual void doEffect (SPCurve * curve){}; //stop the chain
virtual void doOnVisibilityToggled(SPLPEItem const* /*lpeitem*/);
- virtual void transform_multiply(Geom::Affine const& postmul, bool set);
+ virtual void transform_multiply(Geom::Affine const& postmul, bool set);
virtual Geom::PathVector doEffect_path(Geom::PathVector const &path_in);
void createLine(Geom::Point start,Geom::Point end, const char * id, bool main, bool remove, bool arrows = false);
void createTextLabel(Geom::Point pos, size_t counter, double length, Geom::Coord angle, bool remove, bool valid);
@@ -79,6 +79,7 @@ private:
double anotation_width;
double previous_size;
double arrow_gap;
+ Geom::Affine star_ellipse_fix;
LPEMeasureSegments(const LPEMeasureSegments &);
LPEMeasureSegments &operator=(const LPEMeasureSegments &);