[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