%module{Slic3r::XS}; %{ #include #include "libslic3r/Line.hpp" #include "libslic3r/Polyline.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 orientation(); double direction(); bool parallel_to(double angle); bool parallel_to_line(Line* line) %code{% RETVAL = THIS->parallel_to(*line); %}; Clone midpoint(); Clone point_at(double distance); Clone intersection_infinite(Line* other) %code{% Point p; bool res = THIS->intersection_infinite(*other, &p); if (!res) CONFESS("Intersection failed"); RETVAL = p; %}; Clone as_polyline() %code{% RETVAL = Polyline(*THIS); %}; Clone normal(); Clone vector(); %{ 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 %} }; %name{Slic3r::Linef3} class Linef3 { Linef3(Pointf3* a, Pointf3* b) %code{% RETVAL = new Linef3(*a, *b); %}; ~Linef3(); Clone clone() %code{% RETVAL = THIS; %}; Ref a() %code{% RETVAL = &THIS->a; %}; Ref b() %code{% RETVAL = &THIS->b; %}; Clone intersect_plane(double z); void scale(double factor); };