%module{Slic3r::XS};

%{
#include <myinit.h>
#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_AV(); %};
    SV* pp()
        %code{% RETVAL = THIS->to_SV_pureperl(); %};
    Point* a()
        %code{% const char* CLASS = "Slic3r::Point::Ref"; RETVAL = &(THIS->a); %};
    Point* b()
        %code{% const char* CLASS = "Slic3r::Point::Ref"; RETVAL = &(THIS->b); %};
    void reverse();
    void scale(double factor);
    void translate(double x, double y);
    double length();
    Point* midpoint()
        %code{% const char* CLASS = "Slic3r::Point"; RETVAL = THIS->midpoint(); %};
    Point* point_at(double d)
        %code{% const char* CLASS = "Slic3r::Point"; RETVAL = THIS->point_at(d); %};
%{

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);

%}
};
