%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 = to_AV(THIS); %}; SV* pp() %code{% RETVAL = to_SV_pureperl(THIS); %}; 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 intersection_infinite(Line* other) %code{% Point p; bool res = THIS->intersection_infinite(*other, &p); if (!res) CONFESS("Intersection failed"); RETVAL = p; %}; Polyline* as_polyline() %code{% RETVAL = new Polyline(THIS->a, THIS->b); %}; Clone normal(); Clone vector(); double ccw(Point* point) %code{% RETVAL = cross2((THIS->a - *point).cast(), (THIS->b - THIS->a).cast()); %}; %{ Line* Line::new(...) CODE: RETVAL = new Line (); // ST(0) is class name, ST(1) and ST(2) are endpoints from_SV_check(ST(1), &RETVAL->a); from_SV_check(ST(2), &RETVAL->b); OUTPUT: RETVAL void Line::rotate(angle, center_sv) double angle; SV* center_sv; CODE: Point center; from_SV_check(center_sv, ¢er); THIS->rotate(angle, center); bool Line::coincides_with(line_sv) SV* line_sv; CODE: Line line; from_SV_check(line_sv, &line); RETVAL = (*THIS) == line; OUTPUT: RETVAL %} };