%PDF- %PDF-
Direktori : /usr/include/Imath/ |
Current File : //usr/include/Imath/PyImathColor4Array2DImpl.h |
// // SPDX-License-Identifier: BSD-3-Clause // Copyright Contributors to the OpenEXR Project. // // clang-format off #ifndef _PyImathColor4Array2DImpl_h_ #define _PyImathColor4Array2DImpl_h_ // // This .C file was turned into a header file so that instantiations // of the various V3* types can be spread across multiple files in // order to work around MSVC limitations. // #include <Python.h> #include <boost/python.hpp> #include <boost/python/make_constructor.hpp> #include <boost/format.hpp> #include "PyImath.h" #include "PyImathMathExc.h" #include "PyImathDecorators.h" namespace PyImath { using namespace boost::python; using namespace IMATH_NAMESPACE; template <class T> struct Color4Array2DName { static const char *value(); }; // XXX fixme - template this // really this should get generated automatically... template <class T,int index> static FixedArray2D<T> Color4Array2D_get(FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va) { return FixedArray2D<T>(&va(0,0)[index], va.len().x,va.len().y, 4*va.stride().x, va.stride().y, va.handle()); } // template <class T> // static FixedArray2D<IMATH_NAMESPACE::Color4<T> > // Color4Array_cross0(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &vb) // { // PY_IMATH_LEAVE_PYTHON; // IMATH_NAMESPACE::Vec2<size_t> len = va.match_dimension(vb); // FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); // for (size_t i = 0; i < len; ++i) // f(i,j) = va(i,j).cross(vb(i,j)); // return f; // } // // template <class T> // static FixedArray2D<IMATH_NAMESPACE::Color4<T> > // Color4Array_cross1(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const IMATH_NAMESPACE::Color4<T> &vb) // { // PY_IMATH_LEAVE_PYTHON; // IMATH_NAMESPACE::Vec2<size_t> len = va.len(); // FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); // for (size_t i = 0; i < len; ++i) // f(i,j) = va(i,j).cross(vb); // return f; // } // // template <class T> // static FixedArray2D<T> // Color4Array_dot0(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &vb) // { // PY_IMATH_LEAVE_PYTHON; // IMATH_NAMESPACE::Vec2<size_t> len = va.match_dimension(vb); // FixedArray2D<T> f(len); // for (size_t i = 0; i < len; ++i) // f(i,j) = va(i,j).dot(vb(i,j)); // return f; // } // // template <class T> // static FixedArray2D<T> // Color4Array_dot1(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const IMATH_NAMESPACE::Color4<T> &vb) // { // PY_IMATH_LEAVE_PYTHON; // IMATH_NAMESPACE::Vec2<size_t> len = va.len(); // FixedArray2D<T> f(len); // for (size_t i = 0; i < len; ++i) // f(i,j) = va(i,j).dot(vb); // return f; // } // template <class T> // static FixedArray2D<T> // Color4Array_length(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va) // { // PY_IMATH_LEAVE_PYTHON; // IMATH_NAMESPACE::Vec2<size_t> len = va.len(); // FixedArray2D<T> f(len); // for (size_t i = 0; i < len; ++i) // f(i,j) = va(i,j).length(); // return f; // } // // template <class T> // static FixedArray2D<T> // Color4Array_length2(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va) // { // PY_IMATH_LEAVE_PYTHON; // IMATH_NAMESPACE::Vec2<size_t> len = va.len(); // FixedArray2D<T> f(len); // for (size_t i = 0; i < len; ++i) // f(i,j) = va(i,j).length2(); // return f; // } // // template <class T> // static FixedArray2D<IMATH_NAMESPACE::Color4<T> > & // Color4Array_normalize(FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va) // { // PY_IMATH_LEAVE_PYTHON; // IMATH_NAMESPACE::Vec2<size_t> len = va.len(); // for (size_t i = 0; i < len; ++i) // va(i,j).normalize(); // return va; // } // // template <class T> static FixedArray2D<IMATH_NAMESPACE::Color4<T> > // Color4Array_normalized(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va) // { // PY_IMATH_LEAVE_PYTHON; // IMATH_NAMESPACE::Vec2<size_t> len = va.len(); // FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); // for (size_t i = 0; i < len; ++i) // f(i,j) = va(i,j).normalized(); // return f; // } // template <class T> static FixedArray2D<IMATH_NAMESPACE::Color4<T> > Color4Array_mulT(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, T t) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.len(); FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) f(i,j) = va(i,j) * t; return f; } // // template <class T, class U> // static FixedArray2D<IMATH_NAMESPACE::Color4<T> > // Color4Array_mulM44(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const IMATH_NAMESPACE::Matrix44<U> &m) // { // PY_IMATH_LEAVE_PYTHON; // IMATH_NAMESPACE::Vec2<size_t> len = va.len(); // FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); // for (size_t i = 0; i < len; ++i) // f(i,j) = va(i,j) * m; // return f; // } // template <class T> static FixedArray2D<IMATH_NAMESPACE::Color4<T> > Color4Array_mulArrayT(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const FixedArray2D<T> &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.match_dimension(vb); FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) f(i,j) = va(i,j) * vb(i,j); return f; } template <class T> static const FixedArray2D<IMATH_NAMESPACE::Color4<T> > & Color4Array_imulT(FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, T t) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.len(); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) va(i,j) *= t; return va; } template <class T> static const FixedArray2D<IMATH_NAMESPACE::Color4<T> > & Color4Array_imulArrayT(FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const FixedArray2D<T> &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.match_dimension(vb); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) va(i,j) *= vb(i,j); return va; } template <class T> static FixedArray2D<IMATH_NAMESPACE::Color4<T> > Color4Array_divT(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, T t) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.len(); FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) f(i,j) = va(i,j) / t; return f; } template <class T> static FixedArray2D<IMATH_NAMESPACE::Color4<T> > Color4Array_divArrayT(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const FixedArray2D<T> &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.match_dimension(vb); FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) f(i,j) = va(i,j) / vb(i,j); return f; } template <class T> static const FixedArray2D<IMATH_NAMESPACE::Color4<T> > & Color4Array_idivT(FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, T t) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.len(); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) va(i,j) /= t; return va; } template <class T> static const FixedArray2D<IMATH_NAMESPACE::Color4<T> > & Color4Array_idivArrayT(FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const FixedArray2D<T> &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.match_dimension(vb); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) va(i,j) /= vb(i,j); return va; } template <class T> static FixedArray2D<IMATH_NAMESPACE::Color4<T> > Color4Array_add(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.match_dimension(vb); FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) f(i,j) = va(i,j) + vb(i,j); return f; } template <class T> static FixedArray2D<IMATH_NAMESPACE::Color4<T> > Color4Array_addColor(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const IMATH_NAMESPACE::Color4<T> &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.len(); FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) f(i,j) = va(i,j) + vb; return f; } template <class T> static FixedArray2D<IMATH_NAMESPACE::Color4<T> > Color4Array_sub(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.match_dimension(vb); FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) f(i,j) = va(i,j) - vb(i,j); return f; } template <class T> static FixedArray2D<IMATH_NAMESPACE::Color4<T> > Color4Array_subColor(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const IMATH_NAMESPACE::Color4<T> &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.len(); FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) f(i,j) = va(i,j) - vb; return f; } template <class T> static FixedArray2D<IMATH_NAMESPACE::Color4<T> > Color4Array_rsubColor(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const IMATH_NAMESPACE::Color4<T> &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.len(); FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) f(i,j) = vb - va(i,j); return f; } template <class T> static FixedArray2D<IMATH_NAMESPACE::Color4<T> > Color4Array_mul(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.match_dimension(vb); FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) f(i,j) = va(i,j) * vb(i,j); return f; } template <class T> static FixedArray2D<IMATH_NAMESPACE::Color4<T> > Color4Array_mulColor(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const IMATH_NAMESPACE::Color4<T> &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.len(); FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) f(i,j) = va(i,j) * vb; return f; } template <class T> static FixedArray2D<IMATH_NAMESPACE::Color4<T> > Color4Array_div(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.match_dimension(vb); FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) f(i,j) = va(i,j) / vb(i,j); return f; } template <class T> static FixedArray2D<IMATH_NAMESPACE::Color4<T> > Color4Array_divColor(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const IMATH_NAMESPACE::Color4<T> &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.len(); FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) f(i,j) = va(i,j) / vb; return f; } template <class T> static FixedArray2D<IMATH_NAMESPACE::Color4<T> > Color4Array_neg(const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.len(); FixedArray2D<IMATH_NAMESPACE::Color4<T> > f(len); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) f(i,j) = -va(i,j); return f; } template <class T> static const FixedArray2D<IMATH_NAMESPACE::Color4<T> > & Color4Array_iadd(FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.match_dimension(vb); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) va(i,j) += vb(i,j); return va; } template <class T> static const FixedArray2D<IMATH_NAMESPACE::Color4<T> > & Color4Array_iaddColor(FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const IMATH_NAMESPACE::Color4<T> &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.len(); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) va(i,j) += vb; return va; } template <class T> static const FixedArray2D<IMATH_NAMESPACE::Color4<T> > & Color4Array_isub(FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.match_dimension(vb); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) va(i,j) -= vb(i,j); return va; } template <class T> static const FixedArray2D<IMATH_NAMESPACE::Color4<T> > & Color4Array_isubColor(FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const IMATH_NAMESPACE::Color4<T> &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.len(); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) va(i,j) -= vb; return va; } template <class T> static const FixedArray2D<IMATH_NAMESPACE::Color4<T> > & Color4Array_imul(FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.match_dimension(vb); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) va(i,j) *= vb(i,j); return va; } template <class T> static const FixedArray2D<IMATH_NAMESPACE::Color4<T> > & Color4Array_imulColor(FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const IMATH_NAMESPACE::Color4<T> &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.len(); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) va(i,j) *= vb; return va; } template <class T> static const FixedArray2D<IMATH_NAMESPACE::Color4<T> > & Color4Array_idiv(FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const FixedArray2D<IMATH_NAMESPACE::Color4<T> > &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.match_dimension(vb); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) va(i,j) /= vb(i,j); return va; } template <class T> static const FixedArray2D<IMATH_NAMESPACE::Color4<T> > & Color4Array_idivColor(FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const IMATH_NAMESPACE::Color4<T> &vb) { PY_IMATH_LEAVE_PYTHON; IMATH_NAMESPACE::Vec2<size_t> len = va.len(); for (size_t j = 0; j < len.y; ++j) for (size_t i = 0; i < len.x; ++i) va(i,j) /= vb; return va; } template <class T> static void setItemTuple(FixedArray2D<IMATH_NAMESPACE::Color4<T> > &va, const tuple &index, const tuple &t) { if(t.attr("__len__")() == 4 && index.attr("__len__")() == 2) { Color4<T> v; v.r = extract<T>(t[0]); v.g = extract<T>(t[1]); v.b = extract<T>(t[2]); v.a = extract<T>(t[3]); va(va.canonical_index(extract<Py_ssize_t>(index[0]),va.len()[0]), va.canonical_index(extract<Py_ssize_t>(index[1]),va.len()[1])) = v; } else throw std::invalid_argument ("tuple of length 4 expected"); } template <class T> class_<FixedArray2D<IMATH_NAMESPACE::Color4<T> > > register_Color4Array2D() { class_<FixedArray2D<IMATH_NAMESPACE::Color4<T> > > color4Array2D_class = FixedArray2D<IMATH_NAMESPACE::Color4<T> >::register_(Color4Array2DName<T>::value(),"Fixed length 2d array of IMATH_NAMESPACE::Color4"); color4Array2D_class .add_property("r",&Color4Array2D_get<T,0>) .add_property("g",&Color4Array2D_get<T,1>) .add_property("b",&Color4Array2D_get<T,2>) .add_property("a",&Color4Array2D_get<T,3>) // .def("dot",&Color4Array_dot0<T>) // .def("dot",&Color4Array_dot1<T>) // .def("cross", &Color4Array_cross0<T>) // .def("cross", &Color4Array_cross1<T>) // .def("length", &Color4Array_length<T>) // .def("length2", &Color4Array_length2<T>) // .def("normalize", &Color4Array_normalize<T>,return_internal_reference<>()) // .def("normalized", &Color4Array_normalized<T>) .def("__setitem__", &setItemTuple<T>) .def("__mul__", &Color4Array_mulT<T>) // .def("__mul__", &Color4Array_mulM44<T, float>) // .def("__mul__", &Color4Array_mulM44<T, double>) .def("__rmul__", &Color4Array_mulT<T>) .def("__mul__", &Color4Array_mulArrayT<T>) .def("__rmul__", &Color4Array_mulArrayT<T>) .def("__imul__", &Color4Array_imulT<T>,return_internal_reference<>()) .def("__imul__", &Color4Array_imulArrayT<T>,return_internal_reference<>()) .def("__div__", &Color4Array_divT<T>) .def("__div__", &Color4Array_divArrayT<T>) .def("__truediv__", &Color4Array_divT<T>) .def("__truediv__", &Color4Array_divArrayT<T>) .def("__idiv__", &Color4Array_idivT<T>,return_internal_reference<>()) .def("__idiv__", &Color4Array_idivArrayT<T>,return_internal_reference<>()) .def("__itruediv__", &Color4Array_idivT<T>,return_internal_reference<>()) .def("__itruediv__", &Color4Array_idivArrayT<T>,return_internal_reference<>()) .def("__add__",&Color4Array_add<T>) .def("__add__",&Color4Array_addColor<T>) .def("__radd__",&Color4Array_addColor<T>) .def("__sub__",&Color4Array_sub<T>) .def("__sub__",&Color4Array_subColor<T>) .def("__rsub__",&Color4Array_rsubColor<T>) .def("__mul__",&Color4Array_mul<T>) .def("__mul__",&Color4Array_mulColor<T>) .def("__rmul__",&Color4Array_mulColor<T>) .def("__div__",&Color4Array_div<T>) .def("__div__",&Color4Array_divColor<T>) .def("__truediv__",&Color4Array_div<T>) .def("__truediv__",&Color4Array_divColor<T>) .def("__neg__",&Color4Array_neg<T>) .def("__iadd__",&Color4Array_iadd<T>, return_internal_reference<>()) .def("__iadd__",&Color4Array_iaddColor<T>, return_internal_reference<>()) .def("__isub__",&Color4Array_isub<T>, return_internal_reference<>()) .def("__isub__",&Color4Array_isubColor<T>, return_internal_reference<>()) .def("__imul__",&Color4Array_imul<T>, return_internal_reference<>()) .def("__imul__",&Color4Array_imulColor<T>, return_internal_reference<>()) .def("__idiv__",&Color4Array_idiv<T>, return_internal_reference<>()) .def("__idiv__",&Color4Array_idivColor<T>, return_internal_reference<>()) .def("__itruediv__",&Color4Array_idiv<T>, return_internal_reference<>()) .def("__itruediv__",&Color4Array_idivColor<T>, return_internal_reference<>()) ; add_comparison_functions(color4Array2D_class); decoratecopy(color4Array2D_class); return color4Array2D_class; } } // namespace PyImath #endif // _PyImathColor4ArrayImpl_h_