From c776c7f3860f657ea9db62d62e9da98df09b0c70 Mon Sep 17 00:00:00 2001 From: johanengelen Date: Thu, 7 Aug 2008 17:45:53 +0000 Subject: [PATCH] try to make LPE optimizations easier. example in LPE Bend --- src/live_effects/lpe-bendpath.cpp | 13 +++++++++---- src/live_effects/lpe-bendpath.h | 3 +++ src/live_effects/parameter/path.cpp | 16 ++++++++++++---- src/live_effects/parameter/path.h | 4 ++++ 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/live_effects/lpe-bendpath.cpp b/src/live_effects/lpe-bendpath.cpp index 47d029d60..fb305130d 100644 --- a/src/live_effects/lpe-bendpath.cpp +++ b/src/live_effects/lpe-bendpath.cpp @@ -83,14 +83,19 @@ LPEBendPath::doBeforeEffect (SPLPEItem *lpeitem) Geom::Piecewise > LPEBendPath::doEffect_pwd2 (Geom::Piecewise > const & pwd2_in) { +g_message("doEffect_pwd2"); using namespace Geom; /* Much credit should go to jfb and mgsloan of lib2geom development for the code below! */ - Piecewise > uskeleton = arc_length_parametrization(Piecewise >(bend_path.get_pwd2()),2,.1); - uskeleton = remove_short_cuts(uskeleton,.01); - Piecewise > n = rot90(derivative(uskeleton)); - n = force_continuity(remove_short_cuts(n,.1)); + if (bend_path.changed) { + uskeleton = arc_length_parametrization(Piecewise >(bend_path.get_pwd2()),2,.1); + uskeleton = remove_short_cuts(uskeleton,.01); + n = rot90(derivative(uskeleton)); + n = force_continuity(remove_short_cuts(n,.1)); + + bend_path.changed = false; + } D2 > patternd2 = make_cuts_independent(pwd2_in); Piecewise x = vertical_pattern.get_value() ? Piecewise(patternd2[1]) : Piecewise(patternd2[0]); diff --git a/src/live_effects/lpe-bendpath.h b/src/live_effects/lpe-bendpath.h index 1d3a9861e..20871bc0f 100644 --- a/src/live_effects/lpe-bendpath.h +++ b/src/live_effects/lpe-bendpath.h @@ -47,6 +47,9 @@ private: BoolParam scale_y_rel; BoolParam vertical_pattern; + Geom::Piecewise > uskeleton; + Geom::Piecewise > n; + void on_pattern_pasted(); LPEBendPath(const LPEBendPath&); diff --git a/src/live_effects/parameter/path.cpp b/src/live_effects/parameter/path.cpp index 68cb5cd63..84aadff3c 100644 --- a/src/live_effects/parameter/path.cpp +++ b/src/live_effects/parameter/path.cpp @@ -49,6 +49,7 @@ PathParam::PathParam( const Glib::ustring& label, const Glib::ustring& tip, const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr, Effect* effect, const gchar * default_value) : Parameter(label, tip, key, wr, effect), + changed(true), _pathvector(), _pwd2(), must_recalculate_pwd2(false), @@ -119,7 +120,7 @@ PathParam::param_readSVGValue(const gchar * strvalue) _pathvector = sp_svg_read_pathv(strvalue); } - signal_path_changed.emit(); + emit_changed(); return true; } @@ -254,7 +255,7 @@ PathParam::set_new_value (Geom::Piecewise > const & newpa } else { _pwd2 = newpath; must_recalculate_pwd2 = false; - signal_path_changed.emit(); + emit_changed(); } } @@ -282,7 +283,7 @@ PathParam::set_new_value (std::vector const &newpath, bool write_to_ param_write_to_repr(svgd); g_free(svgd); } else { - signal_path_changed.emit(); + emit_changed(); } } @@ -299,6 +300,13 @@ PathParam::ensure_pwd2() } } +void +PathParam::emit_changed() +{ + changed = true; + signal_path_changed.emit(); +} + void PathParam::start_listening(SPObject * to) { @@ -364,7 +372,7 @@ PathParam::linked_modified(SPObject *linked_obj, guint /*flags*/) } must_recalculate_pwd2 = true; - signal_path_changed.emit(); + emit_changed(); SP_OBJECT(param_effect->getLPEObj())->requestModified(SP_OBJECT_MODIFIED_FLAG); } diff --git a/src/live_effects/parameter/path.h b/src/live_effects/parameter/path.h index 76f3fa774..23ad51417 100644 --- a/src/live_effects/parameter/path.h +++ b/src/live_effects/parameter/path.h @@ -53,6 +53,8 @@ public: sigc::signal signal_path_pasted; sigc::signal signal_path_changed; + bool changed; /* this gets set whenever the path is changed (this is set to true, and then the signal_path_changed signal is emitted). + * the user must set it back to false if she wants to use it sensibly */ void paste_param_path(const char *svgd); void on_paste_button_click(); @@ -80,6 +82,8 @@ protected: void on_copy_button_click(); void on_link_button_click(); + void emit_changed(); + gchar * defvalue; private: -- 2.30.2