diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2008-07-13 18:43:05 +0000 |
|---|---|---|
| committer | johanengelen <johanengelen@users.sourceforge.net> | 2008-07-13 18:43:05 +0000 |
| commit | 4116683171847429ba0472c98f733cad23852f53 (patch) | |
| tree | 3283de1687b05c75311b04698123150d920fc498 /src/helper/geom.cpp | |
| parent | 2geomify generation of nodetool's nodepath. have done testing, but needs more... (diff) | |
| download | inkscape-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.cpp | 38 |
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; +} + |
