X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Flive_effects%2Flpe-tangent_to_curve.cpp;h=b43fd8b36788a43210b65e13692a0d0392657628;hb=62dad53172661dfa1ef8dd3ed07e06d2ea2523a4;hp=b46b602c3bbdc15e953e6d6cf42c652d8f053450;hpb=928b4b73759121ceb2a0cc430a8059708b36be99;p=inkscape.git diff --git a/src/live_effects/lpe-tangent_to_curve.cpp b/src/live_effects/lpe-tangent_to_curve.cpp index b46b602c3..b43fd8b36 100644 --- a/src/live_effects/lpe-tangent_to_curve.cpp +++ b/src/live_effects/lpe-tangent_to_curve.cpp @@ -19,7 +19,6 @@ // There must be a more convenient way to achieve this. #include "sp-path.h" #include "display/curve.h" -#include "libnr/n-art-bpath-2geom.h" #include <2geom/path.h> #include <2geom/transforms.h> @@ -29,31 +28,25 @@ namespace LivePathEffect { namespace TtC { -class KnotHolderEntityAttachPt : public KnotHolderEntity +class KnotHolderEntityAttachPt : public LPEKnotHolderEntity { public: - virtual bool isLPEParam() { return true; } - - virtual void knot_set(NR::Point const &p, NR::Point const &origin, guint state); - virtual NR::Point knot_get(); + virtual void knot_set(Geom::Point const &p, Geom::Point const &origin, guint state); + virtual Geom::Point knot_get(); }; -class KnotHolderEntityLeftEnd : public KnotHolderEntity +class KnotHolderEntityLeftEnd : public LPEKnotHolderEntity { public: - virtual bool isLPEParam() { return true; } - - virtual void knot_set(NR::Point const &p, NR::Point const &origin, guint state); - virtual NR::Point knot_get(); + virtual void knot_set(Geom::Point const &p, Geom::Point const &origin, guint state); + virtual Geom::Point knot_get(); }; -class KnotHolderEntityRightEnd : public KnotHolderEntity +class KnotHolderEntityRightEnd : public LPEKnotHolderEntity { public: - virtual bool isLPEParam() { return true; } - - virtual void knot_set(NR::Point const &p, NR::Point const &origin, guint state); - virtual NR::Point knot_get(); + virtual void knot_set(Geom::Point const &p, Geom::Point const &origin, guint state); + virtual Geom::Point knot_get(); }; } // namespace TtC @@ -65,14 +58,16 @@ LPETangentToCurve::LPETangentToCurve(LivePathEffectObject *lpeobject) : length_left(_("Length left"), _("Specifies the left end of the tangent"), "length-left", &wr, this, 150), length_right(_("Length right"), _("Specifies the right end of the tangent"), "length-right", &wr, this, 150) { + show_orig_path = true; + registerParameter( dynamic_cast(&angle) ); registerParameter( dynamic_cast(&t_attach) ); registerParameter( dynamic_cast(&length_left) ); registerParameter( dynamic_cast(&length_right) ); - registerKnotHolderHandle(new TtC::KnotHolderEntityAttachPt(), _("Adjust the \"left\" end of the tangent")); - registerKnotHolderHandle(new TtC::KnotHolderEntityLeftEnd(), _("Adjust the \"right\" end of the tangent")); - registerKnotHolderHandle(new TtC::KnotHolderEntityRightEnd(), _("Adjust the point of attachment of the tangent")); + registerKnotHolderHandle(new TtC::KnotHolderEntityAttachPt(), _("Adjust the point of attachment of the tangent")); + registerKnotHolderHandle(new TtC::KnotHolderEntityLeftEnd(), _("Adjust the \"left\" end of the tangent")); + registerKnotHolderHandle(new TtC::KnotHolderEntityRightEnd(), _("Adjust the \"right\" end of the tangent")); } LPETangentToCurve::~LPETangentToCurve() @@ -115,11 +110,13 @@ get_effect(SPItem *item) } void -KnotHolderEntityAttachPt::knot_set(NR::Point const &p, NR::Point const &origin, guint state) +KnotHolderEntityAttachPt::knot_set(Geom::Point const &p, Geom::Point const &/*origin*/, guint /*state*/) { - using namespace Geom; - - LPETangentToCurve* lpe = get_effect(item); + using namespace Geom; + + LPETangentToCurve* lpe = get_effect(item); + + Geom::Point const s = snap_knot_position(p); // FIXME: There must be a better way of converting the path's SPCurve* to pwd2. SPCurve *curve = sp_path_get_curve_for_edit (SP_PATH(item)); @@ -129,7 +126,7 @@ KnotHolderEntityAttachPt::knot_set(NR::Point const &p, NR::Point const &origin, pwd2.concat(pathv[i].toPwSb()); } - double t0 = nearest_point(p.to_2geom(), pwd2); + double t0 = nearest_point(s, pwd2); lpe->t_attach.param_set_value(t0); // FIXME: this should not directly ask for updating the item. It should write to SVG, which triggers updating. @@ -137,42 +134,46 @@ KnotHolderEntityAttachPt::knot_set(NR::Point const &p, NR::Point const &origin, } void -KnotHolderEntityLeftEnd::knot_set(NR::Point const &p, NR::Point const &origin, guint state) +KnotHolderEntityLeftEnd::knot_set(Geom::Point const &p, Geom::Point const &/*origin*/, guint /*state*/) { LPETangentToCurve *lpe = get_effect(item); - - double lambda = Geom::nearest_point(p.to_2geom(), lpe->ptA, lpe->derivA); + + Geom::Point const s = snap_knot_position(p); + + double lambda = Geom::nearest_point(s, lpe->ptA, lpe->derivA); lpe->length_left.param_set_value(-lambda); - sp_lpe_item_update_patheffect (SP_LPE_ITEM(item), false, true); + sp_lpe_item_update_patheffect (SP_LPE_ITEM(item), false, true); } void -KnotHolderEntityRightEnd::knot_set(NR::Point const &p, NR::Point const &origin, guint state) +KnotHolderEntityRightEnd::knot_set(Geom::Point const &p, Geom::Point const &/*origin*/, guint /*state*/) { LPETangentToCurve *lpe = get_effect(item); - double lambda = Geom::nearest_point(p.to_2geom(), lpe->ptA, lpe->derivA); + Geom::Point const s = snap_knot_position(p); + + double lambda = Geom::nearest_point(s, lpe->ptA, lpe->derivA); lpe->length_right.param_set_value(lambda); - sp_lpe_item_update_patheffect (SP_LPE_ITEM(item), false, true); + sp_lpe_item_update_patheffect (SP_LPE_ITEM(item), false, true); } -NR::Point +Geom::Point KnotHolderEntityAttachPt::knot_get() { LPETangentToCurve* lpe = get_effect(item); return lpe->ptA; } -NR::Point +Geom::Point KnotHolderEntityLeftEnd::knot_get() { LPETangentToCurve *lpe = get_effect(item); return lpe->C; } -NR::Point +Geom::Point KnotHolderEntityRightEnd::knot_get() { LPETangentToCurve *lpe = get_effect(item);