- small fix in Sys.c to compile on Windows:

Thanks Florian Eggenberger for telling us about it. And Greg McBride for
   pointing a possible fix.
- Draw.Text and Draw.GetStringWidth updated:
   Now they accept an optional second parameter to set font size and Draw.Text
   returns the drawn string width.
- Partially fixed the update() and PutRaw() bugs in NMesh:
   A total fix will require bigger changes, but what was done (unless buggy)
   takes care of the common cases.
This commit is contained in:
2003-07-01 05:19:14 +00:00
parent 14b4ed4e8d
commit fad2aeb3fb
7 changed files with 138 additions and 112 deletions

View File

@@ -623,7 +623,7 @@ static PyObject *Method_String (PyObject *self, PyObject *args)
static PyObject *Method_GetStringWidth (PyObject *self, PyObject *args) static PyObject *Method_GetStringWidth (PyObject *self, PyObject *args)
{ {
char *text; char *text;
char *font_str = NULL; char *font_str = "normal";
struct BMF_Font *font; struct BMF_Font *font;
PyObject *width; PyObject *width;
@@ -631,13 +631,12 @@ static PyObject *Method_GetStringWidth (PyObject *self, PyObject *args)
return EXPP_ReturnPyObjError (PyExc_TypeError, return EXPP_ReturnPyObjError (PyExc_TypeError,
"expected one or two string arguments"); "expected one or two string arguments");
if (!font_str) font = (&G)->font; if (!strcmp (font_str, "normal")) font = (&G)->font;
else if (!strcmp (font_str, "normal")) font = (&G)->font;
else if (!strcmp (font_str, "small" )) font = (&G)->fonts; else if (!strcmp (font_str, "small" )) font = (&G)->fonts;
else if (!strcmp (font_str, "tiny" )) font = (&G)->fontss; else if (!strcmp (font_str, "tiny" )) font = (&G)->fontss;
else else
return EXPP_ReturnPyObjError (PyExc_AttributeError, return EXPP_ReturnPyObjError (PyExc_AttributeError,
"\"font\" must be: 'normal' (same as None), 'small' or 'tiny'."); "\"font\" must be: 'normal' (default), 'small' or 'tiny'.");
width = PyInt_FromLong(BMF_GetStringWidth (font, text)); width = PyInt_FromLong(BMF_GetStringWidth (font, text));
@@ -664,11 +663,11 @@ static PyObject *Method_Text (PyObject *self, PyObject *args)
else if (!strcmp (font_str, "tiny" )) font = (&G)->fontss; else if (!strcmp (font_str, "tiny" )) font = (&G)->fontss;
else else
return EXPP_ReturnPyObjError (PyExc_AttributeError, return EXPP_ReturnPyObjError (PyExc_AttributeError,
"\"font\" must be: 'normal' (same as None), 'small' or 'tiny'."); "\"font\" must be: 'normal' (default), 'small' or 'tiny'.");
BMF_DrawString(font, text); BMF_DrawString(font, text);
return EXPP_incr_ret(Py_None); return PyInt_FromLong (BMF_GetStringWidth (font, text));
} }
PyObject *Draw_Init (void) PyObject *Draw_Init (void)

View File

@@ -266,11 +266,14 @@ new String button\n\n\
static PyObject *Method_String (PyObject *self, PyObject *args); static PyObject *Method_String (PyObject *self, PyObject *args);
static char Method_GetStringWidth_doc[] = static char Method_GetStringWidth_doc[] =
"(text) - Return the width in pixels of the given string"; "(text, font = 'normal') - Return the width in pixels of the given string\n\
(font) The font type: 'normal' (default), 'small' or 'tiny'.";
static char Method_Text_doc[] = static char Method_Text_doc[] =
"(text) - Draw text onscreen\n\n\ "(text, font = 'normal') - Draw text onscreen\n\n\
(text) The text to draw\n"; (text) The text to draw\n\
(font) The font type: 'normal' (default), 'small' or 'tiny'.\n\n\
NEW! - This function now returns the width of the drawn string.";
static PyObject *Method_GetStringWidth (PyObject *self, PyObject *args); static PyObject *Method_GetStringWidth (PyObject *self, PyObject *args);
static PyObject *Method_Text (PyObject *self, PyObject *args); static PyObject *Method_Text (PyObject *self, PyObject *args);

View File

@@ -24,7 +24,7 @@
* *
* This is a new part of Blender. * This is a new part of Blender.
* *
* Contributor(s): Willian P. Germano * Contributor(s): Willian P. Germano, Michel Selten
* *
* ***** END GPL/BL DUAL LICENSE BLOCK ***** * ***** END GPL/BL DUAL LICENSE BLOCK *****
*/ */
@@ -143,7 +143,8 @@ struct PyMethodDef M_Material_methods[] = {
/* Function: M_Material_New */ /* Function: M_Material_New */
/* Python equivalent: Blender.Material.New */ /* Python equivalent: Blender.Material.New */
/*****************************************************************************/ /*****************************************************************************/
static PyObject *M_Material_New(PyObject *self, PyObject *args, PyObject *keywords) static PyObject *M_Material_New(PyObject *self, PyObject *args,
PyObject *keywords)
{ {
char *name = "Mat"; char *name = "Mat";
static char *kwlist[] = {"name", NULL}; static char *kwlist[] = {"name", NULL};
@@ -1462,3 +1463,19 @@ int EXPP_synchronizeMaterialLists (Object *object, void *data)
/* No synchronization is needed; they're of equal length */ /* No synchronization is needed; they're of equal length */
return 1; return 1;
} }
void EXPP_incr_mats_us (Material **matlist, int len)
{
int i;
Material *mat;
if (len <= 0) return;
for (i = 0; i < len; i++) {
mat = matlist[i];
if (mat) mat->id.us++;
}
return;
}

View File

@@ -36,8 +36,8 @@
void mesh_update(Mesh *mesh) void mesh_update(Mesh *mesh)
{ {
edge_drawflags_mesh(mesh); edge_drawflags_mesh(mesh);
tex_space_mesh(mesh); tex_space_mesh(mesh);
} }
/*****************************/ /*****************************/
@@ -46,7 +46,7 @@ void mesh_update(Mesh *mesh)
static void NMCol_dealloc(PyObject *self) static void NMCol_dealloc(PyObject *self)
{ {
PyObject_DEL(self); /* XXX PyObject_Del ?*/ PyObject_DEL(self);
} }
static BPy_NMCol *newcol (char r, char g, char b, char a) static BPy_NMCol *newcol (char r, char g, char b, char a)
@@ -248,64 +248,64 @@ static int NMFace_setattr(PyObject *self, char *name, PyObject *v)
return 0; return 0;
} }
} }
else if (strcmp(name, "col") == 0) { else if (strcmp(name, "col") == 0) {
if(PySequence_Check(v)) { if(PySequence_Check(v)) {
Py_DECREF(mf->col); Py_DECREF(mf->col);
mf->col = EXPP_incr_ret(v); mf->col = EXPP_incr_ret(v);
return 0; return 0;
} }
} }
else if (!strcmp(name, "mat") || !strcmp(name, "materialIndex")) { else if (!strcmp(name, "mat") || !strcmp(name, "materialIndex")) {
PyArg_Parse(v, "h", &ival); PyArg_Parse(v, "h", &ival);
mf->mat_nr= ival; mf->mat_nr= ival;
return 0; return 0;
} }
else if (strcmp(name, "smooth") == 0) { else if (strcmp(name, "smooth") == 0) {
PyArg_Parse(v, "h", &ival); PyArg_Parse(v, "h", &ival);
mf->smooth = ival?1:0; mf->smooth = ival?1:0;
return 0; return 0;
} }
else if (strcmp(name, "uv") == 0) { else if (strcmp(name, "uv") == 0) {
if(PySequence_Check(v)) { if(PySequence_Check(v)) {
Py_DECREF(mf->uv); Py_DECREF(mf->uv);
mf->uv = EXPP_incr_ret(v); mf->uv = EXPP_incr_ret(v);
return 0; return 0;
} }
} }
else if (strcmp(name, "flag") == 0) { else if (strcmp(name, "flag") == 0) {
PyArg_Parse(v, "h", &ival); PyArg_Parse(v, "h", &ival);
mf->flag = ival; mf->flag = ival;
return 0; return 0;
} }
else if (strcmp(name, "mode") == 0) { else if (strcmp(name, "mode") == 0) {
PyArg_Parse(v, "h", &ival); PyArg_Parse(v, "h", &ival);
mf->mode = ival; mf->mode = ival;
return 0; return 0;
} }
else if (strcmp(name, "transp") == 0) { else if (strcmp(name, "transp") == 0) {
PyArg_Parse(v, "h", &ival); PyArg_Parse(v, "h", &ival);
mf->transp = ival; mf->transp = ival;
return 0; return 0;
} }
else if (strcmp(name, "image") == 0) { else if (strcmp(name, "image") == 0) {
PyObject *pyimg; PyObject *pyimg;
if (!PyArg_Parse(v, "O!", &Image_Type, &pyimg)) if (!PyArg_Parse(v, "O!", &Image_Type, &pyimg))
return EXPP_ReturnIntError(PyExc_TypeError, return EXPP_ReturnIntError(PyExc_TypeError,
"expected image object"); "expected image object");
if (pyimg == Py_None) { if (pyimg == Py_None) {
mf->image = NULL; mf->image = NULL;
return 0; return 0;
} }
mf->image = ((BPy_Image *)pyimg)->image; mf->image = ((BPy_Image *)pyimg)->image;
@@ -565,10 +565,10 @@ static PyObject *NMesh_getSelectedFaces(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "|i", &flag)) if (!PyArg_ParseTuple(args, "|i", &flag))
return NULL; return NULL;
if (flag) { if (flag) {
for (i = 0 ; i < me->totface; i++) { for (i = 0 ; i < me->totface; i++) {
if (tf[i].flag & TF_SELECT ) if (tf[i].flag & TF_SELECT )
PyList_Append(l, PyInt_FromLong(i)); PyList_Append(l, PyInt_FromLong(i));
} }
} else { } else {
for (i = 0 ; i < me->totface; i++) { for (i = 0 ; i < me->totface; i++) {
@@ -584,7 +584,7 @@ static PyObject *NMesh_getActiveFace(PyObject *self, PyObject *args)
if (((BPy_NMesh *)self)->sel_face < 0) if (((BPy_NMesh *)self)->sel_face < 0)
return EXPP_incr_ret(Py_None); return EXPP_incr_ret(Py_None);
return Py_BuildValue("i", ((BPy_NMesh *)self)->sel_face); return Py_BuildValue("i", ((BPy_NMesh *)self)->sel_face);
} }
static PyObject *NMesh_hasVertexUV(PyObject *self, PyObject *args) static PyObject *NMesh_hasVertexUV(PyObject *self, PyObject *args)
@@ -611,8 +611,8 @@ static PyObject *NMesh_hasFaceUV(PyObject *self, PyObject *args)
int flag = -1; int flag = -1;
if (!PyArg_ParseTuple(args, "|i", &flag)) if (!PyArg_ParseTuple(args, "|i", &flag))
return EXPP_ReturnPyObjError (PyExc_TypeError, return EXPP_ReturnPyObjError (PyExc_TypeError,
"expected int argument (or nothing)"); "expected int argument (or nothing)");
switch (flag) { switch (flag) {
case 0: case 0:
@@ -670,6 +670,9 @@ static PyObject *NMesh_update(PyObject *self, PyObject *args)
nmesh->mesh = Mesh_fromNMesh(nmesh); nmesh->mesh = Mesh_fromNMesh(nmesh);
} }
mesh->mat = EXPP_newMaterialList_fromPyList(nmesh->materials);
EXPP_incr_mats_us(mesh->mat, PyList_Size (nmesh->materials));
nmesh_updateMaterials(nmesh); nmesh_updateMaterials(nmesh);
/**@ This is another ugly fix due to the weird material handling of blender. /**@ This is another ugly fix due to the weird material handling of blender.
* it makes sure that object material lists get updated (by their length) * it makes sure that object material lists get updated (by their length)
@@ -705,39 +708,39 @@ static PyObject *NMesh_getVertexInfluences(PyObject *self, PyObject *args)
/* Proceed only if we have vertex deformation information and index is valid*/ /* Proceed only if we have vertex deformation information and index is valid*/
if (me->dvert) { if (me->dvert) {
if ((index >= 0) && (index < me->totvert)) { if ((index >= 0) && (index < me->totvert)) {
int i; int i;
MDeformWeight *sweight = NULL; MDeformWeight *sweight = NULL;
/* Number of bones influencig the vertex */ /* Number of bones influencig the vertex */
int totinfluences=me->dvert[index].totweight; int totinfluences=me->dvert[index].totweight;
/* Build the list only with weights and names of the influent bones */ /* Build the list only with weights and names of the influent bones */
influence_list = PyList_New(totinfluences); influence_list = PyList_New(totinfluences);
/* Get the reference of the first wwight structure */ /* Get the reference of the first wwight structure */
sweight = me->dvert[index].dw; sweight = me->dvert[index].dw;
for (i=0; i<totinfluences; i++) { for (i=0; i<totinfluences; i++) {
/* Some check that should always be true */ /* Some check that should always be true */
/* assert(sweight->data);*/ /* assert(sweight->data);*/
/*Add the weight and the name of the bone, which is used to identify it*/ /*Add the weight and the name of the bone, which is used to identify it*/
PyList_SetItem(influence_list, i, PyList_SetItem(influence_list, i,
Py_BuildValue("[sf]", sweight->data->name, sweight->weight)); Py_BuildValue("[sf]", sweight->data->name, sweight->weight));
/* Next weight */ /* Next weight */
sweight++; sweight++;
} }
} }
else influence_list = PyList_New(0); else influence_list = PyList_New(0);
} }
else influence_list = PyList_New(0); else influence_list = PyList_New(0);
/* Return the list. !QUESTION! Should i reincrement the number of /* Return the list. !QUESTION! Should i reincrement the number of
* references like i'm doing? */ * references like i'm doing? */
return influence_list; /* No need to incref it */ return influence_list; /* No need to incref it */
} }
@@ -758,15 +761,15 @@ Mesh *Mesh_fromNMesh(BPy_NMesh *nmesh)
PyObject *NMesh_link(PyObject *self, PyObject *args) PyObject *NMesh_link(PyObject *self, PyObject *args)
{/* {/*
BPy_Object *bl_obj; BPy_Object *bl_obj;
if (!PyArg_ParseTuple(args, "O!", &Object_Type, &bl_obj)) if (!PyArg_ParseTuple(args, "O!", &Object_Type, &bl_obj))
return EXPP_ReturnPyErrorObj (PyExc_TypeError, return EXPP_ReturnPyErrorObj (PyExc_TypeError,
"NMesh can only be linked to Objects"); "NMesh can only be linked to Objects");
bl_obj->data = (PyObject *)self; do this function later */ bl_obj->data = (PyObject *)self; do this function later */
return EXPP_incr_ret(Py_None); return EXPP_incr_ret(Py_None);
} }
#undef MethodDef #undef MethodDef
@@ -804,7 +807,7 @@ static PyObject *NMesh_getattr(PyObject *self, char *name)
if (me->mesh) { if (me->mesh) {
return PyInt_FromLong(me->mesh->id.us); return PyInt_FromLong(me->mesh->id.us);
} }
else { // it's a free mesh: else { // it's a free mesh:
return Py_BuildValue("i", 0); return Py_BuildValue("i", 0);
} }
} }
@@ -896,7 +899,7 @@ static BPy_NMFace *nmface_from_data(BPy_NMesh *mesh, int vidxs[4],
newf->transp = tface->transp; /* transparency flag */ newf->transp = tface->transp; /* transparency flag */
col = (MCol *) (tface->col); /* XXX weird, tface->col is uint[4] */ col = (MCol *) (tface->col); /* XXX weird, tface->col is uint[4] */
} }
else { else {
newf->image = NULL; newf->image = NULL;
newf->uv = PyList_New(0); newf->uv = PyList_New(0);
} }
@@ -909,9 +912,9 @@ static BPy_NMFace *nmface_from_data(BPy_NMesh *mesh, int vidxs[4],
for(i = 0; i < 4; i++, col++) { for(i = 0; i < 4; i++, col++) {
PyList_SetItem(newf->col, i, PyList_SetItem(newf->col, i,
(PyObject *)newcol(col->b, col->g, col->r, col->a)); (PyObject *)newcol(col->b, col->g, col->r, col->a));
} }
} }
else newf->col = PyList_New(0); else newf->col = PyList_New(0);
return newf; return newf;
} }
@@ -992,7 +995,7 @@ static PyObject *new_NMesh_internal(Mesh *oldmesh,
me->faces = PyList_New(0); me->faces = PyList_New(0);
me->mesh = 0; me->mesh = 0;
} }
else { else {
MVert *mverts; MVert *mverts;
MSticky *msticky; MSticky *msticky;
MFaceInt *mfaceints; MFaceInt *mfaceints;
@@ -1015,7 +1018,7 @@ static PyObject *new_NMesh_internal(Mesh *oldmesh,
totvert = dlm->totvert; totvert = dlm->totvert;
totface = dlm->totface; totface = dlm->totface;
} }
else { else {
me->name = PyString_FromString(oldmesh->id.name+2); me->name = PyString_FromString(oldmesh->id.name+2);
me->mesh = oldmesh; me->mesh = oldmesh;
@@ -1055,12 +1058,12 @@ static PyObject *new_NMesh_internal(Mesh *oldmesh,
if (mfaceints) { if (mfaceints) {
MFaceInt *oldmf = &mfaceints[i]; MFaceInt *oldmf = &mfaceints[i];
PyList_SetItem (me->faces, i, PyList_SetItem (me->faces, i,
(PyObject *)nmface_from_intdata(me, oldmf, oldtf, oldmc)); (PyObject *)nmface_from_intdata(me, oldmf, oldtf, oldmc));
} }
else { else {
MFace *oldmf = &mfaces[i]; MFace *oldmf = &mfaces[i];
PyList_SetItem (me->faces, i, PyList_SetItem (me->faces, i,
(PyObject *)nmface_from_shortdata(me, oldmf, oldtf, oldmc)); (PyObject *)nmface_from_shortdata(me, oldmf, oldtf, oldmc));
} }
} }
me->materials = EXPP_PyList_fromMaterialList(oldmesh->mat, oldmesh->totcol); me->materials = EXPP_PyList_fromMaterialList(oldmesh->mat, oldmesh->totcol);
@@ -1246,7 +1249,7 @@ static void mface_from_data(MFace *mf, TFace *tf, MCol *col, BPy_NMFace *from)
test_index_face(mf, tf, i); test_index_face(mf, tf, i);
} }
else { else {
test_index_mface(mf, i); test_index_mface(mf, i);
} }
@@ -1270,7 +1273,7 @@ static void mface_from_data(MFace *mf, TFace *tf, MCol *col, BPy_NMFace *from)
continue; continue;
} }
col->b = mc->r; col->b = mc->r;
col->g = mc->g; col->g = mc->g;
col->r = mc->b; col->r = mc->b;
col->a = mc->a; col->a = mc->a;
@@ -1355,16 +1358,16 @@ PyObject *NMesh_assignMaterials_toObject(BPy_NMesh *nmesh, Object *ob)
ma = pymat->material; ma = pymat->material;
assign_material(ob, ma, i+1);/*@ XXX don't use this function anymore*/ assign_material(ob, ma, i+1);/*@ XXX don't use this function anymore*/
} }
else { else {
Py_DECREF (pymat); Py_DECREF (pymat);
return EXPP_ReturnPyObjError (PyExc_TypeError, return EXPP_ReturnPyObjError (PyExc_TypeError,
"expected Material type in attribute list 'materials'!"); "expected Material type in attribute list 'materials'!");
} }
Py_DECREF (pymat); Py_DECREF (pymat);
} }
ob->colbits = old_matmask; /*@ HACK */ ob->colbits = old_matmask; /*@ HACK */
ob->actcol = 1; ob->actcol = 1;
return EXPP_incr_ret (Py_None); return EXPP_incr_ret (Py_None);
@@ -1476,7 +1479,7 @@ static int convert_NMeshToMesh (Mesh *mesh, BPy_NMesh *nmesh)
nmesh->flags |= NMESH_HASFACEUV; nmesh->flags |= NMESH_HASFACEUV;
} }
else { else {
newmc = mesh->mcol; newmc = mesh->mcol;
newmf = mesh->mface; newmf = mesh->mface;
@@ -1529,7 +1532,7 @@ static PyObject *M_NMesh_PutRaw(PyObject *self, PyObject *args)
ob = add_object(OB_MESH); ob = add_object(OB_MESH);
if (!ob) { if (!ob) {
PyErr_SetString(PyExc_RuntimeError, PyErr_SetString(PyExc_RuntimeError,
"Fatal: could not create mesh object"); "Fatal: could not create mesh object");
return 0; return 0;
} }
if (mesh) if (mesh)
@@ -1574,11 +1577,13 @@ static PyObject *M_NMesh_PutRaw(PyObject *self, PyObject *args)
if (ob) { // we created a new object if (ob) { // we created a new object
NMesh_assignMaterials_toObject(nmesh, ob); NMesh_assignMaterials_toObject(nmesh, ob);
//return DataBlock_fromData(ob); /* XXX fix this */
return EXPP_incr_ret (Py_None); return EXPP_incr_ret (Py_None);
} }
else else {
mesh->mat = EXPP_newMaterialList_fromPyList(nmesh->materials);
EXPP_incr_mats_us (mesh->mat, PyList_Size (nmesh->materials));
return EXPP_incr_ret (Py_None); return EXPP_incr_ret (Py_None);
}
} }
#undef MethodDef #undef MethodDef
@@ -1605,10 +1610,10 @@ static struct PyMethodDef M_NMesh_methods[] = {
static PyObject *M_NMesh_FaceModesDict (void) static PyObject *M_NMesh_FaceModesDict (void)
{ {
PyObject *FM = M_constant_New(); PyObject *FM = M_constant_New();
if (FM) { if (FM) {
BPy_constant *d = (BPy_constant *)FM; BPy_constant *d = (BPy_constant *)FM;
constant_insert(d, "BILLBOARD", PyInt_FromLong(TF_BILLBOARD2)); constant_insert(d, "BILLBOARD", PyInt_FromLong(TF_BILLBOARD2));
constant_insert(d, "ALL", PyInt_FromLong(0xffff)); constant_insert(d, "ALL", PyInt_FromLong(0xffff));
@@ -1623,40 +1628,40 @@ static PyObject *M_NMesh_FaceModesDict (void)
EXPP_ADDCONST(d, TEX); EXPP_ADDCONST(d, TEX);
EXPP_ADDCONST(d, TILES); EXPP_ADDCONST(d, TILES);
EXPP_ADDCONST(d, TWOSIDE); EXPP_ADDCONST(d, TWOSIDE);
} }
return FM; return FM;
} }
static PyObject *M_NMesh_FaceFlagsDict (void) static PyObject *M_NMesh_FaceFlagsDict (void)
{ {
PyObject *FF = M_constant_New(); PyObject *FF = M_constant_New();
if (FF) { if (FF) {
BPy_constant *d = (BPy_constant *)FF; BPy_constant *d = (BPy_constant *)FF;
EXPP_ADDCONST(d, SELECT); EXPP_ADDCONST(d, SELECT);
EXPP_ADDCONST(d, HIDE); EXPP_ADDCONST(d, HIDE);
EXPP_ADDCONST(d, ACTIVE); EXPP_ADDCONST(d, ACTIVE);
} }
return FF; return FF;
} }
static PyObject *M_NMesh_FaceTranspModesDict (void) static PyObject *M_NMesh_FaceTranspModesDict (void)
{ {
PyObject *FTM = M_constant_New(); PyObject *FTM = M_constant_New();
if (FTM) { if (FTM) {
BPy_constant *d = (BPy_constant *)FTM; BPy_constant *d = (BPy_constant *)FTM;
EXPP_ADDCONST(d, SOLID); EXPP_ADDCONST(d, SOLID);
EXPP_ADDCONST(d, ADD); EXPP_ADDCONST(d, ADD);
EXPP_ADDCONST(d, ALPHA); EXPP_ADDCONST(d, ALPHA);
EXPP_ADDCONST(d, SUB); EXPP_ADDCONST(d, SUB);
} }
return FTM; return FTM;
} }
PyObject *NMesh_Init (void) PyObject *NMesh_Init (void)
@@ -1672,12 +1677,12 @@ PyObject *NMesh_Init (void)
NMVert_Type.ob_type = &PyType_Type; NMVert_Type.ob_type = &PyType_Type;
NMesh_Type.ob_type = &PyType_Type; NMesh_Type.ob_type = &PyType_Type;
submodule = Py_InitModule3("Blender.NMesh", M_NMesh_methods, M_NMesh_doc); submodule = Py_InitModule3("Blender.NMesh", M_NMesh_methods, M_NMesh_doc);
if (FaceFlags) PyModule_AddObject (submodule, "FaceFlags" , FaceFlags); if (FaceFlags) PyModule_AddObject (submodule, "FaceFlags" , FaceFlags);
if (FaceModes) PyModule_AddObject (submodule, "FaceModes" , FaceModes); if (FaceModes) PyModule_AddObject (submodule, "FaceModes" , FaceModes);
if (FaceTranspModes) if (FaceTranspModes)
PyModule_AddObject (submodule, "FaceTranspModes" , FaceTranspModes); PyModule_AddObject (submodule, "FaceTranspModes" , FaceTranspModes);
g_nmeshmodule = submodule; g_nmeshmodule = submodule;
return submodule; return submodule;
@@ -1692,13 +1697,13 @@ PyObject *NMesh_CreatePyObject (Mesh *me)
int NMesh_CheckPyObject (PyObject *pyobj) int NMesh_CheckPyObject (PyObject *pyobj)
{ {
return (pyobj->ob_type == &NMesh_Type); return (pyobj->ob_type == &NMesh_Type);
} }
Mesh *NMesh_FromPyObject (PyObject *pyobj) Mesh *NMesh_FromPyObject (PyObject *pyobj)
{ {
if (pyobj->ob_type == &NMesh_Type) if (pyobj->ob_type == &NMesh_Type)
return Mesh_fromNMesh ((BPy_NMesh *)pyobj); return Mesh_fromNMesh ((BPy_NMesh *)pyobj);
return NULL; return NULL;
} }

View File

@@ -64,7 +64,7 @@
#include "vector.h" #include "vector.h"
#include "constant.h" #include "constant.h"
#include "gen_utils.h" #include "gen_utils.h"
#include "modules.h"
/* EXPP PyType Objects */ /* EXPP PyType Objects */

View File

@@ -31,7 +31,7 @@
#include "Sys.h" #include "Sys.h"
static PyObject *g_sysmodule = Py_None; /* pointer to Blender.sys module */ static PyObject *g_sysmodule = NULL; /* pointer to Blender.sys module */
PyObject *sys_Init (void) PyObject *sys_Init (void)
{ {

View File

@@ -36,6 +36,7 @@
#include <DNA_scene_types.h> #include <DNA_scene_types.h>
#include <DNA_object_types.h> #include <DNA_object_types.h>
#include <DNA_mesh_types.h>
#include <DNA_camera_types.h> #include <DNA_camera_types.h>
#include <DNA_lamp_types.h> #include <DNA_lamp_types.h>
#include <DNA_curve_types.h> #include <DNA_curve_types.h>
@@ -78,8 +79,8 @@ PyObject * Types_Init (void);
/* NMesh Data */ /* NMesh Data */
PyObject * NMesh_Init (void); PyObject * NMesh_Init (void);
PyObject * NMesh_CreatePyObject (struct Camera *cam); PyObject * NMesh_CreatePyObject (Mesh *me);
Camera * NMesh_FromPyObject (PyObject *pyobj); Mesh * NMesh_FromPyObject (PyObject *pyobj);
int NMesh_CheckPyObject (PyObject *pyobj); int NMesh_CheckPyObject (PyObject *pyobj);
/* Material */ /* Material */
@@ -90,6 +91,7 @@ Material **EXPP_newMaterialList_fromPyList (PyObject *list);
Material **EXPP_newMaterialList(int len); Material **EXPP_newMaterialList(int len);
int EXPP_releaseMaterialList (Material **matlist, int len); int EXPP_releaseMaterialList (Material **matlist, int len);
int EXPP_synchronizeMaterialLists (Object *object, void *data); int EXPP_synchronizeMaterialLists (Object *object, void *data);
void EXPP_incr_mats_us (Material **matlist, int len);
PyObject * EXPP_PyList_fromMaterialList(Material **matlist, int len); PyObject * EXPP_PyList_fromMaterialList(Material **matlist, int len);
/* Camera Data */ /* Camera Data */