When extruding supports, the support is interleaved with interface if possible (when extruded with the same extruder). Otherwise the base is extruded first.
144 lines
3.7 KiB
Text
144 lines
3.7 KiB
Text
%module{Slic3r::XS};
|
|
|
|
%{
|
|
#include <xsinit.h>
|
|
#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<Point> first_point();
|
|
Clone<Point> 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<Polyline>
|
|
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
|
|
|
|
%}
|
|
|