[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46136] trunk/blender/source/blender: bmesh py api:
Campbell Barton
ideasman42 at gmail.com
Tue May 1 08:50:43 CEST 2012
Revision: 46136
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46136
Author: campbellbarton
Date: 2012-05-01 06:50:43 +0000 (Tue, 01 May 2012)
Log Message:
-----------
bmesh py api:
add mtexpoly image access
Modified Paths:
--------------
trunk/blender/source/blender/collada/MeshImporter.cpp
trunk/blender/source/blender/gpu/GPU_extensions.h
trunk/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c
trunk/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.c
trunk/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.h
trunk/blender/source/blender/python/intern/bpy_rna.c
Modified: trunk/blender/source/blender/collada/MeshImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/MeshImporter.cpp 2012-05-01 03:24:57 UTC (rev 46135)
+++ trunk/blender/source/blender/collada/MeshImporter.cpp 2012-05-01 06:50:43 UTC (rev 46136)
@@ -845,7 +845,6 @@
prim.mface++;
// bind texture images to faces
if (texture_face && (*color_texture)) {
- texture_face->mode = TF_TEX;
texture_face->tpage = (Image*)(*color_texture)->tex->ima;
texture_face++;
}
Modified: trunk/blender/source/blender/gpu/GPU_extensions.h
===================================================================
--- trunk/blender/source/blender/gpu/GPU_extensions.h 2012-05-01 03:24:57 UTC (rev 46135)
+++ trunk/blender/source/blender/gpu/GPU_extensions.h 2012-05-01 06:50:43 UTC (rev 46136)
@@ -178,7 +178,7 @@
} GPUBuiltinShader;
GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader);
-void GPU_shader_free_builtin_shaders();
+void GPU_shader_free_builtin_shaders(void);
/* Vertex attributes for shaders */
Modified: trunk/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c
===================================================================
--- trunk/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c 2012-05-01 03:24:57 UTC (rev 46135)
+++ trunk/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c 2012-05-01 06:50:43 UTC (rev 46136)
@@ -989,8 +989,7 @@
}
case CD_MTEXPOLY:
{
- ret = Py_NotImplemented; /* TODO */
- Py_INCREF(ret);
+ ret = BPy_BMTexPoly_CreatePyObject(value);
break;
}
case CD_MLOOPUV:
@@ -1083,8 +1082,7 @@
}
case CD_MTEXPOLY:
{
- PyErr_SetString(PyExc_AttributeError, "readonly"); /* could make this writeable later */
- ret = -1;
+ ret = BPy_BMTexPoly_AssignPyObject(value, py_value);
break;
}
case CD_MLOOPUV:
Modified: trunk/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.c
===================================================================
--- trunk/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.c 2012-05-01 03:24:57 UTC (rev 46135)
+++ trunk/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.c 2012-05-01 06:50:43 UTC (rev 46136)
@@ -41,9 +41,100 @@
#include "BLI_math_vector.h"
#include "BKE_deform.h"
+#include "BKE_library.h"
#include "bmesh_py_types_meshdata.h"
+
+/* Mesh BMTexPoly
+ * ************** */
+
+#define BPy_BMTexPoly_Check(v) (Py_TYPE(v) == &BPy_BMTexPoly_Type)
+
+typedef struct BPy_BMTexPoly {
+ PyObject_VAR_HEAD
+ MTexPoly *data;
+} BPy_BMTexPoly;
+
+extern PyObject *pyrna_id_CreatePyObject(ID *id);
+extern int pyrna_id_FromPyObject(PyObject *obj, ID **id);
+
+PyDoc_STRVAR(bpy_bmtexpoly_image_doc,
+"Image or None.\n\n:type: :class:`bpy.types.Image`"
+);
+static PyObject *bpy_bmtexpoly_image_get(BPy_BMTexPoly *self, void *UNUSED(closure))
+{
+ return pyrna_id_CreatePyObject((ID *)self->data->tpage);
+}
+
+static int bpy_bmtexpoly_image_set(BPy_BMTexPoly *self, PyObject *value, void *UNUSED(closure))
+{
+ ID *id;
+
+ if (value == Py_None) {
+ id = NULL;
+ }
+ else if (pyrna_id_FromPyObject(value, &id) && id && GS(id->name) == ID_IM) {
+ /* pass */
+ }
+ else {
+ PyErr_Format(PyExc_KeyError, "BMTexPoly.image = x"
+ "expected an image or None, not '%.200s'",
+ Py_TYPE(value)->tp_name);
+ return -1;
+ }
+
+ id_lib_extern(id);
+ self->data->tpage = (struct Image *)id;
+
+ return 0;
+}
+
+static PyGetSetDef bpy_bmtexpoly_getseters[] = {
+ /* attributes match rna_def_mtpoly */
+ {(char *)"image", (getter)bpy_bmtexpoly_image_get, (setter)bpy_bmtexpoly_image_set, (char *)bpy_bmtexpoly_image_doc, NULL},
+
+ {NULL, NULL, NULL, NULL, NULL} /* Sentinel */
+};
+
+PyTypeObject BPy_BMTexPoly_Type = {{{0}}}; /* bm.loops.layers.uv.active */
+
+static void bm_init_types_bmtexpoly(void)
+{
+ BPy_BMTexPoly_Type.tp_basicsize = sizeof(BPy_BMTexPoly);
+
+ BPy_BMTexPoly_Type.tp_name = "BMTexPoly";
+
+ BPy_BMTexPoly_Type.tp_doc = NULL; // todo
+
+ BPy_BMTexPoly_Type.tp_getset = bpy_bmtexpoly_getseters;
+
+ BPy_BMTexPoly_Type.tp_flags = Py_TPFLAGS_DEFAULT;
+
+ PyType_Ready(&BPy_BMTexPoly_Type);
+}
+
+int BPy_BMTexPoly_AssignPyObject(struct MTexPoly *mtpoly, PyObject *value)
+{
+ if (UNLIKELY(!BPy_BMTexPoly_Check(value))) {
+ PyErr_Format(PyExc_TypeError, "expected BMTexPoly, not a %.200s", Py_TYPE(value)->tp_name);
+ return -1;
+ }
+ else {
+ *((MTexPoly *)mtpoly) = *(((BPy_BMTexPoly *)value)->data);
+ return 0;
+ }
+}
+
+PyObject *BPy_BMTexPoly_CreatePyObject(struct MTexPoly *mtpoly)
+{
+ BPy_BMTexPoly *self = PyObject_New(BPy_BMTexPoly, &BPy_BMTexPoly_Type);
+ self->data = mtpoly;
+ return (PyObject *)self;
+}
+
+/* --- End Mesh BMTexPoly --- */
+
/* Mesh Loop UV
* ************ */
@@ -597,6 +688,7 @@
/* call to init all types */
void BPy_BM_init_types_meshdata(void)
{
+ bm_init_types_bmtexpoly();
bm_init_types_bmloopuv();
bm_init_types_bmloopcol();
bm_init_types_bmdvert();
Modified: trunk/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.h
===================================================================
--- trunk/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.h 2012-05-01 03:24:57 UTC (rev 46135)
+++ trunk/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.h 2012-05-01 06:50:43 UTC (rev 46136)
@@ -40,13 +40,20 @@
void *data;
} BPy_BMGenericMeshData;
+struct MTexPoly;
struct MLoopUV;
struct MLoopCol;
struct MDeformVert;
+int BPy_BMTexPoly_AssignPyObject(struct MTexPoly *mloopuv, PyObject *value);
+PyObject *BPy_BMTexPoly_CreatePyObject(struct MTexPoly *mloopuv);
+
int BPy_BMLoopUV_AssignPyObject(struct MLoopUV *data, PyObject *value);
PyObject *BPy_BMLoopUV_CreatePyObject(struct MLoopUV *data);
+int BPy_BMLoopUV_AssignPyObject(struct MLoopUV *data, PyObject *value);
+PyObject *BPy_BMLoopUV_CreatePyObject(struct MLoopUV *data);
+
int BPy_BMLoopColor_AssignPyObject(struct MLoopCol *data, PyObject *value);
PyObject *BPy_BMLoopColor_CreatePyObject(struct MLoopCol *data);
Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c 2012-05-01 03:24:57 UTC (rev 46135)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c 2012-05-01 06:50:43 UTC (rev 46136)
@@ -6254,6 +6254,31 @@
return (PyObject *)pyrna;
}
+/* utility func to be used by external modules, *sneaky!* */
+PyObject *pyrna_id_CreatePyObject(ID *id)
+{
+ if (id) {
+ PointerRNA ptr;
+ RNA_id_pointer_create(id, &ptr);
+ return pyrna_struct_CreatePyObject(&ptr);
+ }
+ else {
+ Py_RETURN_NONE;
+ }
+}
+
+int pyrna_id_FromPyObject(PyObject *obj, ID **id)
+{
+ if (BPy_StructRNA_Check(obj) && (RNA_struct_is_ID(((BPy_StructRNA *)obj)->ptr.type))) {
+ *id = ((BPy_StructRNA *)obj)->ptr.id.data;
+ return TRUE;
+ }
+ else {
+ *id = NULL;
+ return FALSE;
+ }
+}
+
void BPY_rna_init(void)
{
#ifdef USE_MATHUTILS // register mathutils callbacks, ok to run more then once.
More information about the Bf-blender-cvs
mailing list