PyObject * PyOCIO_MatrixTransform_Identity(PyObject * /*self*/) { OCIO_PYTRY_ENTER() std::vector<float> matrix(16); std::vector<float> offset(4); MatrixTransform::Identity(&matrix[0], &offset[0]); PyObject* pymatrix = CreatePyListFromFloatVector(matrix); PyObject* pyoffset = CreatePyListFromFloatVector(offset); PyObject* pyreturnval = Py_BuildValue("(OO)", pymatrix, pyoffset); Py_DECREF(pymatrix); Py_DECREF(pyoffset); return pyreturnval; OCIO_PYTRY_EXIT(NULL) }
PyObject * PyOCIO_MatrixTransform_getValue(PyObject * self) { OCIO_PYTRY_ENTER() ConstMatrixTransformRcPtr transform = GetConstMatrixTransform(self); std::vector<float> matrix(16); std::vector<float> offset(4); transform->getValue(&matrix[0], &offset[0]); PyObject* pymatrix = CreatePyListFromFloatVector(matrix); PyObject* pyoffset = CreatePyListFromFloatVector(offset); PyObject* pyreturnval = Py_BuildValue("(OO)", pymatrix, pyoffset); Py_DECREF(pymatrix); Py_DECREF(pyoffset); return pyreturnval; OCIO_PYTRY_EXIT(NULL) }
PyObject * PyOCIO_AllocationTransform_getVars(PyObject * self) { OCIO_PYTRY_ENTER() ConstAllocationTransformRcPtr transform = GetConstAllocationTransform(self); std::vector<float> vars(transform->getNumVars()); if(!vars.empty()) transform->getVars(&vars[0]); return CreatePyListFromFloatVector(vars); OCIO_PYTRY_EXIT(NULL) }
PyObject * PyOCIO_CDLTransform_getSOP(PyObject * self) { OCIO_PYTRY_ENTER() ConstCDLTransformRcPtr transform = GetConstCDLTransform(self); std::vector<float> data(9); transform->getSOP(&data[0]); return CreatePyListFromFloatVector(data); OCIO_PYTRY_EXIT(NULL) }
PyObject * PyOCIO_MatrixTransform_getOffset(PyObject * self) { OCIO_PYTRY_ENTER() ConstMatrixTransformRcPtr transform = GetConstMatrixTransform(self); std::vector<float> offset(4); transform->getOffset(&offset[0]); return CreatePyListFromFloatVector(offset); OCIO_PYTRY_EXIT(NULL) }
PyObject * PyOCIO_MatrixTransform_getMatrix(PyObject * self) { OCIO_PYTRY_ENTER() ConstMatrixTransformRcPtr transform = GetConstMatrixTransform(self); std::vector<float> matrix(16); transform->getMatrix(&matrix[0]); return CreatePyListFromFloatVector(matrix); OCIO_PYTRY_EXIT(NULL) }
PyObject * PyOCIO_MatrixTransform_Fit(PyObject * /*self*/, PyObject * args) { OCIO_PYTRY_ENTER() PyObject* pyoldmin = 0; PyObject* pyoldmax = 0; PyObject* pynewmin = 0; PyObject* pynewmax = 0; if (!PyArg_ParseTuple(args,"OOOO:Fit", &pyoldmin, &pyoldmax, &pynewmin, &pynewmax)) return NULL; std::vector<float> oldmin; if(!FillFloatVectorFromPySequence(pyoldmin, oldmin) || (oldmin.size() != 4)) { PyErr_SetString(PyExc_TypeError, "First argument must be a float array, size 4"); return 0; } std::vector<float> oldmax; if(!FillFloatVectorFromPySequence(pyoldmax, oldmax) || (oldmax.size() != 4)) { PyErr_SetString(PyExc_TypeError, "Second argument must be a float array, size 4"); return 0; } std::vector<float> newmin; if(!FillFloatVectorFromPySequence(pynewmin, newmin) || (newmin.size() != 4)) { PyErr_SetString(PyExc_TypeError, "Third argument must be a float array, size 4"); return 0; } std::vector<float> newmax; if(!FillFloatVectorFromPySequence(pynewmax, newmax) || (newmax.size() != 4)) { PyErr_SetString(PyExc_TypeError, "Fourth argument must be a float array, size 4"); return 0; } std::vector<float> matrix(16); std::vector<float> offset(4); MatrixTransform::Fit(&matrix[0], &offset[0], &oldmin[0], &oldmax[0], &newmin[0], &newmax[0]); PyObject* pymatrix = CreatePyListFromFloatVector(matrix); PyObject* pyoffset = CreatePyListFromFloatVector(offset); PyObject* pyreturnval = Py_BuildValue("(OO)", pymatrix, pyoffset); Py_DECREF(pymatrix); Py_DECREF(pyoffset); return pyreturnval; OCIO_PYTRY_EXIT(NULL) }