%module{Slic3r::XS}; %{ #include #include "Surface.hpp" #include "ClipperUtils.hpp" %} %name{Slic3r::Surface} class Surface { ~Surface(); ExPolygon* expolygon() %code{% const char* CLASS = "Slic3r::ExPolygon::Ref"; RETVAL = &(THIS->expolygon); %}; double thickness() %code{% RETVAL = THIS->thickness; %}; unsigned short thickness_layers() %code{% RETVAL = THIS->thickness_layers; %}; double area(); bool is_solid() const; bool is_external() const; bool is_bottom() const; bool is_bridge() const; %{ Surface* _new(CLASS, expolygon, surface_type, thickness, thickness_layers, bridge_angle, extra_perimeters) char* CLASS; ExPolygon* expolygon; SurfaceType surface_type; double thickness; unsigned short thickness_layers; double bridge_angle; unsigned short extra_perimeters; CODE: RETVAL = new Surface (); RETVAL->expolygon = *expolygon; RETVAL->surface_type = surface_type; RETVAL->thickness = thickness; RETVAL->thickness_layers = thickness_layers; RETVAL->bridge_angle = bridge_angle; RETVAL->extra_perimeters = extra_perimeters; // we don't delete expolygon here because it's referenced by a Perl SV // whose DESTROY will take care of destruction OUTPUT: RETVAL SurfaceType Surface::surface_type(...) CODE: if (items > 1) { THIS->surface_type = (SurfaceType)SvUV(ST(1)); } RETVAL = THIS->surface_type; OUTPUT: RETVAL double Surface::bridge_angle(...) CODE: if (items > 1) { THIS->bridge_angle = (double)SvNV(ST(1)); } RETVAL = THIS->bridge_angle; OUTPUT: RETVAL unsigned short Surface::extra_perimeters(...) CODE: if (items > 1) { THIS->extra_perimeters = (double)SvUV(ST(1)); } RETVAL = THIS->extra_perimeters; OUTPUT: RETVAL Polygons Surface::polygons() CODE: RETVAL.push_back(THIS->expolygon.contour); for (Polygons::iterator it = THIS->expolygon.holes.begin(); it != THIS->expolygon.holes.end(); ++it) { RETVAL.push_back((*it)); } OUTPUT: RETVAL Surfaces Surface::offset(delta, scale = CLIPPER_OFFSET_SCALE, joinType = ClipperLib::jtMiter, miterLimit = 3) const float delta double scale ClipperLib::JoinType joinType double miterLimit CODE: offset(*THIS, RETVAL, delta, scale, joinType, miterLimit); OUTPUT: RETVAL %} }; %package{Slic3r::Surface}; %{ IV _constant() ALIAS: S_TYPE_TOP = stTop S_TYPE_BOTTOM = stBottom S_TYPE_BOTTOMBRIDGE = stBottomBridge S_TYPE_INTERNAL = stInternal S_TYPE_INTERNALSOLID = stInternalSolid S_TYPE_INTERNALBRIDGE = stInternalBridge S_TYPE_INTERNALVOID = stInternalVoid PROTOTYPE: CODE: RETVAL = ix; OUTPUT: RETVAL %}