summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2016-07-27 22:55:05 +0000
committerjabiertxof <info@marker.es>2016-07-27 22:55:05 +0000
commitbc46160cc69e4597d94ae6dd0c70428341a4d4f2 (patch)
tree68323572a3a0a999a5a8efec9cfa50591da257f6 /src
parentPre linked path (diff)
downloadinkscape-bc46160cc69e4597d94ae6dd0c70428341a4d4f2.tar.gz
inkscape-bc46160cc69e4597d94ae6dd0c70428341a4d4f2.zip
Add optional linked path
(bzr r15017.1.8)
Diffstat (limited to 'src')
-rw-r--r--src/live_effects/lpe-measure-line.cpp58
-rw-r--r--src/live_effects/lpe-measure-line.h8
2 files changed, 57 insertions, 9 deletions
diff --git a/src/live_effects/lpe-measure-line.cpp b/src/live_effects/lpe-measure-line.cpp
index 3d5cd8591..638d60464 100644
--- a/src/live_effects/lpe-measure-line.cpp
+++ b/src/live_effects/lpe-measure-line.cpp
@@ -14,6 +14,7 @@
#include "util/units.h"
#include "svg/svg-length.h"
#include "svg/svg-color.h"
+#include "svg/svg.h"
#include "display/curve.h"
#include <2geom/affine.h>
#include "style.h"
@@ -34,10 +35,13 @@ namespace LivePathEffect {
LPEMeasureLine::LPEMeasureLine(LivePathEffectObject *lpeobject) :
Effect(lpeobject),
fontselector(_("Font Selector:"), _("Font Selector"), "fontselector", &wr, this, " "),
+ origin(_("Optional Origin:"), _("Optional origin"), "origin", &wr, this),
+ curve_linked(_("Curve on optional origin:"), _("Curve on optional origin, set 0 to start/end"), "curve_linked", &wr, this, 1),
+ line_offset(_("Optional origin offset"), _("Optional origin offset"), "line_offset", &wr, this, 5),
scale(_("Scale:"), _("Scaling factor"), "scale", &wr, this, 1.0),
precision(_("Number precision"), _("Number precision"), "precision", &wr, this, 2),
offset_right_left(_("Offset right left"), _("Offset right left"), "offset_right_left", &wr, this, 0),
- offset_top_bottom(_("Offset top bottom"), _("Offset top bottom"), "offset_top_bottom", &wr, this, 10),
+ offset_top_bottom(_("Offset top bottom"), _("Offset top bottom"), "offset_top_bottom", &wr, this, 5),
gap_start(_("Gap to line from origin"), _("Gap to line from origin, without affecting measure"), "gap_start", &wr, this, 0),
gap_end(_("Gap to line from end"), _("Gap to line from end, without affecting measure"), "gap_end", &wr, this, 0),
unit(_("Unit:"), _("Unit"), "unit", &wr, this),
@@ -48,6 +52,9 @@ LPEMeasureLine::LPEMeasureLine(LivePathEffectObject *lpeobject) :
angle(0)
{
registerParameter(&fontselector);
+ registerParameter(&origin);
+ registerParameter(&curve_linked);
+ registerParameter(&line_offset);
registerParameter(&scale);
registerParameter(&precision);
registerParameter(&offset_right_left);
@@ -63,9 +70,8 @@ LPEMeasureLine::LPEMeasureLine(LivePathEffectObject *lpeobject) :
scale.param_update_default(prefs->getDouble("/live_effects/measure-line/scale", 1.0));
precision.param_update_default(prefs->getInt("/live_effects/measure-line/precision", 2));
offset_right_left.param_update_default(prefs->getDouble("/live_effects/measure-line/offset_right_left", 0.0));
- offset_top_bottom.param_update_default(prefs->getDouble("/live_effects/measure-line/offset_top_bottom", 10.0));
- gap_start.param_update_default(prefs->getDouble("/live_effects/measure-line/gap_start", 0.0));
- gap_end.param_update_default(prefs->getDouble("/live_effects/measure-line/gap_end", 0.0));
+ offset_top_bottom.param_update_default(prefs->getDouble("/live_effects/measure-line/offset_top_bottom", 5.0));
+ line_offset.param_update_default(prefs->getDouble("/live_effects/measure-line/line_offset", 5.0));
unit.param_update_default(prefs->getString("/live_effects/measure-line/unit"));
reverse.param_update_default(prefs->getBool("/live_effects/measure-line/reverse"));
color_as_line.param_update_default(prefs->getBool("/live_effects/measure-line/color_as_line"));
@@ -75,12 +81,20 @@ LPEMeasureLine::LPEMeasureLine(LivePathEffectObject *lpeobject) :
precision.param_set_increments(1, 1);
precision.param_set_digits(0);
precision.param_make_integer(true);
+ curve_linked.param_set_range(1, 999);
+ curve_linked.param_set_increments(1, 1);
+ curve_linked.param_set_digits(0);
+ curve_linked.param_make_integer(true);
+ precision.param_make_integer(true);
offset_right_left.param_set_range(-999999.0, 999999.0);
offset_right_left.param_set_increments(1, 1);
offset_right_left.param_set_digits(2);
offset_top_bottom.param_set_range(-999999.0, 999999.0);
offset_top_bottom.param_set_increments(1, 1);
offset_top_bottom.param_set_digits(2);
+ line_offset.param_set_range(-999999.0, 999999.0);
+ line_offset.param_set_increments(1, 1);
+ line_offset.param_set_digits(2);
gap_start.param_set_range(-999999.0, 999999.0);
gap_start.param_set_increments(1, 1);
gap_start.param_set_digits(2);
@@ -110,9 +124,39 @@ LPEMeasureLine::doBeforeEffect (SPLPEItem const* lpeitem)
if (sp_path) {
Geom::PathVector pathvector = sp_path->get_original_curve()->get_pathvector();
if (SPDesktop *desktop = SP_ACTIVE_DESKTOP) {
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Geom::Point s = pathvector.initialPoint();
Geom::Point e = pathvector.finalPoint();
- length = Geom::distance(path_in.initialPoint(), path_in.finalPoint()) * scale;
+ if (origin.linksToPath() && origin.getObject() && !origin.get_pathvector().empty()) {
+ pathvector = origin.get_pathvector();
+ size_t ncurves = pathvector.curveCount();
+ curve_linked.param_set_range(1, ncurves);
+ if(previous_ncurves != ncurves) {
+ this->upd_params = true;
+ previous_ncurves = ncurves;
+ }
+ s = pathvector.pointAt(curve_linked -1);
+ e = pathvector.pointAt(curve_linked);
+ Geom::Ray ray(s,e);
+ angle = ray.angle();
+ if (reverse) {
+ angle = std::fmod(angle + rad_from_deg(180), 2*M_PI);
+ if (angle < 0) angle += 2*M_PI;
+ }
+ Geom::Coord angle_cross = std::fmod(angle + rad_from_deg(90), 2*M_PI);
+ if (angle_cross < 0) angle_cross += 2*M_PI;
+ s = s - Point::polar(angle_cross, line_offset);
+ e = e - Point::polar(angle_cross, line_offset);
+ Geom::Path path;
+ path.start( s );
+ path.appendNew<Geom::LineSegment>( e );
+ Geom::PathVector line_upd;
+ line_upd.push_back(path);
+ Inkscape::XML::Node *line = SP_OBJECT(sp_path)->getRepr();
+ gchar *str = sp_svg_write_path(line_upd);
+ line->setAttribute("inkscape:original-d", str);
+ }
+ length = Geom::distance(s, e) * scale;
pos = Geom::middle_point(s,e);
Geom::Ray ray(s,e);
angle = ray.angle();
@@ -125,7 +169,6 @@ LPEMeasureLine::doBeforeEffect (SPLPEItem const* lpeitem)
Geom::Coord angle_cross = std::fmod(angle + rad_from_deg(90), 2*M_PI);
if (angle_cross < 0) angle_cross += 2*M_PI;
newpos = newpos - Point::polar(angle_cross, offset_top_bottom);
- Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::URI SVGElem_uri(((Glib::ustring)"#" + (Glib::ustring)SP_OBJECT(lpeitem)->getId() + (Glib::ustring)"_mlsize").c_str());
Inkscape::URIReference* SVGElemRef = new Inkscape::URIReference(desktop->doc());
SVGElemRef->attach(SVGElem_uri);
@@ -313,8 +356,7 @@ LPEMeasureLine::saveDefault()
prefs->setInt("/live_effects/measure-line/precision", precision);
prefs->setDouble("/live_effects/measure-line/offset_right_left", offset_right_left);
prefs->setDouble("/live_effects/measure-line/offset_top_bottom", offset_top_bottom);
- prefs->setDouble("/live_effects/measure-line/gap_start", gap_start);
- prefs->setDouble("/live_effects/measure-line/gap_end", gap_end);
+ prefs->setDouble("/live_effects/measure-line/line_offset", line_offset);
prefs->setString("/live_effects/measure-line/unit", (Glib::ustring)unit.get_abbreviation());
prefs->setInt("/live_effects/measure-line/reverse", reverse);
prefs->setInt("/live_effects/measure-line/color_as_line", color_as_line);
diff --git a/src/live_effects/lpe-measure-line.h b/src/live_effects/lpe-measure-line.h
index ba24aa404..b03a44705 100644
--- a/src/live_effects/lpe-measure-line.h
+++ b/src/live_effects/lpe-measure-line.h
@@ -9,11 +9,13 @@
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#include "live_effects/parameter/font.h"
+
#include "live_effects/effect.h"
+#include "live_effects/parameter/font.h"
#include "live_effects/parameter/text.h"
#include "live_effects/parameter/unit.h"
#include "live_effects/parameter/bool.h"
+#include "live_effects/parameter/originalpath.h"
#include <libnrtype/font-lister.h>
#include <2geom/angle.h>
#include <2geom/ray.h>
@@ -41,12 +43,16 @@ private:
Inkscape::XML::Node *rtext;
Geom::Point pos;
Geom::Coord angle;
+ OriginalPathParam origin;
+ ScalarParam curve_linked;
+ ScalarParam line_offset;
ScalarParam scale;
ScalarParam precision;
ScalarParam offset_right_left;
ScalarParam offset_top_bottom;
ScalarParam gap_start;
ScalarParam gap_end;
+ size_t previous_ncurves;
UnitParam unit;
BoolParam reverse;
BoolParam color_as_line;