Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2006-12-13 03:50:02 +0300
committerCampbell Barton <ideasman42@gmail.com>2006-12-13 03:50:02 +0300
commit080a5d56646e43dbeae08e62f91c5577ac5671a8 (patch)
tree1d21b022123c4683306d6ccb6c8e8d0d472b06e2 /source
parent655f101ef719157c553c6d1198efc7eb87fba840 (diff)
exposed CustomData_get_active_layer_index in BKE_customdata.h (needed by python to get the active layer)
added python api stuff to deal with Color and UV/Image layers. me.activeUvLayer - int me.activeColorLayer - int me.totUvLayers - int me.totColorLayers - int me.addUvLayer() me.addColorLayer() me.removeUvLayer() me.removeColorLayer() Variable names may need changing.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_customdata.h2
-rw-r--r--source/blender/blenkernel/intern/customdata.c2
-rw-r--r--source/blender/python/api2_2x/Mesh.c116
-rw-r--r--source/blender/python/api2_2x/doc/Mesh.py32
4 files changed, 150 insertions, 2 deletions
diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h
index e6cf16a41e2..3f133adc68a 100644
--- a/source/blender/blenkernel/BKE_customdata.h
+++ b/source/blender/blenkernel/BKE_customdata.h
@@ -166,6 +166,8 @@ void *CustomData_em_get(const struct CustomData *data, void *block, int type);
void *CustomData_get_layer(const struct CustomData *data, int type);
void *CustomData_get_layer_n(const struct CustomData *data, int type, int n);
+int CustomData_get_active_layer_index(const struct CustomData *data, int type);
+
/* copies the data from source to the data element at index in the first
* layer of type
* no effect if there is no layer of type
diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index 65688f9529e..586c6db972b 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -504,7 +504,7 @@ static int CustomData_get_layer_index(const struct CustomData *data, int type)
return -1;
}
-static int CustomData_get_active_layer_index(const CustomData *data, int type)
+int CustomData_get_active_layer_index(const CustomData *data, int type)
{
int i;
diff --git a/source/blender/python/api2_2x/Mesh.c b/source/blender/python/api2_2x/Mesh.c
index 5e75d09b669..4bc74e9391e 100644
--- a/source/blender/python/api2_2x/Mesh.c
+++ b/source/blender/python/api2_2x/Mesh.c
@@ -6223,6 +6223,55 @@ static PyObject *Mesh_insertKey( BPy_Mesh * self, PyObject * args )
Py_RETURN_NONE;
}
+
+void Mesh_addCustomLayer_internal(Mesh *me, int type)
+{
+ int layernum = CustomData_number_of_layers(&me->fdata, type);
+
+ CustomData_add_layer(&me->fdata, type, CD_DEFAULT,
+ NULL, me->totface);
+
+ CustomData_set_layer_active(&me->fdata, type, layernum);
+ mesh_update_customdata_pointers(me);
+}
+
+/* custom data layers */
+static PyObject *Mesh_addUvLayer( BPy_Mesh * self )
+{
+ Mesh_addCustomLayer_internal(self->mesh, CD_MTFACE);
+ Py_RETURN_NONE;
+}
+
+static PyObject *Mesh_addColorLayer( BPy_Mesh * self, PyObject * args )
+{
+ Mesh_addCustomLayer_internal(self->mesh, CD_MCOL);
+ Py_RETURN_NONE;
+}
+
+static PyObject *Mesh_removeUvLayer( BPy_Mesh * self )
+{
+ Mesh *me = self->mesh;
+ if (me->mtface != NULL) {
+ CustomData_free_layer(&me->fdata, CD_MTFACE, me->totface);
+ me->mtface= CustomData_get_layer(&me->fdata, CD_MTFACE);
+ }
+ mesh_update_customdata_pointers(me);
+ Py_RETURN_NONE;
+}
+
+static PyObject *Mesh_removeColorLayer( BPy_Mesh * self )
+{
+ Mesh *me = self->mesh;
+ if (me->mcol != NULL) {
+ CustomData_free_layer(&me->fdata, CD_MCOL, me->totface);
+ me->mcol= CustomData_get_layer(&me->fdata, CD_MCOL);
+ }
+ mesh_update_customdata_pointers(me);
+ Py_RETURN_NONE;
+}
+
+
+
static PyObject *Mesh_Tools( BPy_Mesh * self, int type, void **args )
{
Base *base;
@@ -6508,6 +6557,16 @@ static struct PyMethodDef BPy_Mesh_methods[] = {
{"recalcNormals", (PyCFunction)Mesh_recalcNormals, METH_VARARGS,
"Recalculates inside or outside normals (experimental)"},
+ /* mesh custom data layers */
+ {"addUvLayer", (PyCFunction)Mesh_addUvLayer, METH_NOARGS,
+ "adds a UV layer to this mesh"},
+ {"addColorLayer", (PyCFunction)Mesh_addColorLayer, METH_NOARGS,
+ "adds a color layer to this mesh"},
+ {"removeUvLayer", (PyCFunction)Mesh_removeUvLayer, METH_NOARGS,
+ "removes a UV layer to this mesh"},
+ {"removeColorLayer", (PyCFunction)Mesh_removeColorLayer, METH_NOARGS,
+ "removes a color layer to this mesh"},
+
/* python standard class functions */
{"__copy__", (PyCFunction)Mesh_copy, METH_NOARGS,
"Return a copy of the mesh"},
@@ -7029,6 +7088,43 @@ static int Mesh_setActiveGroup( BPy_Mesh * self, PyObject * arg )
return 0;
}
+
+static PyObject *Mesh_getActiveLayer( BPy_Mesh * self, void *type )
+{
+ int i = CustomData_get_active_layer_index(&self->mesh->fdata, (int)type);
+ if (i != -1) i--; /* so -1 is for no active layer 0+ for an active layer */
+ return PyInt_FromLong( i );
+}
+
+static int Mesh_setActiveLayer( BPy_Mesh * self, PyObject * arg, void *type )
+{
+ int i, totlayers;
+
+ if( !PyInt_Check( arg ) )
+ return EXPP_ReturnIntError( PyExc_AttributeError,
+ "expected an int argument" );
+
+ totlayers = CustomData_number_of_layers(&self->mesh->fdata, (int)type );
+
+ i = PyInt_AsLong( arg );
+
+ if (i >= totlayers)
+ return EXPP_ReturnIntError( PyExc_ValueError,
+ "index out of range" );
+
+ if (i<0)
+ i = totlayers+i;
+
+ CustomData_set_layer_active(&self->mesh->fdata, (int)type, i);
+ mesh_update_customdata_pointers(self->mesh);
+ return 0;
+}
+
+static PyObject *Mesh_getTotLayers( BPy_Mesh * self, void *type )
+{
+ return PyInt_FromLong( CustomData_number_of_layers(&self->mesh->fdata, (int)type ) );
+}
+
static PyObject *Mesh_getTexMesh( BPy_Mesh * self )
{
Mesh *texme= self->mesh->texcomesh;
@@ -7226,6 +7322,26 @@ static PyGetSetDef BPy_Mesh_getseters[] = {
(getter)Mesh_getActiveGroup, (setter)Mesh_setActiveGroup,
"Active group for the mesh",
NULL},
+
+ {"activeColorLayer",
+ (getter)Mesh_getActiveLayer, (setter)Mesh_setActiveLayer,
+ "Index of the active UV layer",
+ CD_MCOL},
+ {"activeUvLayer",
+ (getter)Mesh_getActiveLayer, (setter)Mesh_setActiveLayer,
+ "Index of the active vertex color layer",
+ CD_MTFACE},
+
+ {"totColorLayers",
+ (getter)Mesh_getTotLayers, (setter)NULL,
+ "Index of the active vertex color layer",
+ CD_MCOL},
+
+ {"totUvLayers",
+ (getter)Mesh_getTotLayers, (setter)NULL,
+ "Index of the active vertex color layer",
+ CD_MTFACE},
+
{"texMesh",
(getter)Mesh_getTexMesh, (setter)Mesh_setTexMesh,
"The meshes tex mesh proxy texture coord mesh",
diff --git a/source/blender/python/api2_2x/doc/Mesh.py b/source/blender/python/api2_2x/doc/Mesh.py
index 1079c436e41..5bd93cc290b 100644
--- a/source/blender/python/api2_2x/doc/Mesh.py
+++ b/source/blender/python/api2_2x/doc/Mesh.py
@@ -720,7 +720,7 @@ class Mesh:
@type name: str
@ivar subDivLevels: The [display, rendering] subdivision levels in [1, 6].
@type subDivLevels: list of 2 ints
- @ivar users: The number of Objects using (linked to) this mesh.
+ @ivar users: The number of Objects using (linked to) this mesh. (read only)
@type users: int
@ivar faceUV: The mesh contains UV-mapped textured faces. Enabling faceUV
@@ -750,6 +750,17 @@ class Mesh:
@ivar texMesh: The mesh's texMesh setting, used so coordinates from another
mesh can be used for rendering textures.
@type texMesh: Mesh or None
+
+ @ivar activeUvLayer: The mesh's active UV/Image layer index. -1 if there is no UV/Image layers.
+ @type activeUvLayer: int
+ @ivar activeColorLayer: The mesh's active Vertex Color layer index. -1 if there is no UV/Image layers.
+ @type activeColorLayer: int
+
+ @ivar totUvLayers: The mesh's total number of UV/Image layers.
+ @type totUvLayers: int
+ @ivar totColorLayers: The mesh's total number of Vertex Color layers.
+ @type totColorLayers: int
+
"""
def getFromObject(object, cage=0, render=0):
@@ -991,6 +1002,25 @@ class Mesh:
Blender itself later).
"""
+ def addUvLayer():
+ """
+ Adds a new UV/Image layer to this mesh, it will always be the last layer and made active.
+ """
+
+ def addColorLayer():
+ """
+ Adds a new Vertex Color layer to this mesh, it will always be the last layer and made active.
+ """
+
+ def removeUvLayer():
+ """
+ Removes the active UV/Image layer.
+ """
+
+ def removeColorLayer():
+ """
+ Removes the active Vertex Color layer.
+ """
def smooth():
"""