orange: added Object.insertPoseKey to continue with the attempt to make nla/path walkcycle baking to actions
This commit is contained in:
@@ -197,6 +197,7 @@ static PyObject *Object_setEuler( BPy_Object * self, PyObject * args );
|
|||||||
static PyObject *Object_setMatrix( BPy_Object * self, PyObject * args );
|
static PyObject *Object_setMatrix( BPy_Object * self, PyObject * args );
|
||||||
static PyObject *Object_setIpo( BPy_Object * self, PyObject * args );
|
static PyObject *Object_setIpo( BPy_Object * self, PyObject * args );
|
||||||
static PyObject *Object_insertIpoKey( BPy_Object * self, PyObject * args );
|
static PyObject *Object_insertIpoKey( BPy_Object * self, PyObject * args );
|
||||||
|
static PyObject *Object_insertPoseKey( BPy_Object * self, PyObject * args );
|
||||||
static PyObject *Object_setLocation( BPy_Object * self, PyObject * args );
|
static PyObject *Object_setLocation( BPy_Object * self, PyObject * args );
|
||||||
static PyObject *Object_setMaterials( BPy_Object * self, PyObject * args );
|
static PyObject *Object_setMaterials( BPy_Object * self, PyObject * args );
|
||||||
static PyObject *Object_setName( BPy_Object * self, PyObject * args );
|
static PyObject *Object_setName( BPy_Object * self, PyObject * args );
|
||||||
@@ -517,6 +518,8 @@ works only if self and the object specified are of the same type."},
|
|||||||
"() - Unlink ipo from this object"},
|
"() - Unlink ipo from this object"},
|
||||||
{"insertIpoKey", ( PyCFunction ) Object_insertIpoKey, METH_VARARGS,
|
{"insertIpoKey", ( PyCFunction ) Object_insertIpoKey, METH_VARARGS,
|
||||||
"( Object IPO type ) - Inserts a key into IPO"},
|
"( Object IPO type ) - Inserts a key into IPO"},
|
||||||
|
{"insertPoseKey", ( PyCFunction ) Object_insertPoseKey, METH_VARARGS,
|
||||||
|
"( Object Pose type ) - Inserts a key into Action"},
|
||||||
{"getAllProperties", ( PyCFunction ) Object_getAllProperties,
|
{"getAllProperties", ( PyCFunction ) Object_getAllProperties,
|
||||||
METH_NOARGS,
|
METH_NOARGS,
|
||||||
"() - Get all the properties from this object"},
|
"() - Get all the properties from this object"},
|
||||||
@@ -2000,7 +2003,7 @@ static PyObject *Object_setIpo( BPy_Object * self, PyObject * args )
|
|||||||
static PyObject *Object_insertIpoKey( BPy_Object * self, PyObject * args )
|
static PyObject *Object_insertIpoKey( BPy_Object * self, PyObject * args )
|
||||||
{
|
{
|
||||||
Object *ob= self->object;
|
Object *ob= self->object;
|
||||||
int key = 0;
|
int key = 0;
|
||||||
char *actname= NULL;
|
char *actname= NULL;
|
||||||
|
|
||||||
if( !PyArg_ParseTuple( args, "i", &( key ) ) )
|
if( !PyArg_ParseTuple( args, "i", &( key ) ) )
|
||||||
@@ -2055,6 +2058,59 @@ static PyObject *Object_insertIpoKey( BPy_Object * self, PyObject * args )
|
|||||||
return EXPP_incr_ret( Py_None );
|
return EXPP_incr_ret( Py_None );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Object_insertPoseKey()
|
||||||
|
* inserts Action Pose key (for LOC, ROT, SIZE, LOCROT, or LOCROTSIZE)
|
||||||
|
*/
|
||||||
|
|
||||||
|
static PyObject *Object_insertPoseKey( BPy_Object * self, PyObject * args )
|
||||||
|
{
|
||||||
|
Object *ob= self->object;
|
||||||
|
char *chanName;
|
||||||
|
|
||||||
|
/* for doing the time trick, similar to editaction bake_action_with_client() */
|
||||||
|
int oldframe;
|
||||||
|
int curframe;
|
||||||
|
|
||||||
|
if( !PyArg_ParseTuple( args, "si", &chanName, &curframe ) )
|
||||||
|
return ( EXPP_ReturnPyObjError( PyExc_AttributeError, "expected a string and an int argument" ) );
|
||||||
|
|
||||||
|
oldframe = G.scene->r.cfra;
|
||||||
|
G.scene->r.cfra = curframe;
|
||||||
|
|
||||||
|
/* Apply the object ipo */
|
||||||
|
/* uses the current action of the object */
|
||||||
|
extract_pose_from_action(ob->pose, ob->action, curframe);
|
||||||
|
where_is_pose(ob);
|
||||||
|
|
||||||
|
insertkey(&ob->id, ID_PO, chanName, NULL, AC_LOC_X);
|
||||||
|
insertkey(&ob->id, ID_PO, chanName, NULL, AC_LOC_Y);
|
||||||
|
insertkey(&ob->id, ID_PO, chanName, NULL, AC_LOC_Z);
|
||||||
|
insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_X);
|
||||||
|
insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_Y);
|
||||||
|
insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_Z);
|
||||||
|
insertkey(&ob->id, ID_PO, chanName, NULL, AC_QUAT_W);
|
||||||
|
insertkey(&ob->id, ID_PO, chanName, NULL, AC_SIZE_X);
|
||||||
|
insertkey(&ob->id, ID_PO, chanName, NULL, AC_SIZE_Y);
|
||||||
|
insertkey(&ob->id, ID_PO, chanName, NULL, AC_SIZE_Z);
|
||||||
|
|
||||||
|
allspace(REMAKEIPO, 0);
|
||||||
|
EXPP_allqueue(REDRAWIPO, 0);
|
||||||
|
EXPP_allqueue(REDRAWVIEW3D, 0);
|
||||||
|
EXPP_allqueue(REDRAWACTION, 0);
|
||||||
|
EXPP_allqueue(REDRAWNLA, 0);
|
||||||
|
|
||||||
|
G.scene->r.cfra = oldframe;
|
||||||
|
|
||||||
|
/* restore */
|
||||||
|
extract_pose_from_action(ob->pose, ob->action, G.scene->r.cfra);
|
||||||
|
where_is_pose(ob);
|
||||||
|
|
||||||
|
allqueue(REDRAWACTION, 1);
|
||||||
|
|
||||||
|
return EXPP_incr_ret( Py_None );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static PyObject *Object_setLocation( BPy_Object * self, PyObject * args )
|
static PyObject *Object_setLocation( BPy_Object * self, PyObject * args )
|
||||||
|
|||||||
Reference in New Issue
Block a user