[Bf-python] getMatrix('worldspace') patch for bf-blender
Campbell Barton
cbarton at metavr.com
Sat Jun 26 03:38:00 CEST 2004
Hi Yall
This is a bigger issue then I expected.
getLocation(), getMatrix, getScale, getRot all can have the 'worldspace'
option BUT.
what happens to the class variables?
they need to sent an arg to the functions above.
I made it so they sent a null python object and made getMatrix account
for this but its a messy solution.
Another solution could be to use a wrapper function, this would work
cleanly for all functions above.
getMatrix(ob, arg)
{
if (arg == worldspace) {
return getMatrixWorldSpace(ob);
} elif (arg == localespace) {
return getMatrixLocaleSpace(ob);
}
}
getMatrixWorldSpace(ob)
{
... do the real stuff here
}
getMatrixLocaleSpace(ob)
{
... do the real stuff here
}
Campbell Barton wrote:
> Hi, have you compiled this?
>
> if (StringEqual (name, "mat"))
> return (Object_getMatrix (obj));
> if (StringEqual (name, "matrix"))
> return (Object_getMatrix (obj));
>
> This wont work since the new Object_getMatrix wants 2 args.
> Object_getMatrix (obj, PyArgs)
>
> Even if the arg is an empty python object it needs to be there.
> As I sead b4, I dobnt know how to do this.
>
> I need to create an empty Python arg and the problem will be solved.
>
> - Cam
>
>
>
>
> Gilbert, Joseph wrote:
>
>> Hi, :)
>> Looks good but I don't think it's necessary to have an internal
>> function because the getMatrix() will be backwards compatible anyway
>> (when no arg is used). The extra stringcompare functions in getattr will
>> never get called. Everything minus the internal function is perfect :)
>> Oh, I was thinking that this also needs to be done on the bone module
>> for rot/loc/size I think. Not sure where else this is applicable.
>>
>> static PyObject *Object_getMatrix (BPy_Object *self, PyObject *args);
>> ....
>> {"getMatrix", (PyCFunction)Object_getMatrix, METH_VARARGS,"Returns the
>> object matrix"},
>> .....
>> static PyObject *Object_getMatrix (BPy_Object *self, PyObject *args)
>> {
>> PyObject *matrix;
>> char *space = "localespace"; /* default to locale */
>>
>> if (!PyArg_ParseTuple(args, "|s", &space))
>> {
>> return (EXPP_ReturnPyObjError (PyExc_AttributeError,
>> "expected a string or nothing"));
>> }
>>
>> matrix = newMatrixObject(NULL, 4, 4);
>>
>> if (BLI_streq(space, "worldspace")) /* Worldspace matrix */
>> {
>> where_is_object(self->object);
>> Mat4CpyMat4(*((MatrixObject*)matrix)->matrix,
>> self->object->obmat);
>> } else if (BLI_streq(space, "localespace")) { /* Localespace matrix
>> */
>> object_to_mat4(self->object, *((MatrixObject*)matrix)->matrix);
>> } else {
>> return (EXPP_ReturnPyObjError (PyExc_RuntimeError, "correct
>> spaces are 'worldspace' and 'localespace', none defaults to
>> localespace"));
>> }
>> return matrix;
>> }
>> ....
>> if (StringEqual (name, "mat"))
>> return (Object_getMatrix (obj));
>> if (StringEqual (name, "matrix"))
>> return (Object_getMatrix (obj));
>> ....
>>
>> _______________________________________________
>> Bf-python mailing list
>> Bf-python at blender.org
>> http://www.blender.org/mailman/listinfo/bf-python
>>
>>
>>
>>
>
>
> _______________________________________________
> Bf-python mailing list
> Bf-python at blender.org
> http://www.blender.org/mailman/listinfo/bf-python
>
>
--
Campbell J Barton
133 Hope Street
Geelong West, Victoria 3218 Australia
URL: http://www.metavr.com
e-mail: cbarton at metavr.com
phone: AU (03) 5229 0241
More information about the Bf-python
mailing list