%module{Slic3r::XS}; %{ #include <xsinit.h> #include "libslic3r/Line.hpp" #include "libslic3r/Polyline.hpp" %} %name{Slic3r::Line} class Line { ~Line(); Clone<Line> clone() %code{% RETVAL = THIS; %}; SV* arrayref() %code{% RETVAL = to_AV(THIS); %}; SV* pp() %code{% RETVAL = to_SV_pureperl(THIS); %}; Ref<Point> a() %code{% RETVAL=&THIS->a; %}; Ref<Point> 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<Point> midpoint(); Clone<Point> 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<Point> normal(); Clone<Point> vector(); double ccw(Point* point) %code{% RETVAL = THIS->ccw(*point); %}; %{ 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 %} }; %name{Slic3r::Linef3} class Linef3 { Linef3(Vec3d* a, Vec3d* b) %code{% RETVAL = new Linef3(*a, *b); %}; ~Linef3(); Clone<Linef3> clone() %code{% RETVAL = THIS; %}; Ref<Vec3d> a() %code{% RETVAL = &THIS->a; %}; Ref<Vec3d> b() %code{% RETVAL = &THIS->b; %}; Clone<Vec3d> intersect_plane(double z); void scale(double factor); };