From cb5459b491ac95d917af397237841a3790229580 Mon Sep 17 00:00:00 2001 From: cilix42 Date: Mon, 2 Jun 2008 09:21:26 +0000 Subject: [PATCH] set eol-style:native for recently added files --- src/live_effects/lpe-tangent_to_curve.cpp | 340 +++++++++++----------- 1 file changed, 170 insertions(+), 170 deletions(-) diff --git a/src/live_effects/lpe-tangent_to_curve.cpp b/src/live_effects/lpe-tangent_to_curve.cpp index 6293ba233..80158e2f4 100644 --- a/src/live_effects/lpe-tangent_to_curve.cpp +++ b/src/live_effects/lpe-tangent_to_curve.cpp @@ -1,170 +1,170 @@ -#define INKSCAPE_LPE_TANGENT_TO_CURVE_CPP -/** \file - * Implementation of tangent-to-curve LPE. - */ - -/* - * Authors: - * Johan Engelen - * Maximilian Albert - * - * Copyright (C) Johan Engelen 2007 - * Copyright (C) Maximilian Albert 2008 - * - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -#include "live_effects/lpe-tangent_to_curve.h" -// FIXME: The following are only needed to convert the path's SPCurve* to pwd2. -// 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> - -namespace Inkscape { -namespace LivePathEffect { - -/* FIXME: We should make these member functions of LPETangentToCurve. - Is there an easy way to register member functions with knotholder? - KNOWN BUG: Because of the above, this effect does not work well when in an LPE stack -*/ -NR::Point attach_pt_get(SPItem *item) { - Inkscape::LivePathEffect::LPETangentToCurve *lpe = - dynamic_cast (sp_lpe_item_get_current_lpe(SP_LPE_ITEM(item))); - - if (lpe) - return lpe->ptA; - else - return NR::Point(0,0); -} - -void attach_pt_set(SPItem *item, NR::Point const &p, NR::Point const &origin, guint state) { - Inkscape::LivePathEffect::LPETangentToCurve *lpe = - dynamic_cast (sp_lpe_item_get_current_lpe(SP_LPE_ITEM(item))); - - if (!lpe) - return; - - using namespace Geom; - - // 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)); - const NArtBpath *bpath = curve->get_bpath(); - Piecewise > pwd2; - std::vector pathv = BPath_to_2GeomPath(bpath); - for (unsigned int i=0; i < pathv.size(); i++) { - pwd2.concat(pathv[i].toPwSb()); - } - - double t0 = nearest_point(p.to_2geom(), 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. - sp_lpe_item_update_patheffect (SP_LPE_ITEM(item), true, true); -} - -NR::Point left_end_get(SPItem *item) { - Inkscape::LivePathEffect::LPETangentToCurve *lpe = - dynamic_cast (sp_lpe_item_get_current_lpe(SP_LPE_ITEM(item))); - - if (lpe) - return lpe->C; - else - return NR::Point(0,0); -} - -NR::Point right_end_get(SPItem *item) { - Inkscape::LivePathEffect::LPETangentToCurve *lpe = - dynamic_cast (sp_lpe_item_get_current_lpe(SP_LPE_ITEM(item))); - - if (lpe) - return lpe->D; - else - return NR::Point(0,0); -} - -void left_end_set(SPItem *item, NR::Point const &p, NR::Point const &origin, guint state) { - Inkscape::LivePathEffect::LPETangentToCurve *lpe = - dynamic_cast (sp_lpe_item_get_current_lpe(SP_LPE_ITEM(item))); - - if (!lpe) - return; - - double lambda = Geom::nearest_point(p.to_2geom(), lpe->ptA, lpe->derivA); - lpe->length_left.param_set_value(-lambda); - - // FIXME: this should not directly ask for updating the item. It should write to SVG, which triggers updating. - sp_lpe_item_update_patheffect (SP_LPE_ITEM(item), true, true); -} - -void right_end_set(SPItem *item, NR::Point const &p, NR::Point const &origin, guint state) { - Inkscape::LivePathEffect::LPETangentToCurve *lpe = - dynamic_cast (sp_lpe_item_get_current_lpe(SP_LPE_ITEM(item))); - - if (!lpe) - return; - - double lambda = Geom::nearest_point(p.to_2geom(), lpe->ptA, lpe->derivA); - lpe->length_right.param_set_value(lambda); - - // FIXME: this should not directly ask for updating the item. It should write to SVG, which triggers updating. - sp_lpe_item_update_patheffect (SP_LPE_ITEM(item), true, true); -} - -LPETangentToCurve::LPETangentToCurve(LivePathEffectObject *lpeobject) : - Effect(lpeobject), - t_attach(_("Location along curve"), _("Location of the point of attachment along the curve (between 0.0 and number-of-segments)"), "t_attach", &wr, this, 0.5), - 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), - angle(_("Angle"), _("Additional angle between tangent and curve"), "angle", &wr, this, 0.0) -{ - registerParameter( dynamic_cast(&t_attach) ); - registerParameter( dynamic_cast(&length_left) ); - registerParameter( dynamic_cast(&length_right) ); - registerParameter( dynamic_cast(&angle) ); - registerKnotHolderHandle(attach_pt_set, attach_pt_get); - registerKnotHolderHandle(left_end_set, left_end_get); - registerKnotHolderHandle(right_end_set, right_end_get); -} - -LPETangentToCurve::~LPETangentToCurve() -{ -} - -Geom::Piecewise > -LPETangentToCurve::doEffect_pwd2 (Geom::Piecewise > const & pwd2_in) -{ - using namespace Geom; - Piecewise > output; - - ptA = pwd2_in.valueAt(t_attach); - derivA = unit_vector(derivative(pwd2_in).valueAt(t_attach)); - - // TODO: Why are positive angles measured clockwise, not counterclockwise? - Geom::Rotate rot(Geom::Rotate::from_degrees(-angle)); - derivA = derivA * rot; - - C = ptA - derivA * length_left; - D = ptA + derivA * length_right; - - output = Piecewise >(D2(Linear(C[X], D[X]), Linear(C[Y], D[Y]))); - - return output; -} - -} //namespace LivePathEffect -} /* namespace Inkscape */ - -/* - Local Variables: - mode:c++ - c-file-style:"stroustrup" - c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) - indent-tabs-mode:nil - fill-column:99 - End: -*/ -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : +#define INKSCAPE_LPE_TANGENT_TO_CURVE_CPP +/** \file + * Implementation of tangent-to-curve LPE. + */ + +/* + * Authors: + * Johan Engelen + * Maximilian Albert + * + * Copyright (C) Johan Engelen 2007 + * Copyright (C) Maximilian Albert 2008 + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include "live_effects/lpe-tangent_to_curve.h" +// FIXME: The following are only needed to convert the path's SPCurve* to pwd2. +// 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> + +namespace Inkscape { +namespace LivePathEffect { + +/* FIXME: We should make these member functions of LPETangentToCurve. + Is there an easy way to register member functions with knotholder? + KNOWN BUG: Because of the above, this effect does not work well when in an LPE stack +*/ +NR::Point attach_pt_get(SPItem *item) { + Inkscape::LivePathEffect::LPETangentToCurve *lpe = + dynamic_cast (sp_lpe_item_get_current_lpe(SP_LPE_ITEM(item))); + + if (lpe) + return lpe->ptA; + else + return NR::Point(0,0); +} + +void attach_pt_set(SPItem *item, NR::Point const &p, NR::Point const &origin, guint state) { + Inkscape::LivePathEffect::LPETangentToCurve *lpe = + dynamic_cast (sp_lpe_item_get_current_lpe(SP_LPE_ITEM(item))); + + if (!lpe) + return; + + using namespace Geom; + + // 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)); + const NArtBpath *bpath = curve->get_bpath(); + Piecewise > pwd2; + std::vector pathv = BPath_to_2GeomPath(bpath); + for (unsigned int i=0; i < pathv.size(); i++) { + pwd2.concat(pathv[i].toPwSb()); + } + + double t0 = nearest_point(p.to_2geom(), 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. + sp_lpe_item_update_patheffect (SP_LPE_ITEM(item), true, true); +} + +NR::Point left_end_get(SPItem *item) { + Inkscape::LivePathEffect::LPETangentToCurve *lpe = + dynamic_cast (sp_lpe_item_get_current_lpe(SP_LPE_ITEM(item))); + + if (lpe) + return lpe->C; + else + return NR::Point(0,0); +} + +NR::Point right_end_get(SPItem *item) { + Inkscape::LivePathEffect::LPETangentToCurve *lpe = + dynamic_cast (sp_lpe_item_get_current_lpe(SP_LPE_ITEM(item))); + + if (lpe) + return lpe->D; + else + return NR::Point(0,0); +} + +void left_end_set(SPItem *item, NR::Point const &p, NR::Point const &origin, guint state) { + Inkscape::LivePathEffect::LPETangentToCurve *lpe = + dynamic_cast (sp_lpe_item_get_current_lpe(SP_LPE_ITEM(item))); + + if (!lpe) + return; + + double lambda = Geom::nearest_point(p.to_2geom(), lpe->ptA, lpe->derivA); + lpe->length_left.param_set_value(-lambda); + + // FIXME: this should not directly ask for updating the item. It should write to SVG, which triggers updating. + sp_lpe_item_update_patheffect (SP_LPE_ITEM(item), true, true); +} + +void right_end_set(SPItem *item, NR::Point const &p, NR::Point const &origin, guint state) { + Inkscape::LivePathEffect::LPETangentToCurve *lpe = + dynamic_cast (sp_lpe_item_get_current_lpe(SP_LPE_ITEM(item))); + + if (!lpe) + return; + + double lambda = Geom::nearest_point(p.to_2geom(), lpe->ptA, lpe->derivA); + lpe->length_right.param_set_value(lambda); + + // FIXME: this should not directly ask for updating the item. It should write to SVG, which triggers updating. + sp_lpe_item_update_patheffect (SP_LPE_ITEM(item), true, true); +} + +LPETangentToCurve::LPETangentToCurve(LivePathEffectObject *lpeobject) : + Effect(lpeobject), + t_attach(_("Location along curve"), _("Location of the point of attachment along the curve (between 0.0 and number-of-segments)"), "t_attach", &wr, this, 0.5), + 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), + angle(_("Angle"), _("Additional angle between tangent and curve"), "angle", &wr, this, 0.0) +{ + registerParameter( dynamic_cast(&t_attach) ); + registerParameter( dynamic_cast(&length_left) ); + registerParameter( dynamic_cast(&length_right) ); + registerParameter( dynamic_cast(&angle) ); + registerKnotHolderHandle(attach_pt_set, attach_pt_get); + registerKnotHolderHandle(left_end_set, left_end_get); + registerKnotHolderHandle(right_end_set, right_end_get); +} + +LPETangentToCurve::~LPETangentToCurve() +{ +} + +Geom::Piecewise > +LPETangentToCurve::doEffect_pwd2 (Geom::Piecewise > const & pwd2_in) +{ + using namespace Geom; + Piecewise > output; + + ptA = pwd2_in.valueAt(t_attach); + derivA = unit_vector(derivative(pwd2_in).valueAt(t_attach)); + + // TODO: Why are positive angles measured clockwise, not counterclockwise? + Geom::Rotate rot(Geom::Rotate::from_degrees(-angle)); + derivA = derivA * rot; + + C = ptA - derivA * length_left; + D = ptA + derivA * length_right; + + output = Piecewise >(D2(Linear(C[X], D[X]), Linear(C[Y], D[Y]))); + + return output; +} + +} //namespace LivePathEffect +} /* namespace Inkscape */ + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : -- 2.30.2