diff options
| author | Jabiertxo Arraiza Cenoz <jtx@jtx-desktop.markerlab.es> | 2017-10-09 18:33:01 +0000 |
|---|---|---|
| committer | Jabiertxo Arraiza Cenoz <jtx@jtx-desktop.markerlab.es> | 2017-10-09 18:33:01 +0000 |
| commit | f318dbfe434769ab62b4f9d2971de89f1ebffc71 (patch) | |
| tree | b8a71ce927ac97ff2cd320809e7f0978213316f9 /src/live_effects | |
| parent | Circle3pts LPE: handle overlapping points (diff) | |
| download | inkscape-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.cpp | 21 | ||||
| -rw-r--r-- | src/live_effects/lpe-measure-segments.h | 3 |
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 &); |
