22 #include "pybind11/pybind11.h" 23 #include "pybind11/eigen.h" 24 #include "pybind11/stl.h" 26 #include "ndarray/pybind11.h" 40 [](
auto & mod,
auto &
cls)
mutable {
43 cls.attr(
"XX") = py::cast(int(AffineTransform::Parameters::XX));
44 cls.attr(
"YX") = py::cast(int(AffineTransform::Parameters::YX));
45 cls.attr(
"XY") = py::cast(int(AffineTransform::Parameters::XY));
46 cls.attr(
"YY") = py::cast(int(AffineTransform::Parameters::YY));
47 cls.attr(
"X") = py::cast(int(AffineTransform::Parameters::X));
48 cls.attr(
"Y") = py::cast(int(AffineTransform::Parameters::Y));
51 cls.def(py::init<>());
52 cls.def(py::init<Eigen::Matrix3d const &>(),
"matrix"_a);
53 cls.def(py::init<Eigen::Matrix2d const &>(),
"linear"_a);
54 cls.def(py::init<Eigen::Vector2d const &>(),
"translation"_a);
55 cls.def(py::init<Eigen::Matrix2d const &, Eigen::Vector2d const &>(),
56 "linear"_a,
"translation"_a);
57 cls.def(py::init<LinearTransform const &>(),
"linear"_a);
58 cls.def(py::init<Extent2D const &>(),
"translation"_a);
59 cls.def(py::init<LinearTransform const &, Extent2D const &>(),
"linear"_a,
"translation"_a);
62 cls.def(
"__mul__", &AffineTransform::operator*, py::is_operator());
64 py::overload_cast<Point2D const &>(&AffineTransform::operator(), py::const_));
66 py::overload_cast<Extent2D const &>(&AffineTransform::operator(), py::const_));
67 cls.def(
"__setitem__", [](AffineTransform &self, int i, double value) {
69 PyErr_Format(PyExc_IndexError,
"Invalid index for AffineTransform: %d", i);
70 throw py::error_already_set();
75 if (row < 0 || row > 2 || col < 0 || col > 2) {
76 PyErr_Format(PyExc_IndexError,
"Invalid index for AffineTransform: %d, %d", row, col);
77 throw py::error_already_set();
79 return (
self.getMatrix())(
row,
col);
83 PyErr_Format(PyExc_IndexError,
"Invalid index for AffineTransform: %d", i);
84 throw py::error_already_set();
89 return py::str(py::cast(
self.getMatrix())); }
92 return py::str(
"AffineTransform(\n{}\n)").format(py::cast(
self.getMatrix()));
95 return py::make_tuple(
cls, py::make_tuple(py::cast(
self.getMatrix())));
99 cls.def(
"inverted", &AffineTransform::inverted);
100 cls.def(
"isIdentity", &AffineTransform::isIdentity);
103 cls.def(
"getMatrix", &AffineTransform::getMatrix);
104 cls.def(
"getParameterVector", &AffineTransform::getParameterVector);
105 cls.def(
"setParameterVector", &AffineTransform::setParameterVector);
106 cls.def_static(
"makeScaling", py::overload_cast<double>(&AffineTransform::makeScaling));
107 cls.def_static(
"makeScaling", py::overload_cast<double, double>(&AffineTransform::makeScaling));
108 cls.def_static(
"makeRotation", &AffineTransform::makeRotation,
"angle"_a);
109 cls.def_static(
"makeTranslation", &AffineTransform::makeTranslation,
"translation"_a);
pybind11::module module
The module object passed to the PYBIND11_MODULE block that contains this WrapperCollection.
A base class for image defects.
void wrapAffineTransform(utils::python::WrapperCollection &wrappers)
A helper class for subdividing pybind11 module across multiple translation units (i.e.
PyType wrapType(PyType cls, ClassWrapperCallback function, bool setModuleName=true)
Add a type (class or enum) wrapper, deferring method and other attribute definitions until finish() i...
AffineTransform makeAffineTransformFromTriple(Point2D const &p1, Point2D const &p2, Point2D const &p3, Point2D const &q1, Point2D const &q2, Point2D const &q3)