Geom::PathVector LPEGears::doEffect_path (Geom::PathVector const &path_in) { Geom::PathVector path_out; Geom::Path gearpath = path_in[0]; Geom::Path::iterator it(gearpath.begin()); if ( it == gearpath.end() ) return path_out; Gear * gear = new Gear(teeth, 200.0, phi * M_PI / 180); Geom::Point gear_centre = (*it).finalPoint(); gear->centre(gear_centre); gear->angle(atan2((*it).initialPoint() - gear_centre)); ++it; if ( it == gearpath.end() ) return path_out; gear->pitch_radius(Geom::distance(gear_centre, (*it).finalPoint())); path_out.push_back( gear->path()); for (++it; it != gearpath.end() ; ++it) { // iterate through Geom::Curve in path_in Gear* gearnew = new Gear(gear->spawn( (*it).finalPoint() )); path_out.push_back( gearnew->path() ); delete gear; gear = gearnew; } delete gear; return path_out; }