summaryrefslogtreecommitdiffstats
path: root/src/live_effects/lpe-bendpath.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/live_effects/lpe-bendpath.cpp')
-rw-r--r--src/live_effects/lpe-bendpath.cpp47
1 files changed, 31 insertions, 16 deletions
diff --git a/src/live_effects/lpe-bendpath.cpp b/src/live_effects/lpe-bendpath.cpp
index ff5f738eb..dcbf5efd0 100644
--- a/src/live_effects/lpe-bendpath.cpp
+++ b/src/live_effects/lpe-bendpath.cpp
@@ -9,6 +9,7 @@
#include "sp-item-group.h"
#include "knot-holder-entity.h"
#include "knotholder.h"
+#include "display/curve.h"
// TODO due to internal breakage in glibmm headers, this must be last:
#include <glibmm/i18n.h>
@@ -39,7 +40,6 @@ first) but I think we can first forget about them.
namespace Inkscape {
namespace LivePathEffect {
-Geom::PathVector bp_helper_path;
namespace BeP {
class KnotHolderEntityWidthBendPath : public LPEKnotHolderEntity {
public:
@@ -55,16 +55,19 @@ LPEBendPath::LPEBendPath(LivePathEffectObject *lpeobject) :
original_height(0.0),
prop_scale(_("_Width:"), _("Width of the path"), "prop_scale", &wr, this, 1.0),
scale_y_rel(_("W_idth in units of length"), _("Scale the width of the path in units of its length"), "scale_y_rel", &wr, this, false),
- vertical_pattern(_("_Original path is vertical"), _("Rotates the original 90 degrees, before bending it along the bend path"), "vertical", &wr, this, false)
+ vertical_pattern(_("_Original path is vertical"), _("Rotates the original 90 degrees, before bending it along the bend path"), "vertical", &wr, this, false),
+ hide_knot(_("Hide width knot"), _("Hide width knot"),"hide_knot", &wr, this, false)
{
registerParameter( &bend_path );
registerParameter( &prop_scale);
registerParameter( &scale_y_rel);
registerParameter( &vertical_pattern);
+ registerParameter(&hide_knot);
prop_scale.param_set_digits(3);
prop_scale.param_set_increments(0.01, 0.10);
-
+
+ knot_entity = NULL;
_provides_knotholder_entities = true;
apply_to_clippath_and_mask = true;
concatenate_before_pwd2 = true;
@@ -81,6 +84,15 @@ LPEBendPath::doBeforeEffect (SPLPEItem const* lpeitem)
// get the item bounding box
original_bbox(lpeitem);
original_height = boundingbox_Y.max() - boundingbox_Y.min();
+ if (knot_entity) {
+ if (hide_knot) {
+ helper_path.clear();
+ knot_entity->knot->hide();
+ } else {
+ knot_entity->knot->show();
+ }
+ knot_entity->update_knot();
+ }
}
Geom::Piecewise<Geom::D2<Geom::SBasis> >
@@ -162,15 +174,19 @@ LPEBendPath::transform_multiply(Geom::Affine const& postmul, bool set)
void
LPEBendPath::addCanvasIndicators(SPLPEItem const */*lpeitem*/, std::vector<Geom::PathVector> &hp_vec)
{
- hp_vec.push_back(bp_helper_path);
+ hp_vec.push_back(helper_path);
}
void
LPEBendPath::addKnotHolderEntities(KnotHolder *knotholder, SPItem *item)
{
- KnotHolderEntity *e = new BeP::KnotHolderEntityWidthBendPath(this);
- e->create(NULL, item, knotholder, Inkscape::CTRL_TYPE_UNKNOWN, _("Change the width"), SP_KNOT_SHAPE_CIRCLE);
- knotholder->add(e);
+ knot_entity = new BeP::KnotHolderEntityWidthBendPath(this);
+ knot_entity->create(NULL, item, knotholder, Inkscape::CTRL_TYPE_UNKNOWN, _("Change the width"), SP_KNOT_SHAPE_CIRCLE);
+ knotholder->add(knot_entity);
+ if (hide_knot) {
+ knot_entity->knot->hide();
+ knot_entity->update_knot();
+ }
}
namespace BeP {
@@ -208,7 +224,6 @@ Geom::Point
KnotHolderEntityWidthBendPath::knot_get() const
{
LPEBendPath *lpe = dynamic_cast<LPEBendPath *> (_effect);
-
Geom::Path path_in = lpe->bend_path.get_pathvector().pathAt(Geom::PathVectorTime(0, 0, 0.0));
Geom::Point ptA = path_in.pointAt(Geom::PathTime(0, 0.0));
Geom::Point B = path_in.pointAt(Geom::PathTime(1, 0.0));
@@ -216,17 +231,17 @@ KnotHolderEntityWidthBendPath::knot_get() const
Geom::CubicBezier const *cubic = dynamic_cast<Geom::CubicBezier const *>(&*first_curve);
Geom::Ray ray(ptA, B);
if (cubic) {
- ray.setPoints(ptA,(*cubic)[1]);
+ ray.setPoints(ptA, (*cubic)[1]);
}
ray.setAngle(ray.angle() + Geom::rad_from_deg(90));
Geom::Point result_point = Geom::Point::polar(ray.angle(), (lpe->original_height/2.0) * lpe->prop_scale) + ptA;
-
- bp_helper_path.clear();
- Geom::Path hp(result_point);
- hp.appendNew<Geom::LineSegment>(ptA);
- bp_helper_path.push_back(hp);
- hp.clear();
-
+ lpe->helper_path.clear();
+ if (!lpe->hide_knot) {
+ Geom::Path hp(result_point);
+ hp.appendNew<Geom::LineSegment>(ptA);
+ lpe->helper_path.push_back(hp);
+ hp.clear();
+ }
return result_point;
}
} // namespace BeP