1  | 
     | 
    /*    This is a component of LinuxCNC  | 
    
    
    2  | 
     | 
     *    Copyright 2013 Michael Haberler <git@mah.priv.at>  | 
    
    
    3  | 
     | 
     *  | 
    
    
    4  | 
     | 
     *    This program is free software; you can redistribute it and/or modify  | 
    
    
    5  | 
     | 
     *    it under the terms of the GNU General Public License as published by  | 
    
    
    6  | 
     | 
     *    the Free Software Foundation; either version 2 of the License, or  | 
    
    
    7  | 
     | 
     *    (at your option) any later version.  | 
    
    
    8  | 
     | 
     *  | 
    
    
    9  | 
     | 
     *    This program is distributed in the hope that it will be useful,  | 
    
    
    10  | 
     | 
     *    but WITHOUT ANY WARRANTY; without even the implied warranty of  | 
    
    
    11  | 
     | 
     *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  | 
    
    
    12  | 
     | 
     *    GNU General Public License for more details.  | 
    
    
    13  | 
     | 
     *  | 
    
    
    14  | 
     | 
     *    You should have received a copy of the GNU General Public License  | 
    
    
    15  | 
     | 
     *    along with this program; if not, write to the Free Software  | 
    
    
    16  | 
     | 
     *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  | 
    
    
    17  | 
     | 
     */  | 
    
    
    18  | 
     | 
    // Interpreter internals - Python bindings  | 
    
    
    19  | 
     | 
    // Michael Haberler 7/2011  | 
    
    
    20  | 
     | 
    //  | 
    
    
    21  | 
     | 
     | 
    
    
    22  | 
     | 
    #include <boost/python/class.hpp>  | 
    
    
    23  | 
     | 
    #include <boost/python/tuple.hpp>  | 
    
    
    24  | 
     | 
    namespace bp = boost::python;  | 
    
    
    25  | 
     | 
     | 
    
    
    26  | 
     | 
    #include "rs274ngc.hh"  | 
    
    
    27  | 
     | 
     | 
    
    
    28  | 
     | 
    static bp::object pmcartesian_str( PmCartesian &c) { | 
    
    
    29  | 
     | 
        return  bp::object("PmCartesian(x=%.4f y=%.4f z=%.4f)" % | 
    
    
    30  | 
     | 
    		       bp::make_tuple(c.x,c.y,c.z));  | 
    
    
    31  | 
     | 
    }  | 
    
    
    32  | 
     | 
     | 
    
    
    33  | 
     | 
    static bp::object emcpose_2_obj ( EmcPose &p) { | 
    
    
    34  | 
     | 
        return  bp::object("x=%.4f y=%.4f z=%.4f a=%.4f b=%.4f c=%.4f u=%.4f v=%.4f w=%.4f" % | 
    
    
    35  | 
     | 
    		       bp::make_tuple(p.tran.x,p.tran.y,p.tran.z,  | 
    
    
    36  | 
     | 
    				      p.a,p.b,p.c,p.u,p.v,p.w));  | 
    
    
    37  | 
     | 
    }  | 
    
    
    38  | 
     | 
    static bp::object emcpose_str( EmcPose &p) { | 
    
    
    39  | 
     | 
        return  bp::object("EmcPose(" + emcpose_2_obj(p) + ")"); | 
    
    
    40  | 
     | 
    }  | 
    
    
    41  | 
     | 
     | 
    
    
    42  | 
     | 
    static void  set_x(EmcPose &p, double value) { p.tran.x = value; } | 
    
    
    43  | 
     | 
    static void  set_y(EmcPose &p, double value) { p.tran.y = value; } | 
    
    
    44  | 
     | 
    static void  set_z(EmcPose &p, double value) { p.tran.z = value; } | 
    
    
    45  | 
     | 
    static double get_x(EmcPose &p) { return p.tran.x; } | 
    
    
    46  | 
     | 
    static double get_y(EmcPose &p) { return p.tran.y; } | 
    
    
    47  | 
     | 
    static double get_z(EmcPose &p) { return p.tran.z; } | 
    
    
    48  | 
     | 
     | 
    
    
    49  | 
     | 
    static bp::object tool_str( CANON_TOOL_TABLE &t) { | 
    
    
    50  | 
     | 
        return  bp::object("Tool(T%d D%.4f I%.4f J%.4f Q%d offset: " % | 
    
    
    51  | 
     | 
    		       bp::make_tuple(t.toolno,  t.diameter,  | 
    
    
    52  | 
     | 
    				      t.frontangle,t.backangle, t.orientation) +  | 
    
    
    53  | 
     | 
    		       emcpose_2_obj(t.offset) + ")");  | 
    
    
    54  | 
     | 
    }  | 
    
    
    55  | 
     | 
     | 
    
    
    56  | 
     | 
    static void tool_zero( CANON_TOOL_TABLE &t) { | 
    
    
    57  | 
     | 
        t.toolno = -1;  | 
    
    
    58  | 
     | 
        ZERO_EMC_POSE(t.offset);  | 
    
    
    59  | 
     | 
        t.diameter = 0.0;  | 
    
    
    60  | 
     | 
        t.frontangle = 0.0;  | 
    
    
    61  | 
     | 
        t.backangle = 0.0;  | 
    
    
    62  | 
     | 
        t.orientation = 0;  | 
    
    
    63  | 
     | 
    }  | 
    
    
    64  | 
     | 
    static void carte_zero( PmCartesian &c) { | 
    
    
    65  | 
     | 
        c.x = 0.0;  | 
    
    
    66  | 
     | 
        c.y = 0.0;  | 
    
    
    67  | 
     | 
        c.z = 0.0;  | 
    
    
    68  | 
     | 
    }  | 
    
    
    69  | 
     | 
     | 
    
    
    70  | 
     | 
    static void pose_zero( EmcPose &p) { ZERO_EMC_POSE(p); } | 
    
    
    71  | 
     | 
     | 
    
    
    72  | 
     | 
     | 
    
    
    73  | 
    68  | 
    void export_EmcTypes()  | 
    
    
    74  | 
     | 
    { | 
    
    
    75  | 
     | 
        using namespace boost::python;  | 
    
    
    76  | 
     | 
        using namespace boost;  | 
    
    
    77  | 
     | 
     | 
    
    
    78  | 
     | 
        // PmCartesian and EmcPose make sense to be instantiable  | 
    
    
    79  | 
     | 
        // within Python, since some canon calls take these as parameter  | 
    
    
    80  | 
     | 
        class_<PmCartesian, noncopyable>("PmCartesian","EMC cartesian postition") | 
    
    
    81  | 
    136  | 
    	.def_readwrite("x",&PmCartesian::x) | 
    
    
    82  | 
    68  | 
    	.def_readwrite("y",&PmCartesian::y) | 
    
    
    83  | 
    68  | 
    	.def_readwrite("z",&PmCartesian::z) | 
    
    
    84  | 
    68  | 
    	.def("__str__", &pmcartesian_str) | 
    
    
    85  | 
     | 
    	.def("zero", &carte_zero) | 
    
    
    86  | 
    68  | 
    	;  | 
    
    
    87  | 
     | 
     | 
    
    
    88  | 
     | 
        class_<EmcPose>("EmcPose","EMC pose") | 
    
    
    89  | 
    136  | 
    	.def_readwrite("tran",&EmcPose::tran) | 
    
    
    90  | 
    68  | 
    	.add_property("x", &get_x, &set_x) | 
    
    
    91  | 
    68  | 
    	.add_property("y", &get_y, &set_y) | 
    
    
    92  | 
    68  | 
    	.add_property("z", &get_z, &set_z) | 
    
    
    93  | 
    68  | 
    	.def_readwrite("a",&EmcPose::a) | 
    
    
    94  | 
    68  | 
    	.def_readwrite("b",&EmcPose::b) | 
    
    
    95  | 
    68  | 
    	.def_readwrite("c",&EmcPose::c) | 
    
    
    96  | 
    68  | 
    	.def_readwrite("u",&EmcPose::u) | 
    
    
    97  | 
    68  | 
    	.def_readwrite("v",&EmcPose::v) | 
    
    
    98  | 
    68  | 
    	.def_readwrite("w",&EmcPose::w) | 
    
    
    99  | 
    68  | 
    	.def("__str__", &emcpose_str) | 
    
    
    100  | 
     | 
    	.def("zero", &pose_zero) | 
    
    
    101  | 
    68  | 
    	;  | 
    
    
    102  | 
     | 
     | 
    
    
    103  | 
     | 
        // leave CANON_TOOL_TABLE copyable/assignable because assignment is  | 
    
    
    104  | 
     | 
        // used a lot when fiddling with tooltable entries  | 
    
    
    105  | 
     | 
        class_<CANON_TOOL_TABLE >("CANON_TOOL_TABLE","Tool description" ,no_init) | 
    
    
    106  | 
    136  | 
    	.def_readwrite("toolno", &CANON_TOOL_TABLE::toolno) | 
    
    
    107  | 
    68  | 
    	.def_readwrite("offset", &CANON_TOOL_TABLE::offset) | 
    
    
    108  | 
    68  | 
    	.def_readwrite("diameter", &CANON_TOOL_TABLE::diameter) | 
    
    
    109  | 
    68  | 
    	.def_readwrite("frontangle", &CANON_TOOL_TABLE::frontangle) | 
    
    
    110  | 
    68  | 
    	.def_readwrite("backangle", &CANON_TOOL_TABLE::backangle) | 
    
    
    111  | 
    68  | 
    	.def_readwrite("orientation", &CANON_TOOL_TABLE::orientation) | 
    
    
    112  | 
    68  | 
    	.def("__str__", &tool_str) | 
    
    
    113  | 
     | 
    	.def("zero", &tool_zero) | 
    
    
    114  | 
    68  | 
    	;  | 
    
    
    115  | 
    413  | 
    }  |