%module{Slic3r::XS}; %{ #include #include "ExtrusionEntity.hpp" %} %name{Slic3r::ExtrusionLoop} class ExtrusionLoop { ExtrusionLoop(); ~ExtrusionLoop(); Clone clone() %code{% RETVAL = THIS; %}; void reverse(); bool make_clockwise(); bool make_counter_clockwise(); Clone first_point(); Clone last_point(); Polygon* polygon() %code{% RETVAL = new Polygon (*THIS); %}; void append(ExtrusionPath* path) %code{% THIS->paths.push_back(*path); %}; double length(); void split_at_vertex(Point* point) %code{% THIS->split_at_vertex(*point); %}; void split_at(Point* point) %code{% THIS->split_at(*point); %}; ExtrusionPaths clip_end(double distance) %code{% THIS->clip_end(distance, &RETVAL); %}; bool has_overhang_point(Point* point) %code{% RETVAL = THIS->has_overhang_point(*point); %}; %{ SV* ExtrusionLoop::arrayref() CODE: AV* av = newAV(); av_fill(av, THIS->paths.size()-1); int i = 0; for (ExtrusionPaths::iterator it = THIS->paths.begin(); it != THIS->paths.end(); ++it) { av_store(av, i++, perl_to_SV_ref(*it)); } RETVAL = newRV_noinc((SV*)av); OUTPUT: RETVAL ExtrusionLoopRole ExtrusionLoop::role(...) CODE: if (items > 1) { THIS->role = (ExtrusionLoopRole)SvUV(ST(1)); } RETVAL = THIS->role; OUTPUT: RETVAL %} }; %package{Slic3r::ExtrusionLoop}; %{ IV _constant() ALIAS: EXTRL_ROLE_DEFAULT = elrDefault EXTRL_ROLE_EXTERNAL_PERIMETER = elrExternalPerimeter EXTRL_ROLE_CONTOUR_INTERNAL_PERIMETER = elrContourInternalPerimeter PROTOTYPE: CODE: RETVAL = ix; OUTPUT: RETVAL %}