3515994554d167522343ce57417648b39370ccabcilix/** \file
3515994554d167522343ce57417648b39370ccabcilix * LPE <line_segment> implementation
3515994554d167522343ce57417648b39370ccabcilix */
3515994554d167522343ce57417648b39370ccabcilix
3515994554d167522343ce57417648b39370ccabcilix/*
3515994554d167522343ce57417648b39370ccabcilix * Authors:
3515994554d167522343ce57417648b39370ccabcilix * Maximilian Albert
3515994554d167522343ce57417648b39370ccabcilix *
3515994554d167522343ce57417648b39370ccabcilix * Copyright (C) Maximilian Albert 2008 <maximilian.albert@gmail.com>
3515994554d167522343ce57417648b39370ccabcilix *
3515994554d167522343ce57417648b39370ccabcilix * Released under GNU GPL, read the file 'COPYING' for more information
3515994554d167522343ce57417648b39370ccabcilix */
3515994554d167522343ce57417648b39370ccabcilix
3515994554d167522343ce57417648b39370ccabcilix#include "live_effects/lpe-line_segment.h"
d1561c248f49dc3508ae9e6557fc0d371928e394Markus Engel#include "ui/tools/lpe-tool.h"
3515994554d167522343ce57417648b39370ccabcilix
3515994554d167522343ce57417648b39370ccabcilix#include <2geom/pathvector.h>
3515994554d167522343ce57417648b39370ccabcilix#include <2geom/geom.h>
3515994554d167522343ce57417648b39370ccabcilix#include <2geom/bezier-curve.h>
3515994554d167522343ce57417648b39370ccabcilix
3515994554d167522343ce57417648b39370ccabcilixnamespace Inkscape {
3515994554d167522343ce57417648b39370ccabcilixnamespace LivePathEffect {
3515994554d167522343ce57417648b39370ccabcilix
3515994554d167522343ce57417648b39370ccabcilixstatic const Util::EnumData<EndType> EndTypeData[] = {
ae07f331747953e1b35a4415004f8be9cf1ea003cilix {END_CLOSED , N_("Closed"), "closed"},
6bbf41c7e0d07ad73b5858518f850966e8170103cilix {END_OPEN_INITIAL , N_("Open start"), "open_start"},
6bbf41c7e0d07ad73b5858518f850966e8170103cilix {END_OPEN_FINAL , N_("Open end"), "open_end"},
6bbf41c7e0d07ad73b5858518f850966e8170103cilix {END_OPEN_BOTH , N_("Open both"), "open_both"},
3515994554d167522343ce57417648b39370ccabcilix};
3515994554d167522343ce57417648b39370ccabcilixstatic const Util::EnumDataConverter<EndType> EndTypeConverter(EndTypeData, sizeof(EndTypeData)/sizeof(*EndTypeData));
3515994554d167522343ce57417648b39370ccabcilix
3515994554d167522343ce57417648b39370ccabcilixLPELineSegment::LPELineSegment(LivePathEffectObject *lpeobject) :
3515994554d167522343ce57417648b39370ccabcilix Effect(lpeobject),
b8502defa91647a317b285046a49546612f66e6dKris end_type(_("End type:"), _("Determines on which side the line or line segment is infinite."), "end_type", EndTypeConverter, &wr, this, END_OPEN_BOTH)
3515994554d167522343ce57417648b39370ccabcilix{
3515994554d167522343ce57417648b39370ccabcilix /* register all your parameters here, so Inkscape knows which parameters this effect has: */
3515994554d167522343ce57417648b39370ccabcilix registerParameter( dynamic_cast<Parameter *>(&end_type) );
3515994554d167522343ce57417648b39370ccabcilix}
3515994554d167522343ce57417648b39370ccabcilix
3515994554d167522343ce57417648b39370ccabcilixLPELineSegment::~LPELineSegment()
3515994554d167522343ce57417648b39370ccabcilix{
3515994554d167522343ce57417648b39370ccabcilix
3515994554d167522343ce57417648b39370ccabcilix}
3515994554d167522343ce57417648b39370ccabcilix
3515994554d167522343ce57417648b39370ccabcilixvoid
0b2d8abc1011ad865fce3b883ccb2587cb15cc90Johan B. C. EngelenLPELineSegment::doBeforeEffect (SPLPEItem const* lpeitem)
3515994554d167522343ce57417648b39370ccabcilix{
5f19756f48574526dda8abedebf811c9d1456e80Markus Engel Inkscape::UI::Tools::lpetool_get_limiting_bbox_corners(lpeitem->document, bboxA, bboxB);
3515994554d167522343ce57417648b39370ccabcilix}
3515994554d167522343ce57417648b39370ccabcilix
76addc201c409e81eaaa73fe27cc0f79c4db097cKrzysztof KosińskiGeom::PathVector
76addc201c409e81eaaa73fe27cc0f79c4db097cKrzysztof KosińskiLPELineSegment::doEffect_path (Geom::PathVector const & path_in)
3515994554d167522343ce57417648b39370ccabcilix{
76addc201c409e81eaaa73fe27cc0f79c4db097cKrzysztof Kosiński Geom::PathVector output;
3515994554d167522343ce57417648b39370ccabcilix
76addc201c409e81eaaa73fe27cc0f79c4db097cKrzysztof Kosiński A = path_in.initialPoint();
76addc201c409e81eaaa73fe27cc0f79c4db097cKrzysztof Kosiński B = path_in.finalPoint();
3515994554d167522343ce57417648b39370ccabcilix
80a38fd6ed41a1c70f1cc961df821932aafb6764dvlierop Geom::Rect dummyRect(bboxA, bboxB);
76addc201c409e81eaaa73fe27cc0f79c4db097cKrzysztof Kosiński boost::optional<Geom::LineSegment> intersection_segment = Geom::Line(A, B).clip(dummyRect);
3515994554d167522343ce57417648b39370ccabcilix
80a38fd6ed41a1c70f1cc961df821932aafb6764dvlierop if (!intersection_segment) {
3515994554d167522343ce57417648b39370ccabcilix g_print ("Possible error - no intersection with limiting bounding box.\n");
3515994554d167522343ce57417648b39370ccabcilix return path_in;
3515994554d167522343ce57417648b39370ccabcilix }
3515994554d167522343ce57417648b39370ccabcilix
6bbf41c7e0d07ad73b5858518f850966e8170103cilix if (end_type == END_OPEN_INITIAL || end_type == END_OPEN_BOTH) {
76addc201c409e81eaaa73fe27cc0f79c4db097cKrzysztof Kosiński A = intersection_segment->initialPoint();
3515994554d167522343ce57417648b39370ccabcilix }
3515994554d167522343ce57417648b39370ccabcilix
6bbf41c7e0d07ad73b5858518f850966e8170103cilix if (end_type == END_OPEN_FINAL || end_type == END_OPEN_BOTH) {
76addc201c409e81eaaa73fe27cc0f79c4db097cKrzysztof Kosiński B = intersection_segment->finalPoint();
3515994554d167522343ce57417648b39370ccabcilix }
3515994554d167522343ce57417648b39370ccabcilix
3515994554d167522343ce57417648b39370ccabcilix Geom::Path path(A);
80a38fd6ed41a1c70f1cc961df821932aafb6764dvlierop path.appendNew<Geom::LineSegment>(B);
3515994554d167522343ce57417648b39370ccabcilix
3515994554d167522343ce57417648b39370ccabcilix output.push_back(path);
3515994554d167522343ce57417648b39370ccabcilix
3515994554d167522343ce57417648b39370ccabcilix return output;
3515994554d167522343ce57417648b39370ccabcilix}
3515994554d167522343ce57417648b39370ccabcilix
3515994554d167522343ce57417648b39370ccabcilix} //namespace LivePathEffect
3515994554d167522343ce57417648b39370ccabcilix} /* namespace Inkscape */
3515994554d167522343ce57417648b39370ccabcilix
3515994554d167522343ce57417648b39370ccabcilix/*
3515994554d167522343ce57417648b39370ccabcilix Local Variables:
3515994554d167522343ce57417648b39370ccabcilix mode:c++
3515994554d167522343ce57417648b39370ccabcilix c-file-style:"stroustrup"
3515994554d167522343ce57417648b39370ccabcilix c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
3515994554d167522343ce57417648b39370ccabcilix indent-tabs-mode:nil
3515994554d167522343ce57417648b39370ccabcilix fill-column:99
3515994554d167522343ce57417648b39370ccabcilix End:
3515994554d167522343ce57417648b39370ccabcilix*/
3515994554d167522343ce57417648b39370ccabcilix// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :