summaryrefslogtreecommitdiffstats
path: root/src/helper/geom.cpp
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2008-07-13 18:43:05 +0000
committerjohanengelen <johanengelen@users.sourceforge.net>2008-07-13 18:43:05 +0000
commit4116683171847429ba0472c98f733cad23852f53 (patch)
tree3283de1687b05c75311b04698123150d920fc498 /src/helper/geom.cpp
parent2geomify generation of nodetool's nodepath. have done testing, but needs more... (diff)
downloadinkscape-4116683171847429ba0472c98f733cad23852f53.tar.gz
inkscape-4116683171847429ba0472c98f733cad23852f53.zip
2geomify pov-out extension
(bzr r6284)
Diffstat (limited to 'src/helper/geom.cpp')
-rw-r--r--src/helper/geom.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/helper/geom.cpp b/src/helper/geom.cpp
index 39dd2414a..f509485bd 100644
--- a/src/helper/geom.cpp
+++ b/src/helper/geom.cpp
@@ -481,6 +481,44 @@ pathv_matrix_point_bbox_wind_distance (Geom::PathVector const & pathv, NR::Matri
}
//#################################################################################
+/*
+ * Converts all segments in all paths to Geom::LineSegment or Geom::HLineSegment or
+ * Geom::VLineSegment or Geom::CubicBezier.
+ */
+Geom::PathVector
+pathv_to_linear_and_cubic_beziers( Geom::PathVector const &pathv )
+{
+ Geom::PathVector output;
+
+ for (Geom::PathVector::const_iterator pit = pathv.begin(); pit != pathv.end(); ++pit) {
+ output.push_back( Geom::Path() );
+ output.back().start( pit->initialPoint() );
+ output.back().close( pit->closed() );
+
+ for (Geom::Path::const_iterator cit = pit->begin(); cit != pit->end_open(); ++cit) {
+ if( dynamic_cast<Geom::LineSegment const*>(&*cit) ||
+ dynamic_cast<Geom::HLineSegment const*>(&*cit) ||
+ dynamic_cast<Geom::VLineSegment const*>(&*cit) )
+ {
+ output.back().append(*cit);
+ }
+ else if(Geom::CubicBezier const *cubic_bezier = dynamic_cast<Geom::CubicBezier const*>(&*cit)) {
+ output.back().append(*cit);
+ }
+ else {
+ // convert all other curve types to cubicbeziers
+ Geom::Path cubicbezier_path = Geom::cubicbezierpath_from_sbasis(cit->toSBasis(), 0.1);
+
+ for(Geom::Path::iterator iter = cubicbezier_path.begin(); iter != cubicbezier_path.end(); ++iter) {
+ output.back().append(*iter);
+ }
+ }
+ }
+ }
+
+ return output;
+}
+