diff options
| author | Jabier Arraiza Cenoz <jabier.arraiza@marker.es> | 2015-03-10 23:57:47 +0000 |
|---|---|---|
| committer | Jabiertxof <jtx@jtx.marker.es> | 2015-03-10 23:57:47 +0000 |
| commit | 7240de5809d66a6f14e578d37396bfaa97ee8f08 (patch) | |
| tree | 9de68b3965db4f4741275ab64892db58c7e60b98 /src | |
| parent | Fix a bug whith previous commit (diff) | |
| download | inkscape-7240de5809d66a6f14e578d37396bfaa97ee8f08.tar.gz inkscape-7240de5809d66a6f14e578d37396bfaa97ee8f08.zip | |
Final cleanup to point parameter, lattice2 and perspective envelope. Also added to lattice 2 a symmetry options
(bzr r13989)
Diffstat (limited to 'src')
| -rw-r--r-- | src/live_effects/lpe-lattice2.cpp | 65 | ||||
| -rw-r--r-- | src/live_effects/lpe-lattice2.h | 6 | ||||
| -rw-r--r-- | src/live_effects/lpe-perspective-envelope.cpp | 1 | ||||
| -rw-r--r-- | src/live_effects/parameter/point.cpp | 9 | ||||
| -rw-r--r-- | src/live_effects/parameter/point.h | 1 |
5 files changed, 74 insertions, 8 deletions
diff --git a/src/live_effects/lpe-lattice2.cpp b/src/live_effects/lpe-lattice2.cpp index 00c39f816..cc8c92c4e 100644 --- a/src/live_effects/lpe-lattice2.cpp +++ b/src/live_effects/lpe-lattice2.cpp @@ -40,6 +40,8 @@ namespace LivePathEffect { LPELattice2::LPELattice2(LivePathEffectObject *lpeobject) : Effect(lpeobject), + horizontalMirror(_("Mirror movements in horizontal"), _("Mirror movements in horizontal"), "horizontalMirror", &wr, this, false), + verticalMirror(_("Mirror movements in vertical"), _("Mirror movements in vertical"), "verticalMirror", &wr, this, false), grid_point0(_("Control handle 0:"), _("Control handle 0 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint0", &wr, this), grid_point1(_("Control handle 1:"), _("Control handle 1 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint1", &wr, this), grid_point2(_("Control handle 2:"), _("Control handle 2 - <b>Ctrl+Alt+Click</b>: reset, <b>Ctrl</b>: move along axes"), "gridpoint2", &wr, this), @@ -69,6 +71,8 @@ LPELattice2::LPELattice2(LivePathEffectObject *lpeobject) : { // register all your parameters here, so Inkscape knows which parameters this effect has: + registerParameter(&horizontalMirror); + registerParameter(&verticalMirror); registerParameter(&grid_point0); registerParameter(&grid_point1); registerParameter(&grid_point2); @@ -248,9 +252,69 @@ LPELattice2::newWidget() } void +LPELattice2::vertical(PointParam ¶mA, PointParam ¶mB, Geom::Line vert){ + Geom::Point A = paramA; + Geom::Point B = paramB; + double Y = (A[Geom::Y] + B[Geom::Y])/2; + A[Geom::Y] = Y; + B[Geom::Y] = Y; + Geom::Point nearest = vert.pointAt(vert.nearestPoint(A)); + double distA = Geom::distance(A,nearest); + double distB = Geom::distance(B,nearest); + double distanceMed = (distA + distB)/2; + A[Geom::X] = nearest[Geom::X] - distanceMed; + B[Geom::X] = nearest[Geom::X] + distanceMed; + paramA.param_set_and_write_new_value(A); + paramB.param_set_and_write_new_value(B); +} + +void +LPELattice2::horizontal(PointParam ¶mA, PointParam ¶mB, Geom::Line horiz){ + Geom::Point A = paramA; + Geom::Point B = paramB; + double X = (A[Geom::X] + B[Geom::X])/2; + A[Geom::X] = X; + B[Geom::X] = X; + Geom::Point nearest = horiz.pointAt(horiz.nearestPoint(A)); + double distA = Geom::distance(A,nearest); + double distB = Geom::distance(B,nearest); + double distanceMed = (distA + distB)/2; + A[Geom::Y] = nearest[Geom::Y] - distanceMed; + B[Geom::Y] = nearest[Geom::Y] + distanceMed; + paramA.param_set_and_write_new_value(A); + paramB.param_set_and_write_new_value(B); +} + +void LPELattice2::doBeforeEffect (SPLPEItem const* lpeitem) { original_bbox(lpeitem); + Geom::Line vert(grid_point8x9,grid_point10x11); + Geom::Line horiz(grid_point24x26,grid_point25x27); + if(verticalMirror){ + vertical(grid_point0, grid_point1,vert); + vertical(grid_point2, grid_point3,vert); + vertical(grid_point4, grid_point5,vert); + vertical(grid_point6, grid_point7,vert); + vertical(grid_point12, grid_point13,vert); + vertical(grid_point14, grid_point15,vert); + vertical(grid_point16, grid_point17,vert); + vertical(grid_point18, grid_point19,vert); + vertical(grid_point24x26, grid_point25x27,vert); + vertical(grid_point28x30, grid_point29x31,vert); + } + if(horizontalMirror){ + horizontal(grid_point0, grid_point2,horiz); + horizontal(grid_point1, grid_point3,horiz); + horizontal(grid_point4, grid_point6,horiz); + horizontal(grid_point5, grid_point7,horiz); + horizontal(grid_point8x9, grid_point10x11,horiz); + horizontal(grid_point12, grid_point14,horiz); + horizontal(grid_point13, grid_point15,horiz); + horizontal(grid_point16, grid_point18,horiz); + horizontal(grid_point17, grid_point19,horiz); + horizontal(grid_point20x21, grid_point22x23,horiz); + } setDefaults(); SPLPEItem * item = const_cast<SPLPEItem*>(lpeitem); item->apply_to_clippath(item); @@ -392,6 +456,7 @@ LPELattice2::resetGrid() grid_point32x33x34x35.param_set_and_write_default(); //todo:this hack is only to reposition the knots on reser grid button //Better update path effect in LPEITEM + sp_lpe_item_update_patheffect(sp_lpe_item, false, false); } void diff --git a/src/live_effects/lpe-lattice2.h b/src/live_effects/lpe-lattice2.h index 5084ceead..b73687831 100644 --- a/src/live_effects/lpe-lattice2.h +++ b/src/live_effects/lpe-lattice2.h @@ -43,6 +43,10 @@ public: virtual void calculateCurve(Geom::Point a,Geom::Point b, SPCurve *c, bool horizontal, bool move); + virtual void vertical(PointParam ¶mA,PointParam ¶mB, Geom::Line vert); + + virtual void horizontal(PointParam ¶mA,PointParam ¶mB,Geom::Line horiz); + virtual void setDefaults(); virtual void resetGrid(); @@ -56,6 +60,8 @@ protected: void addCanvasIndicators(SPLPEItem const */*lpeitem*/, std::vector<Geom::PathVector> &hp_vec); private: + BoolParam horizontalMirror; + BoolParam verticalMirror; PointParam grid_point0; PointParam grid_point1; PointParam grid_point2; diff --git a/src/live_effects/lpe-perspective-envelope.cpp b/src/live_effects/lpe-perspective-envelope.cpp index 74c870498..77d487c2a 100644 --- a/src/live_effects/lpe-perspective-envelope.cpp +++ b/src/live_effects/lpe-perspective-envelope.cpp @@ -334,6 +334,7 @@ LPEPerspectiveEnvelope::resetGrid() Up_Right_Point.param_set_and_write_default(); Down_Right_Point.param_set_and_write_default(); Down_Left_Point.param_set_and_write_default(); + sp_lpe_item_update_patheffect(sp_lpe_item, false, false); } void diff --git a/src/live_effects/parameter/point.cpp b/src/live_effects/parameter/point.cpp index 1fda97b0d..8cb9a58a8 100644 --- a/src/live_effects/parameter/point.cpp +++ b/src/live_effects/parameter/point.cpp @@ -30,8 +30,7 @@ PointParam::PointParam( const Glib::ustring& label, const Glib::ustring& tip, Effect* effect, const gchar *htip, Geom::Point default_value) : Geom::Point(default_value), Parameter(label, tip, key, wr, effect), - defvalue(default_value), - lpeitem( NULL) + defvalue(default_value) { knot_shape = SP_KNOT_SHAPE_DIAMOND; knot_mode = SP_KNOT_MODE_XOR; @@ -119,16 +118,13 @@ PointParam::param_setValue(Geom::Point newpoint) } void -PointParam::param_set_and_write_new_value (Geom::Point newpoint) +PointParam::param_set_and_write_new_value(Geom::Point newpoint) { Inkscape::SVGOStringStream os; os << newpoint; gchar * str = g_strdup(os.str().c_str()); param_write_to_repr(str); g_free(str); - if(lpeitem){ - sp_lpe_item_update_patheffect(lpeitem, false, false); - } } void @@ -198,7 +194,6 @@ PointParamKnotHolderEntity::knot_click(guint state) void PointParam::addKnotHolderEntities(KnotHolder *knotholder, SPDesktop *desktop, SPItem *item) { - lpeitem = dynamic_cast<SPLPEItem*>(item); PointParamKnotHolderEntity *e = new PointParamKnotHolderEntity(this); // TODO: can we ditch handleTip() etc. because we have access to handle_tip etc. itself??? e->create(desktop, item, knotholder, Inkscape::CTRL_TYPE_UNKNOWN, handleTip(), knot_shape, knot_mode, knot_color); diff --git a/src/live_effects/parameter/point.h b/src/live_effects/parameter/point.h index 99eb86e96..c4dc096d8 100644 --- a/src/live_effects/parameter/point.h +++ b/src/live_effects/parameter/point.h @@ -59,7 +59,6 @@ private: PointParam& operator=(const PointParam&); Geom::Point defvalue; - SPLPEItem * lpeitem; SPKnotShapeType knot_shape; SPKnotModeType knot_mode; guint32 knot_color; |
