Skip to content
Snippets Groups Projects
lib_point.cpp 1.45 KiB
Newer Older
  • Learn to ignore specific revisions
  • #include "library.h"
    
    namespace py = pybind11;
    
    void define_point(py::module & m)
    {
        // Note that Point2D has dynamic attributes, allowing students to add additional methods to it
    
        py::class_<sc2::Point2D>(m, "Point2D", py::dynamic_attr())
            .def(py::init<float, float>())
            .def(py::init())
            .def_readwrite("x", &sc2::Point2D::x)
            .def_readwrite("y", &sc2::Point2D::y)
            .def(py::self += py::self)
            .def(py::self -= py::self)
            .def(py::self *= float())
            .def(py::self /= float())
            // TODO: These does not compile
            //.def(py::self == py::self)
            //.def(py::self != py::self)
            .def(py::self + py::self)
            .def(py::self - py::self)
            .def(py::self * float())
            .def(float() * py::self)
            .def(py::self / float())
            .def(float() / py::self)
            .def("__repr__",
                [](const sc2::Point2D & p) {
                    return "<Point2D: (" + std::to_string(p.x) + ", " + std::to_string(p.y) + ")>";
                })
            .def("__str__", 
                [](const sc2::Point2D & p) {
                    return "(" + std::to_string(p.x) + ", " + std::to_string(p.y) + ")";
                });
    
    
           py::class_<sc2::Point2DI>(m, "Point2DI", py::dynamic_attr())
    
               .def(py::init<int, int>())
               .def_readwrite("x", &sc2::Point2DI::x)
               .def_readwrite("y", &sc2::Point2DI::y)
               .def(py::self == py::self)
               .def(py::self != py::self);
    }