summaryrefslogtreecommitdiffstats
path: root/src/pencil-context.cpp
diff options
context:
space:
mode:
authorsu_v <suv-sf@users.sourceforge.net>2012-10-04 08:06:18 +0000
committer~suv <suv-sf@users.sourceforge.net>2012-10-04 08:06:18 +0000
commitfec1be463b3950772422da45fe4655de40c864e7 (patch)
tree2eeef78cb15a7fba9453cfc9c12067c0331818d5 /src/pencil-context.cpp
parentupdate based on patch 'changes_2012_09_27b.patch' (diff)
parentextensions. Extrude. allow selection of multiple objects (Bug 1055155) (diff)
downloadinkscape-fec1be463b3950772422da45fe4655de40c864e7.tar.gz
inkscape-fec1be463b3950772422da45fe4655de40c864e7.zip
merge from trunk (r11734)
(bzr r11668.1.22)
Diffstat (limited to 'src/pencil-context.cpp')
-rw-r--r--src/pencil-context.cpp25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/pencil-context.cpp b/src/pencil-context.cpp
index d5b61e1f0..19a040b24 100644
--- a/src/pencil-context.cpp
+++ b/src/pencil-context.cpp
@@ -789,11 +789,13 @@ interpolate(SPPencilContext *pc)
/* Set up direction of next curve. */
{
- Geom::CubicBezier const * last_seg = dynamic_cast<Geom::CubicBezier const *>(pc->green_curve->last_segment());
- g_assert( last_seg ); // Relevance: validity of (*last_seg)[2]
+ Geom::Curve const * last_seg = pc->green_curve->last_segment();
+ g_assert( last_seg ); // Relevance: validity of (*last_seg)
pc->p[0] = last_seg->finalPoint();
pc->npoints = 1;
- Geom::Point const req_vec( pc->p[0] - (*last_seg)[2] );
+ Geom::Curve *last_seg_reverse = last_seg->reverse();
+ Geom::Point const req_vec( -last_seg_reverse->unitTangentAt(0) );
+ delete last_seg_reverse;
pc->req_tangent = ( ( Geom::is_zero(req_vec) || !in_svg_plane(req_vec) )
? Geom::Point(0, 0)
: Geom::unit_vector(req_vec) );
@@ -881,11 +883,13 @@ sketch_interpolate(SPPencilContext *pc)
/* Set up direction of next curve. */
{
- Geom::CubicBezier const * last_seg = dynamic_cast<Geom::CubicBezier const *>(pc->green_curve->last_segment());
- g_assert( last_seg ); // Relevance: validity of (*last_seg)[2]
+ Geom::Curve const * last_seg = pc->green_curve->last_segment();
+ g_assert( last_seg ); // Relevance: validity of (*last_seg)
pc->p[0] = last_seg->finalPoint();
pc->npoints = 1;
- Geom::Point const req_vec( pc->p[0] - (*last_seg)[2] );
+ Geom::Curve *last_seg_reverse = last_seg->reverse();
+ Geom::Point const req_vec( -last_seg_reverse->unitTangentAt(0) );
+ delete last_seg_reverse;
pc->req_tangent = ( ( Geom::is_zero(req_vec) || !in_svg_plane(req_vec) )
? Geom::Point(0, 0)
: Geom::unit_vector(req_vec) );
@@ -926,16 +930,19 @@ fit_and_split(SPPencilContext *pc)
/* Set up direction of next curve. */
{
- Geom::CubicBezier const * last_seg = dynamic_cast<Geom::CubicBezier const *>(pc->red_curve->last_segment());
- g_assert( last_seg ); // Relevance: validity of (*last_seg)[2]
+ Geom::Curve const * last_seg = pc->red_curve->last_segment();
+ g_assert( last_seg ); // Relevance: validity of (*last_seg)
pc->p[0] = last_seg->finalPoint();
pc->npoints = 1;
- Geom::Point const req_vec( pc->p[0] - (*last_seg)[2] );
+ Geom::Curve *last_seg_reverse = last_seg->reverse();
+ Geom::Point const req_vec( -last_seg_reverse->unitTangentAt(0) );
+ delete last_seg_reverse;
pc->req_tangent = ( ( Geom::is_zero(req_vec) || !in_svg_plane(req_vec) )
? Geom::Point(0, 0)
: Geom::unit_vector(req_vec) );
}
+
pc->green_curve->append_continuous(pc->red_curve, 0.0625);
SPCurve *curve = pc->red_curve->copy();