diff options
| author | Liam P. White <inkscapebrony@gmail.com> | 2014-10-16 22:05:08 +0000 |
|---|---|---|
| committer | Liam P. White <inkscapebrony@gmail.com> | 2014-10-16 22:05:08 +0000 |
| commit | c006641818185435dcb6b98c49fdae2fa561d762 (patch) | |
| tree | be6a0d977713ea8f33e18811e236e27f068942df /src | |
| parent | Update to bspline branch, now helper path fixed and optional (diff) | |
| download | inkscape-c006641818185435dcb6b98c49fdae2fa561d762.tar.gz inkscape-c006641818185435dcb6b98c49fdae2fa561d762.zip | |
Fix previous revision.
revid:jtx@jtx.marker.es-20141016153516-eng0y49ppsk2vt5b
13617 Jabiertxof2014-10-16
Change LPE from envelope-perspective to perspective-envelope
For me is easy to use/find with this new name.
Also fix a rounding error on envelope at small sizes
(bzr r13341.1.276)
Diffstat (limited to 'src')
| -rw-r--r-- | src/live_effects/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | src/live_effects/Makefile_insert | 6 | ||||
| -rw-r--r-- | src/live_effects/effect-enum.h | 2 | ||||
| -rw-r--r-- | src/live_effects/effect.cpp | 8 | ||||
| -rw-r--r-- | src/live_effects/lpe-perspective-envelope.cpp (renamed from src/live_effects/lpe-envelope-perspective.cpp) | 132 | ||||
| -rw-r--r-- | src/live_effects/lpe-perspective-envelope.h (renamed from src/live_effects/lpe-envelope-perspective.h) | 26 |
6 files changed, 58 insertions, 121 deletions
diff --git a/src/live_effects/CMakeLists.txt b/src/live_effects/CMakeLists.txt index 30c2b2f41..c8a02c810 100644 --- a/src/live_effects/CMakeLists.txt +++ b/src/live_effects/CMakeLists.txt @@ -15,7 +15,6 @@ set(live_effects_SRC lpe-dynastroke.cpp lpe-ellipse-5pts.cpp lpe-envelope.cpp - lpe-envelope-perspective.cpp lpe-extrude.cpp lpe-fill-between-many.cpp lpe-fill-between-strokes.cpp @@ -32,6 +31,7 @@ set(live_effects_SRC lpe-patternalongpath.cpp lpe-perp_bisector.cpp lpe-perspective_path.cpp + lpe-perspective-envelope.cpp lpe-powerstroke.cpp lpe-recursiveskeleton.cpp lpe-rough-hatches.cpp @@ -47,7 +47,6 @@ set(live_effects_SRC lpe-bspline.cpp lpe-text_label.cpp lpe-vonkoch.cpp - lpe-envelope-perspective.cpp lpegroupbbox.cpp lpeobject-reference.cpp lpeobject.cpp @@ -106,6 +105,7 @@ set(live_effects_SRC lpe-patternalongpath.h lpe-perp_bisector.h lpe-perspective_path.h + lpe-perspective-envelope.h lpe-powerstroke.h lpe-powerstroke-interpolators.h lpe-recursiveskeleton.h @@ -122,7 +122,6 @@ set(live_effects_SRC lpe-bspline.h lpe-text_label.h lpe-vonkoch.h - lpe-envelope-perspective.h lpegroupbbox.h lpeobject-reference.h lpeobject.h diff --git a/src/live_effects/Makefile_insert b/src/live_effects/Makefile_insert index f18dcdef0..8f0a3ac57 100644 --- a/src/live_effects/Makefile_insert +++ b/src/live_effects/Makefile_insert @@ -70,6 +70,8 @@ ink_common_sources += \ live_effects/lpe-circle_with_radius.h \ live_effects/lpe-perspective_path.cpp \ live_effects/lpe-perspective_path.h \ + live_effects/lpe-perspective-envelope.cpp \ + live_effects/lpe-perspective-envelope.h \ live_effects/lpe-mirror_symmetry.cpp \ live_effects/lpe-mirror_symmetry.h \ live_effects/lpe-circle_3pts.cpp \ @@ -112,6 +114,4 @@ ink_common_sources += \ live_effects/lpe-jointype.cpp \ live_effects/lpe-jointype.h \ live_effects/lpe-taperstroke.cpp \ - live_effects/lpe-taperstroke.h \ - live_effects/lpe-envelope-perspective.cpp \ - live_effects/lpe-envelope-perspective.h + live_effects/lpe-taperstroke.h diff --git a/src/live_effects/effect-enum.h b/src/live_effects/effect-enum.h index c53f1a5b9..383eec19e 100644 --- a/src/live_effects/effect-enum.h +++ b/src/live_effects/effect-enum.h @@ -63,7 +63,7 @@ enum EffectType { BOUNDING_BOX, JOIN_TYPE, TAPER_STROKE, - ENVELOPE_PERSPECTIVE, + PERSPECTIVE_ENVELOPE, FILLET_CHAMFER, INVALID_LPE // This must be last (I made it such that it is not needed anymore I think..., Don't trust on it being last. - johan) }; diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp index 0885ad6f0..1a64defd9 100644 --- a/src/live_effects/effect.cpp +++ b/src/live_effects/effect.cpp @@ -25,6 +25,7 @@ #include "live_effects/lpe-curvestitch.h" #include "live_effects/lpe-circle_with_radius.h" #include "live_effects/lpe-perspective_path.h" +#include "live_effects/lpe-perspective-envelope.h" #include "live_effects/lpe-spiro.h" #include "live_effects/lpe-lattice.h" #include "live_effects/lpe-lattice2.h" @@ -60,7 +61,6 @@ #include "live_effects/lpe-bounding-box.h" #include "live_effects/lpe-jointype.h" #include "live_effects/lpe-taperstroke.h" -#include "live_effects/lpe-envelope-perspective.h" #include "live_effects/lpe-fillet-chamfer.h" #include "xml/node-event-vector.h" @@ -152,7 +152,7 @@ const Util::EnumData<EffectType> LPETypeData[] = { /* 0.91 */ {SIMPLIFY, N_("Simplify"), "simplify"}, {LATTICE2, N_("Lattice Deformation 2"), "lattice2"}, - {ENVELOPE_PERSPECTIVE, N_("Envelope-Perspective"), "envelope-perspective"}, + {PERSPECTIVE_ENVELOPE, N_("Perspective/Envelope"), "perspective-envelope"}, {FILLET_CHAMFER, N_("Fillet/Chamfer"), "fillet-chamfer"}, {INTERPOLATE_POINTS, N_("Interpolate points"), "interpolate_points"}, }; @@ -311,8 +311,8 @@ Effect::New(EffectType lpenr, LivePathEffectObject *lpeobj) case LATTICE2: neweffect = static_cast<Effect*> ( new LPELattice2(lpeobj) ); break; - case ENVELOPE_PERSPECTIVE: - neweffect = static_cast<Effect*> ( new LPEEnvelopePerspective(lpeobj) ); + case PERSPECTIVE_ENVELOPE: + neweffect = static_cast<Effect*> ( new LPEPerspectiveEnvelope(lpeobj) ); break; case FILLET_CHAMFER: neweffect = static_cast<Effect*> ( new LPEFilletChamfer(lpeobj) ); diff --git a/src/live_effects/lpe-envelope-perspective.cpp b/src/live_effects/lpe-perspective-envelope.cpp index c62dbbf6a..249269b6f 100644 --- a/src/live_effects/lpe-envelope-perspective.cpp +++ b/src/live_effects/lpe-perspective-envelope.cpp @@ -1,5 +1,5 @@ /** \file - * LPE <envelope-perspective> implementation + * LPE <perspective-envelope> implementation */ /* @@ -15,7 +15,7 @@ */ #include <gtkmm.h> -#include "live_effects/lpe-envelope-perspective.h" +#include "live_effects/lpe-perspective-envelope.h" #include "helper/geom.h" #include "display/curve.h" #include "svg/svg.h" @@ -29,21 +29,21 @@ namespace Inkscape { namespace LivePathEffect { enum DeformationType { - DEFORMATION_ENVELOPE, - DEFORMATION_PERSPECTIVE + DEFORMATION_PERSPECTIVE, + DEFORMATION_ENVELOPE }; static const Util::EnumData<unsigned> DeformationTypeData[] = { - {DEFORMATION_ENVELOPE , N_("Envelope deformation"), "Envelope deformation"}, - {DEFORMATION_PERSPECTIVE , N_("Perspective"), "Perspective"} + {DEFORMATION_PERSPECTIVE , N_("Perspective"), "Perspective"}, + {DEFORMATION_ENVELOPE , N_("Envelope deformation"), "Envelope deformation"} }; static const Util::EnumDataConverter<unsigned> DeformationTypeConverter(DeformationTypeData, sizeof(DeformationTypeData)/sizeof(*DeformationTypeData)); -LPEEnvelopePerspective::LPEEnvelopePerspective(LivePathEffectObject *lpeobject) : +LPEPerspectiveEnvelope::LPEPerspectiveEnvelope(LivePathEffectObject *lpeobject) : Effect(lpeobject), // initialise your parameters here: - deform_type(_("Type"), _("Select the type of deformation"), "deform_type", DeformationTypeConverter, &wr, this, DEFORMATION_ENVELOPE), + deform_type(_("Type"), _("Select the type of deformation"), "deform_type", DeformationTypeConverter, &wr, this, DEFORMATION_PERSPECTIVE), Up_Left_Point(_("Top Left"), _("Top Left - Ctrl+Alt+Click to reset"), "Up_Left_Point", &wr, this), Up_Right_Point(_("Top Right"), _("Top Right - Ctrl+Alt+Click to reset"), "Up_Right_Point", &wr, this), Down_Left_Point(_("Down Left"), _("Down Left - Ctrl+Alt+Click to reset"), "Down_Left_Point", &wr, this), @@ -57,11 +57,11 @@ LPEEnvelopePerspective::LPEEnvelopePerspective(LivePathEffectObject *lpeobject) registerParameter( dynamic_cast<Parameter *>(&Down_Right_Point) ); } -LPEEnvelopePerspective::~LPEEnvelopePerspective() +LPEPerspectiveEnvelope::~LPEPerspectiveEnvelope() { } -void LPEEnvelopePerspective::doEffect(SPCurve *curve) { +void LPEPerspectiveEnvelope::doEffect(SPCurve *curve) { using Geom::X; using Geom::Y; double projmatrix[3][3]; @@ -135,32 +135,23 @@ void LPEEnvelopePerspective::doEffect(SPCurve *curve) { continue; //Itreadores SPCurve *nCurve = new SPCurve(); - Geom::Path::const_iterator curve_it1 = path_it->begin(); // incoming curve - Geom::Path::const_iterator curve_it2 = - ++(path_it->begin()); // outgoing curve - Geom::Path::const_iterator curve_endit = - path_it->end_default(); // this determines when the loop has to stop + Geom::Path::const_iterator curve_it1 = path_it->begin(); + Geom::Path::const_iterator curve_it2 = ++(path_it->begin()); + Geom::Path::const_iterator curve_endit = path_it->end_default(); if (path_it->closed()) { - // if the path is closed, maybe we have to stop a bit earlier because the - // closing line segment has zerolength. - const Geom::Curve &closingline = - path_it->back_closed(); // the closing line segment is always of type - // Geom::LineSegment. - if (are_near(closingline.initialPoint(), closingline.finalPoint())) { - // closingline.isDegenerate() did not work, because it only checks for - // *exact* zero length, which goes wrong for relative coordinates and - // rounding errors... - // the closing line segment has zero-length. So stop before that one! - curve_endit = path_it->end_open(); - } + const Geom::Curve &closingline = + path_it->back_closed(); + if (are_near(closingline.initialPoint(), closingline.finalPoint())) { + curve_endit = path_it->end_open(); + } } if(deform_type == DEFORMATION_PERSPECTIVE){ nCurve->moveto(project_point(curve_it1->initialPoint(),projmatrix)); }else{ nCurve->moveto(project_point(curve_it1->initialPoint())); } - while (curve_it2 != curve_endit) { + while (curve_it1 != curve_endit) { cubic = dynamic_cast<Geom::CubicBezier const *>(&*curve_it1); if (cubic) { pointAt1 = (*cubic)[1]; @@ -181,34 +172,13 @@ void LPEEnvelopePerspective::doEffect(SPCurve *curve) { } nCurve->curveto(pointAt1, pointAt2, pointAt3); ++curve_it1; - ++curve_it2; - } - cubic = dynamic_cast<Geom::CubicBezier const *>(&*curve_it1); - if (cubic) { - pointAt1 = (*cubic)[1]; - pointAt2 = (*cubic)[2]; - } else { - pointAt1 = curve_it1->initialPoint(); - pointAt2 = curve_it1->finalPoint(); - } - pointAt3 = curve_it1->finalPoint(); - if(deform_type == DEFORMATION_PERSPECTIVE){ - pointAt1 = project_point(pointAt1,projmatrix); - pointAt2 = project_point(pointAt2,projmatrix); - pointAt3 = project_point(pointAt3,projmatrix); - }else{ - pointAt1 = project_point(pointAt1); - pointAt2 = project_point(pointAt2); - pointAt3 = project_point(pointAt3); - } - nCurve->curveto(pointAt1, pointAt2, pointAt3); - if(deform_type == DEFORMATION_PERSPECTIVE){ - nCurve->move_endpoints(project_point(path_it->begin()->initialPoint(),projmatrix), pointAt3); - }else{ - nCurve->move_endpoints(project_point(path_it->begin()->initialPoint()), pointAt3); + if(curve_it2 != curve_endit) { + ++curve_it2; + } } //y cerramos la curva if (path_it->closed()) { + nCurve->move_endpoints(pointAt3, pointAt3); nCurve->closepath_current(); } curve->append(nCurve, false); @@ -218,11 +188,13 @@ void LPEEnvelopePerspective::doEffect(SPCurve *curve) { } Geom::Point -LPEEnvelopePerspective::project_point(Geom::Point p){ +LPEPerspectiveEnvelope::project_point(Geom::Point p){ double width = boundingbox_X.extent(); double height = boundingbox_Y.extent(); - Geom::Coord xratio = abs(Geom::Point(boundingbox_X.min(), boundingbox_Y.max())[X]-p[X])/width; - Geom::Coord yratio = abs(Geom::Point(boundingbox_X.min(), boundingbox_Y.max())[Y]-p[Y])/height; + double delta_x = boundingbox_X.min() - p[X]; + double delta_y = boundingbox_Y.max() - p[Y]; + Geom::Coord xratio = (delta_x * sgn(delta_x)) / width; + Geom::Coord yratio = (delta_y * sgn(delta_y)) / height; Geom::Line* horiz = new Geom::Line(); Geom::Line* vert = new Geom::Line(); vert->setPoints (pointAtRatio(yratio,Down_Left_Point,Up_Left_Point),pointAtRatio(yratio,Down_Right_Point,Up_Right_Point)); @@ -237,7 +209,7 @@ LPEEnvelopePerspective::project_point(Geom::Point p){ } Geom::Point -LPEEnvelopePerspective::project_point(Geom::Point p, double m[][3]){ +LPEPerspectiveEnvelope::project_point(Geom::Point p, double m[][3]){ Geom::Coord x = p[0]; Geom::Coord y = p[1]; return Geom::Point( @@ -246,7 +218,7 @@ LPEEnvelopePerspective::project_point(Geom::Point p, double m[][3]){ } Geom::Point -LPEEnvelopePerspective::pointAtRatio(Geom::Coord ratio,Geom::Point A, Geom::Point B){ +LPEPerspectiveEnvelope::pointAtRatio(Geom::Coord ratio,Geom::Point A, Geom::Point B){ Geom::Coord x = A[X] + (ratio * (B[X]-A[X])); Geom::Coord y = A[Y]+ (ratio * (B[Y]-A[Y])); return Point(x, y); @@ -254,7 +226,7 @@ LPEEnvelopePerspective::pointAtRatio(Geom::Coord ratio,Geom::Point A, Geom::Poin Gtk::Widget * -LPEEnvelopePerspective::newWidget() +LPEPerspectiveEnvelope::newWidget() { // use manage here, because after deletion of Effect object, others might still be pointing to this widget. Gtk::VBox * vbox = Gtk::manage( new Gtk::VBox(Effect::newWidget()) ); @@ -285,20 +257,12 @@ LPEEnvelopePerspective::newWidget() Gtk::Label* handles = Gtk::manage(new Gtk::Label(Glib::ustring(_("Handles:")),Gtk::ALIGN_START)); vbox->pack_start(*handles, false, false, 2); hboxUpHandles->pack_start(*widg, true, true, 2); -#if WITH_GTKMM_3_0 - hboxUpHandles->pack_start(*Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_VERTICAL)), Gtk::PACK_EXPAND_WIDGET); -#else hboxUpHandles->pack_start(*Gtk::manage(new Gtk::VSeparator()), Gtk::PACK_EXPAND_WIDGET); -#endif }else if(param->param_key == "Up_Right_Point"){ hboxUpHandles->pack_start(*widg, true, true, 2); }else if(param->param_key == "Down_Left_Point"){ hboxDownHandles->pack_start(*widg, true, true, 2); -#if WITH_GTKMM_3_0 - hboxDownHandles->pack_start(*Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_VERTICAL)), Gtk::PACK_EXPAND_WIDGET); -#else hboxDownHandles->pack_start(*Gtk::manage(new Gtk::VSeparator()), Gtk::PACK_EXPAND_WIDGET); -#endif }else{ hboxDownHandles->pack_start(*widg, true, true, 2); } @@ -327,18 +291,13 @@ LPEEnvelopePerspective::newWidget() } vbox->pack_start(*hboxUpHandles,true, true, 2); Gtk::HBox * hboxMiddle = Gtk::manage(new Gtk::HBox(true,2)); -#if WITH_GTKMM_3_0 - hboxMiddle->pack_start(*Gtk::manage(new Gtk::Separator()), Gtk::PACK_EXPAND_WIDGET); - hboxMiddle->pack_start(*Gtk::manage(new Gtk::Separator()), Gtk::PACK_EXPAND_WIDGET); -#else hboxMiddle->pack_start(*Gtk::manage(new Gtk::HSeparator()), Gtk::PACK_EXPAND_WIDGET); hboxMiddle->pack_start(*Gtk::manage(new Gtk::HSeparator()), Gtk::PACK_EXPAND_WIDGET); -#endif vbox->pack_start(*hboxMiddle, false, true, 2); vbox->pack_start(*hboxDownHandles, true, true, 2); Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false,0)); Gtk::Button* resetButton = Gtk::manage(new Gtk::Button(Gtk::Stock::CLEAR)); - resetButton->signal_clicked().connect(sigc::mem_fun (*this,&LPEEnvelopePerspective::resetGrid)); + resetButton->signal_clicked().connect(sigc::mem_fun (*this,&LPEPerspectiveEnvelope::resetGrid)); resetButton->set_size_request(140,45); vbox->pack_start(*hbox, true,true,2); hbox->pack_start(*resetButton, false, false,2); @@ -346,17 +305,14 @@ LPEEnvelopePerspective::newWidget() } void -LPEEnvelopePerspective::doBeforeEffect (SPLPEItem const* lpeitem) +LPEPerspectiveEnvelope::doBeforeEffect (SPLPEItem const* lpeitem) { original_bbox(lpeitem); setDefaults(); - SPLPEItem * item = const_cast<SPLPEItem*>(lpeitem); - item->apply_to_clippath(item); - item->apply_to_mask(item); } void -LPEEnvelopePerspective::setDefaults() +LPEPerspectiveEnvelope::setDefaults() { Geom::Point Up_Left(boundingbox_X.min(), boundingbox_Y.min()); Geom::Point Up_Right(boundingbox_X.max(), boundingbox_Y.min()); @@ -370,7 +326,7 @@ LPEEnvelopePerspective::setDefaults() } void -LPEEnvelopePerspective::resetGrid() +LPEPerspectiveEnvelope::resetGrid() { Up_Left_Point.param_set_and_write_default(); Up_Right_Point.param_set_and_write_default(); @@ -384,7 +340,7 @@ LPEEnvelopePerspective::resetGrid() } void -LPEEnvelopePerspective::resetDefaults(SPItem const* item) +LPEPerspectiveEnvelope::resetDefaults(SPItem const* item) { Effect::resetDefaults(item); original_bbox(SP_LPE_ITEM(item)); @@ -393,19 +349,7 @@ LPEEnvelopePerspective::resetDefaults(SPItem const* item) } void -LPEEnvelopePerspective::calculateCurve(Geom::Point a,Geom::Point b, SPCurve* c, bool horizontal, bool move) -{ - using Geom::X; - using Geom::Y; - if(move) c->moveto(a); - Geom::Point cubic1 = a + (1./3)* (b - a); - Geom::Point cubic2 = b + (1./3)* (a - b); - if(horizontal) c->curveto(Geom::Point(cubic1[X],a[Y]),Geom::Point(cubic2[X],b[Y]),b); - else c->curveto(Geom::Point(a[X],cubic1[Y]),Geom::Point(b[X],cubic2[Y]),b); -} - -void -LPEEnvelopePerspective::addCanvasIndicators(SPLPEItem const */*lpeitem*/, std::vector<Geom::PathVector> &hp_vec) +LPEPerspectiveEnvelope::addCanvasIndicators(SPLPEItem const */*lpeitem*/, std::vector<Geom::PathVector> &hp_vec) { hp_vec.clear(); @@ -437,4 +381,4 @@ LPEEnvelopePerspective::addCanvasIndicators(SPLPEItem const */*lpeitem*/, std::v fill-column:99 End: */ -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : +// vim: file_type=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : diff --git a/src/live_effects/lpe-envelope-perspective.h b/src/live_effects/lpe-perspective-envelope.h index 0de9a0e35..2f253882e 100644 --- a/src/live_effects/lpe-envelope-perspective.h +++ b/src/live_effects/lpe-perspective-envelope.h @@ -1,8 +1,8 @@ -#ifndef INKSCAPE_LPE_ENVELOPE_PERSPECTIVE_H -#define INKSCAPE_LPE_ENVELOPE_PERSPECTIVE_H +#ifndef INKSCAPE_LPE_PERSPECTIVE_ENVELOPE_H +#define INKSCAPE_LPE_PERSPECTIVE_ENVELOPE_H /** \file - * LPE <envelope-perspective> implementation , see lpe-envelope-perspective.cpp. + * LPE <perspective-envelope> implementation , see lpe-perspective-envelope.cpp. */ /* @@ -25,11 +25,12 @@ namespace Inkscape { namespace LivePathEffect { -class LPEEnvelopePerspective : public Effect, GroupBBoxEffect { +class LPEPerspectiveEnvelope : public Effect, GroupBBoxEffect { public: - LPEEnvelopePerspective(LivePathEffectObject *lpeobject); - virtual ~LPEEnvelopePerspective(); + LPEPerspectiveEnvelope(LivePathEffectObject *lpeobject); + + virtual ~LPEPerspectiveEnvelope(); virtual void doEffect(SPCurve *curve); @@ -37,7 +38,7 @@ public: virtual Geom::Point project_point(Geom::Point p, double m[][3]); - Geom::Point pointAtRatio(Geom::Coord ratio,Geom::Point A, Geom::Point B); + virtual Geom::Point pointAtRatio(Geom::Coord ratio,Geom::Point A, Geom::Point B); virtual void resetDefaults(SPItem const* item); @@ -45,17 +46,10 @@ public: virtual Gtk::Widget * newWidget(); - virtual void calculateCurve(Geom::Point a,Geom::Point b, SPCurve *c, bool horizontal, bool move); - virtual void setDefaults(); virtual void resetGrid(); - //virtual void original_bbox(SPLPEItem const* lpeitem, bool absolute = false); - - //virtual void addCanvasIndicators(SPLPEItem const*/*lpeitem*/, std::vector<Geom::PathVector> &/*hp_vec*/); - - //virtual std::vector<Geom::PathVector> getHelperPaths(SPLPEItem const* lpeitem); protected: void addCanvasIndicators(SPLPEItem const */*lpeitem*/, std::vector<Geom::PathVector> &hp_vec); private: @@ -66,8 +60,8 @@ private: PointReseteableParam Down_Left_Point; PointReseteableParam Down_Right_Point; - LPEEnvelopePerspective(const LPEEnvelopePerspective&); - LPEEnvelopePerspective& operator=(const LPEEnvelopePerspective&); + LPEPerspectiveEnvelope(const LPEPerspectiveEnvelope&); + LPEPerspectiveEnvelope& operator=(const LPEPerspectiveEnvelope&); }; } //namespace LivePathEffect |
