%module{Slic3r::XS}; %{ #include #include "libslic3r/ExtrusionEntity.hpp" #include "libslic3r/ExtrusionEntityCollection.hpp" %} %name{Slic3r::ExtrusionPath} class ExtrusionPath { ~ExtrusionPath(); SV* arrayref() %code{% RETVAL = to_AV(&THIS->polyline); %}; SV* pp() %code{% RETVAL = to_SV_pureperl(&THIS->polyline); %}; void pop_back() %code{% THIS->polyline.points.pop_back(); %}; void reverse(); Lines lines() %code{% RETVAL = THIS->polyline.lines(); %}; Clone first_point(); Clone last_point(); void clip_end(double distance); void simplify(double tolerance); double length(); ExtrusionRole role() const; bool is_perimeter(); bool is_infill(); bool is_solid_infill(); bool is_bridge(); Polygons polygons_covered_by_width(); Polygons polygons_covered_by_spacing(); %{ ExtrusionPath* _new(CLASS, polyline_sv, role, mm3_per_mm, width, height) char* CLASS; SV* polyline_sv; ExtrusionRole role; double mm3_per_mm; float width; float height; CODE: RETVAL = new ExtrusionPath (role); from_SV_check(polyline_sv, &RETVAL->polyline); RETVAL->mm3_per_mm = mm3_per_mm; RETVAL->width = width; RETVAL->height = height; OUTPUT: RETVAL Ref ExtrusionPath::polyline(...) CODE: if (items > 1) { from_SV_check(ST(1), &THIS->polyline); } RETVAL = &(THIS->polyline); OUTPUT: RETVAL double ExtrusionPath::mm3_per_mm(...) CODE: if (items > 1) { THIS->mm3_per_mm = (double)SvNV(ST(1)); } RETVAL = THIS->mm3_per_mm; OUTPUT: RETVAL float ExtrusionPath::width(...) CODE: if (items > 1) { THIS->width = (float)SvNV(ST(1)); } RETVAL = THIS->width; OUTPUT: RETVAL float ExtrusionPath::height(...) CODE: if (items > 1) { THIS->height = (float)SvNV(ST(1)); } RETVAL = THIS->height; OUTPUT: RETVAL void ExtrusionPath::append(...) CODE: for (unsigned int i = 1; i < items; i++) { Point p; from_SV_check(ST(i), &p); THIS->polyline.points.push_back(p); } ExtrusionEntityCollection* ExtrusionPath::intersect_expolygons(ExPolygonCollection* collection) CODE: RETVAL = new ExtrusionEntityCollection (); THIS->intersect_expolygons(*collection, RETVAL); OUTPUT: RETVAL ExtrusionEntityCollection* ExtrusionPath::subtract_expolygons(ExPolygonCollection* collection) CODE: RETVAL = new ExtrusionEntityCollection (); THIS->subtract_expolygons(*collection, RETVAL); OUTPUT: RETVAL %} }; %package{Slic3r::ExtrusionPath}; %{ IV _constant() ALIAS: EXTR_ROLE_NONE = erNone EXTR_ROLE_PERIMETER = erPerimeter EXTR_ROLE_EXTERNAL_PERIMETER = erExternalPerimeter EXTR_ROLE_OVERHANG_PERIMETER = erOverhangPerimeter EXTR_ROLE_FILL = erInternalInfill EXTR_ROLE_SOLIDFILL = erSolidInfill EXTR_ROLE_TOPSOLIDFILL = erTopSolidInfill EXTR_ROLE_BRIDGE = erBridgeInfill EXTR_ROLE_GAPFILL = erGapFill EXTR_ROLE_SKIRT = erSkirt EXTR_ROLE_SUPPORTMATERIAL = erSupportMaterial EXTR_ROLE_SUPPORTMATERIAL_INTERFACE = erSupportMaterialInterface EXTR_ROLE_MIXED = erMixed PROTOTYPE: CODE: RETVAL = ix; OUTPUT: RETVAL %}