%module{Slic3r::XS}; %{ #include #include "Line.hpp" #include "Polyline.hpp" #include "perlglue.hpp" %} %name{Slic3r::Line} class Line { ~Line(); Clone clone() %code{% RETVAL = THIS; %}; SV* arrayref() %code{% RETVAL = THIS->to_AV(); %}; SV* pp() %code{% RETVAL = THIS->to_SV_pureperl(); %}; Ref a() %code{% RETVAL=&THIS->a; %}; Ref b() %code{% RETVAL=&THIS->b; %}; void reverse(); void scale(double factor); void translate(double x, double y); double length(); double atan2_(); double direction(); bool parallel_to(double angle); bool parallel_to_line(Line* line) %code{% RETVAL = THIS->parallel_to(*line); %}; Point* midpoint(); Clone point_at(double distance); Polyline* as_polyline() %code{% RETVAL = new Polyline(*THIS); %}; %{ 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, center); bool Line::coincides_with(line_sv) SV* line_sv; CODE: Line line; line.from_SV_check(line_sv); RETVAL = THIS->coincides_with(line); OUTPUT: RETVAL %} };