%module{Slic3r::XS}; %{ #include #include "ExtrusionEntity.hpp" #include "perlglue.hpp" %} %name{Slic3r::ExtrusionLoop} class ExtrusionLoop { ~ExtrusionLoop(); SV* arrayref() %code{% RETVAL = THIS->polygon.to_AV(); %}; SV* pp() %code{% RETVAL = THIS->polygon.to_SV_pureperl(); %}; void reverse() %code{% THIS->polygon.reverse(); %}; ExtrusionPath* split_at_index(int index); ExtrusionPath* split_at_first_point(); bool make_counter_clockwise(); Clone first_point(); Clone last_point(); bool is_perimeter(); bool is_fill(); bool is_bridge(); %{ ExtrusionLoop* _new(CLASS, polygon_sv, role, mm3_per_mm, width, height) char* CLASS; SV* polygon_sv; ExtrusionRole role; double mm3_per_mm; float width; float height; CODE: RETVAL = new ExtrusionLoop (); RETVAL->polygon.from_SV_check(polygon_sv); RETVAL->role = role; RETVAL->mm3_per_mm = mm3_per_mm; RETVAL->width = width; RETVAL->height = height; OUTPUT: RETVAL Ref ExtrusionLoop::polygon(...) CODE: if (items > 1) { THIS->polygon.from_SV_check( ST(1) ); } RETVAL = &(THIS->polygon); OUTPUT: RETVAL ExtrusionRole ExtrusionLoop::role(...) CODE: if (items > 1) { THIS->role = (ExtrusionRole)SvUV(ST(1)); } RETVAL = THIS->role; OUTPUT: RETVAL double ExtrusionLoop::mm3_per_mm(...) CODE: if (items > 1) { THIS->mm3_per_mm = (double)SvNV(ST(1)); } RETVAL = THIS->mm3_per_mm; OUTPUT: RETVAL float ExtrusionLoop::width(...) CODE: if (items > 1) { THIS->width = (float)SvNV(ST(1)); } RETVAL = THIS->width; OUTPUT: RETVAL float ExtrusionLoop::height(...) CODE: if (items > 1) { THIS->height = (float)SvNV(ST(1)); } RETVAL = THIS->height; OUTPUT: RETVAL %} };