Exppython:

- Object: implemented getBoundBox and makeDisplayList methods
- NMesh and Object: small internal changes for nicer behavior
- Draw: added function PupMenu
- Docs: updated for the additions above
Auto build tiny fix: added the imbuf include dir to source/creator/Makefile.am
This commit is contained in:
2003-09-20 03:40:16 +00:00
parent 7a510b7240
commit c0303d78b4
10 changed files with 418 additions and 122 deletions

View File

@@ -97,6 +97,8 @@ static PyObject *Object_getName (BPy_Object *self);
static PyObject *Object_getParent (BPy_Object *self);
static PyObject *Object_getTracked (BPy_Object *self);
static PyObject *Object_getType (BPy_Object *self);
static PyObject *Object_getBoundBox (BPy_Object *self);
static PyObject *Object_makeDisplayList (BPy_Object *self);
static PyObject *Object_link (BPy_Object *self, PyObject *args);
static PyObject *Object_makeParent (BPy_Object *self, PyObject *args);
static PyObject *Object_materialUsage (BPy_Object *self, PyObject *args);
@@ -148,6 +150,12 @@ e.g. Mesh"},
"Returns the object's tracked object"},
{"getType", (PyCFunction)Object_getType, METH_NOARGS,
"Returns type of string of Object"},
{"getBoundBox", (PyCFunction)Object_getBoundBox, METH_NOARGS,
"Returns the object's bounding box"},
{"makeDisplayList", (PyCFunction)Object_makeDisplayList, METH_NOARGS,
"Update this object's Display List. Some changes like turning \n\
'SubSurf' on for a mesh need this method (followed by a Redraw) to \n\
show the changes on the 3d window."},
{"link", (PyCFunction)Object_link, METH_VARARGS,
"Links Object with data provided in the argument. The data must \n\
match the Object's type, so you cannot link a Lamp to a Mesh type object."},
@@ -320,55 +328,6 @@ PyObject *M_Object_New(PyObject *self, PyObject *args)
object->gameflag = OB_PROP;
object->lay = 1; // Layer, by default visible
switch(type)
{
case OB_ARMATURE:
/* TODO: Do we need to add something to G? (see the OB_LAMP case) */
object->data = add_armature();
break;
case OB_CAMERA:
/* TODO: Do we need to add something to G? (see the OB_LAMP case) */
object->data = add_camera();
break;
case OB_CURVE:
object->data = add_curve(OB_CURVE);
G.totcurve++;
break;
case OB_LAMP:
object->data = add_lamp();
G.totlamp++;
break;
case OB_MESH:
object->data = add_mesh();
G.totmesh++;
break;
/* TODO the following types will be supported later
case OB_SURF:
object->data = add_curve(OB_SURF);
G.totcurve++;
break;
case OB_FONT:
object->data = add_curve(OB_FONT);
break;
case OB_MBALL:
object->data = add_mball();
break;
case OB_IKA:
object->data = add_ika();
object->dt = OB_WIRE;
break;
case OB_LATTICE:
object->data = (void *)add_lattice();
object->dt = OB_WIRE;
break;
case OB_WAVE:
object->data = add_wave();
break;
*/
}
G.totobj++;
/* Create a Python object from it. */
@@ -534,8 +493,8 @@ PyObject *Object_Init (void)
static PyObject *Object_buildParts (BPy_Object *self)
{
void build_particle_system(Object *ob);
struct Object *obj = self->object;
build_particle_system( obj);
struct Object *obj = self->object;
build_particle_system( obj);
Py_INCREF (Py_None);
return (Py_None);
}
@@ -572,49 +531,98 @@ static PyObject *Object_clrParent (BPy_Object *self, PyObject *args)
static PyObject *Object_getData (BPy_Object *self)
{
PyObject * data_object;
Object * object = self->object;
/* If there's no data associated to the Object, then there's nothing to */
/* return. */
if (self->object->data == NULL)
if (object->data == NULL)
{
Py_INCREF (Py_None);
return (Py_None);
switch(object->type)
{
case OB_ARMATURE:
/* TODO: Do we need to add something to G? (see the OB_LAMP case) */
object->data = add_armature();
break;
case OB_CAMERA:
/* TODO: Do we need to add something to G? (see the OB_LAMP case) */
object->data = add_camera();
break;
case OB_CURVE:
object->data = add_curve(OB_CURVE);
G.totcurve++;
break;
case OB_LAMP:
object->data = add_lamp();
G.totlamp++;
break;
case OB_MESH:
object->data = add_mesh();
G.totmesh++;
break;
/* TODO the following types will be supported later
case OB_SURF:
object->data = add_curve(OB_SURF);
G.totcurve++;
break;
case OB_FONT:
object->data = add_curve(OB_FONT);
break;
case OB_MBALL:
object->data = add_mball();
break;
case OB_IKA:
object->data = add_ika();
object->dt = OB_WIRE;
break;
case OB_LATTICE:
object->data = (void *)add_lattice();
object->dt = OB_WIRE;
break;
case OB_WAVE:
object->data = add_wave();
break;
*/
default:
Py_INCREF (Py_None);
return (Py_None);
}
}
data_object = NULL;
switch (self->object->type)
switch (object->type)
{
case OB_ARMATURE:
data_object = Armature_CreatePyObject (self->object->data);
data_object = Armature_CreatePyObject (object->data);
break;
case OB_CAMERA:
data_object = Camera_CreatePyObject (self->object->data);
data_object = Camera_CreatePyObject (object->data);
break;
case OB_CURVE:
data_object = Curve_CreatePyObject (self->object->data);
data_object = Curve_CreatePyObject (object->data);
break;
case ID_IM:
data_object = Image_CreatePyObject (self->object->data);
data_object = Image_CreatePyObject (object->data);
break;
case ID_IP:
data_object = Ipo_CreatePyObject (self->object->data);
data_object = Ipo_CreatePyObject (object->data);
break;
case OB_LAMP:
data_object = Lamp_CreatePyObject (self->object->data);
data_object = Lamp_CreatePyObject (object->data);
break;
case ID_MA:
break;
case OB_MESH:
data_object = NMesh_CreatePyObject (self->object->data, self->object);
data_object = NMesh_CreatePyObject (object->data, object);
break;
case ID_OB:
data_object = Object_CreatePyObject (self->object->data);
data_object = Object_CreatePyObject (object->data);
break;
case ID_SCE:
break;
case ID_TXT:
data_object = Text_CreatePyObject (self->object->data);
data_object = Text_CreatePyObject (object->data);
break;
case ID_WO:
break;
@@ -781,6 +789,70 @@ static PyObject *Object_getType (BPy_Object *self)
}
}
static PyObject *Object_getBoundBox (BPy_Object *self)
{
int i;
float *vec = NULL;
PyObject *vector, *bbox;
if (!self->object->data)
return EXPP_ReturnPyObjError (PyExc_AttributeError,
"This object isn't linked to any object data (mesh, curve, etc) yet");
if (!self->object->bb) {
Mesh *me;
Curve *curve;
switch (self->object->type) {
case OB_MESH:
me = self->object->data;
if (!me->bb) tex_space_mesh(me);
vec = (float *)me->bb->vec;
break;
case OB_CURVE:
case OB_FONT:
case OB_SURF:
curve = self->object->data;
if (!curve->bb) tex_space_curve(curve);
vec = (float *)curve->bb->vec;
break;
default:
Py_INCREF (Py_None);
return Py_None;
}
}
else vec = (float *)self->object->bb->vec;
if (!vec)
return EXPP_ReturnPyObjError (PyExc_RuntimeError,
"couldn't retrieve bounding box data");
bbox = PyList_New(8);
if (!bbox)
return EXPP_ReturnPyObjError (PyExc_MemoryError,
"couldn't create pylist");
for (i = 0; i < 8; i++) {
vector = newVectorObject(vec, 3);
PyList_SET_ITEM(bbox, i, vector);
vec += 3;
}
return bbox;
}
static PyObject *Object_makeDisplayList (BPy_Object *self)
{
Object *ob = self->object;
if (ob->type == OB_FONT) text_to_curve(ob, 0);
makeDispList(ob);
Py_INCREF (Py_None);
return Py_None;
}
static PyObject *Object_link (BPy_Object *self, PyObject *args)
{
PyObject * py_data;
@@ -801,7 +873,7 @@ static PyObject *Object_link (BPy_Object *self, PyObject *args)
if (Curve_CheckPyObject (py_data))
data = (void *)Curve_FromPyObject (py_data);
if (NMesh_CheckPyObject (py_data))
data = (void *)NMesh_FromPyObject (py_data, self->object);
data = (void *)Mesh_FromPyObject (py_data, self->object);
/* have we set data to something good? */
if( !data )
@@ -1216,20 +1288,20 @@ struct Object* Object_FromPyObject (PyObject *py_obj)
/*****************************************************************************/
Object * GetObjectByName (char * name)
{
Object * obj_iter;
Object * obj_iter;
obj_iter = G.main->object.first;
while (obj_iter)
{
if (StringEqual (name, GetIdName (&(obj_iter->id))))
{
return (obj_iter);
}
obj_iter = obj_iter->id.next;
}
obj_iter = G.main->object.first;
while (obj_iter)
{
if (StringEqual (name, GetIdName (&(obj_iter->id))))
{
return (obj_iter);
}
obj_iter = obj_iter->id.next;
}
/* There is no object with the given name */
return (NULL);
/* There is no object with the given name */
return (NULL);
}
/*****************************************************************************/
@@ -1329,22 +1401,22 @@ static PyObject* Object_getAttr (BPy_Object *obj, char *name)
return (NULL);
}
if (StringEqual (name, "Layer"))
return (PyInt_FromLong(object->lay));
return (PyInt_FromLong(object->lay));
if (StringEqual (name, "parent"))
{
if (object->parent)
return (Object_CreatePyObject (object->parent));
else
{
Py_INCREF (Py_None);
return (Py_None);
}
{
Py_INCREF (Py_None);
return (Py_None);
}
}
if (StringEqual (name, "track"))
return (Object_CreatePyObject (object->track));
return (Object_CreatePyObject (object->track));
if (StringEqual (name, "data"))
return (Object_getData (obj));
return (Object_getData (obj));
if (StringEqual (name, "ipo"))
{
if (object->ipo == NULL)