// SPDX-License-Identifier: GPL-2.0-or-later #ifndef INKSCAPE_LPE_PERP_BISECTOR_H #define INKSCAPE_LPE_PERP_BISECTOR_H /** \file * LPE implementation, see lpe-perp_bisector.cpp. */ /* * Authors: * Maximilian Albert * Johan Engelen * * Copyright (C) Johan Engelen 2007 * Copyright (C) Maximilin Albert 2008 * * Released under GNU GPL v2+, read the file 'COPYING' for more information. */ #include "live_effects/effect.h" #include "live_effects/parameter/parameter.h" #include "live_effects/parameter/point.h" namespace Inkscape { namespace LivePathEffect { namespace PB { // we need a separate namespace to avoid clashes with LPETangentToCurve class KnotHolderEntityEnd; class KnotHolderEntityLeftEnd; class KnotHolderEntityRightEnd; void bisector_end_set(SPItem *item, Geom::Point const &p, guint state, bool left = true); } class LPEPerpBisector : public Effect { public: LPEPerpBisector(LivePathEffectObject *lpeobject); ~LPEPerpBisector() override; virtual EffectType effectType () { return PERP_BISECTOR; } void doOnApply (SPLPEItem const* lpeitem) override; Geom::Piecewise > doEffect_pwd2 (Geom::Piecewise > const & pwd2_in) override; /* the knotholder entity functions must be declared friends */ friend class PB::KnotHolderEntityEnd; friend class PB::KnotHolderEntityLeftEnd; friend class PB::KnotHolderEntityRightEnd; friend void PB::bisector_end_set(SPItem *item, Geom::Point const &p, guint state, bool left); void addKnotHolderEntities(KnotHolder *knotholder, SPDesktop *desktop, SPItem *item); private: ScalarParam length_left; ScalarParam length_right; Geom::Point A; // start of path Geom::Point B; // end of path Geom::Point M; // midpoint Geom::Point C; // left end of bisector Geom::Point D; // right end of bisector Geom::Point perp_dir; LPEPerpBisector(const LPEPerpBisector&) = delete; LPEPerpBisector& operator=(const LPEPerpBisector&) = delete; }; } //namespace LivePathEffect } //namespace Inkscape #endif