summaryrefslogtreecommitdiffstats
path: root/src/live_effects/pathoutlineprovider.cpp
diff options
context:
space:
mode:
authorLiam P. White <inkscapebronyat-signgmaildotcom>2014-03-23 21:25:49 +0000
committerLiam P. White <inkscapebronyat-signgmaildotcom>2014-03-23 21:25:49 +0000
commit7d6a2eac770b159a51183add6917eaec36729d80 (patch)
tree8a2f2d7b464a316e389891e1936e16f95a9ef7fa /src/live_effects/pathoutlineprovider.cpp
parentUpdate to trunk (diff)
downloadinkscape-7d6a2eac770b159a51183add6917eaec36729d80.tar.gz
inkscape-7d6a2eac770b159a51183add6917eaec36729d80.zip
tiny bugfix for Taper Strokes
(bzr r13090.1.30)
Diffstat (limited to 'src/live_effects/pathoutlineprovider.cpp')
-rwxr-xr-xsrc/live_effects/pathoutlineprovider.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/live_effects/pathoutlineprovider.cpp b/src/live_effects/pathoutlineprovider.cpp
index e62f516c9..302756c7c 100755
--- a/src/live_effects/pathoutlineprovider.cpp
+++ b/src/live_effects/pathoutlineprovider.cpp
@@ -825,6 +825,39 @@ Geom::PathVector PathVectorOutline(Geom::PathVector const & path_in, double line
#undef miter_lim
return path_out;
}
+Geom::Path PathOutsideOutline(Geom::Path const & path_in, double line_width, LineJoinType linejoin_type, double miter_limit)
+{
+
+ #define miter_lim fabs(line_width * miter_limit)
+
+ Geom::Path path_out;
+
+ if (linejoin_type <= LINEJOIN_POINTY || path_in.size() <= 1) {
+
+ Geom::PathVector * pathvec;
+
+ Path path_tangent = Path();
+ Path path_outline = Path();
+ path_outline.LoadPath(path_in, Geom::Affine(), false, false);
+ path_outline.OutsideOutline(&path_tangent, line_width / 2, static_cast<join_typ>(linejoin_type), butt_straight, miter_lim);
+
+ pathvec = path_tangent.MakePathVector();
+ path_out = pathvec[0]/* deref pointer */[0]/*actual object ref*/;
+ delete pathvec;
+ return path_out;
+ }
+ else if (linejoin_type == LINEJOIN_REFLECTED) {
+ //reflected half outline
+ Geom::PathVector pathvec; pathvec.push_back(path_in);
+ path_out = half_outline(path_in, line_width, butt_straight, miter_lim);
+ return path_out;
+ }
+ else if (linejoin_type == LINEJOIN_EXTRAPOLATED) {
+ path_out = half_outline_extrp(path_in, line_width, butt_straight, miter_lim);
+ return path_out;
+ }
+ return path_out;
+}
} // namespace Outline