%module{Slic3r::XS}; %{ #include #include "Line.hpp" %} %name{Slic3r::Line} class Line { ~Line(); Line* clone() %code{% const char* CLASS = "Slic3r::Line"; RETVAL = new Line(*THIS); %}; SV* arrayref() %code{% RETVAL = THIS->to_SV(); %}; SV* pp() %code{% RETVAL = THIS->to_SV_pureperl(); %}; Point* a() %code{% const char* CLASS = "Slic3r::Point"; RETVAL = new Point(THIS->a); %}; Point* b() %code{% const char* CLASS = "Slic3r::Point"; RETVAL = new Point(THIS->b); %}; void reverse(); void scale(double factor); void translate(double x, double y); double length(); %{ Line* Line::new(...) CODE: RETVAL = new Line (); // ST(0) is class name, ST(1) and ST(2) are endpoints RETVAL->a.from_SV_check( ST(1) ); RETVAL->b.from_SV_check( ST(2) ); OUTPUT: RETVAL void Line::rotate(angle, center_sv) double angle; SV* center_sv; CODE: Point center; center.from_SV_check(center_sv); THIS->rotate(angle, ¢er); %} };