Revision: 60955
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60955
Author:   trumanblending
Date:     2013-10-27 12:16:45 +0000 (Sun, 27 Oct 2013)
Log Message:
-----------
Expose MVertSkin customdata layer in Python. This allows scripts to change 
parameters which are used by the skin modifier (such as radius)

Modified Paths:
--------------
    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

Modified: trunk/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c
===================================================================
--- trunk/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c       
2013-10-27 10:01:35 UTC (rev 60954)
+++ trunk/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c       
2013-10-27 12:16:45 UTC (rev 60955)
@@ -113,6 +113,9 @@
 PyDoc_STRVAR(bpy_bmlayeraccess_collection__color_doc,
 "Accessor for vertex color layer.\n\ntype: :class:`BMLayerCollection`"
 );
+PyDoc_STRVAR(bpy_bmlayeraccess_collection__skin_doc,
+"Accessor for skin layer.\n\ntype: :class:`BMLayerCollection`"
+);
 #ifdef WITH_FREESTYLE
 PyDoc_STRVAR(bpy_bmlayeraccess_collection__freestyle_edge_doc,
 "Accessor for Freestyle edge layer.\n\ntype: :class:`BMLayerCollection`"
@@ -192,6 +195,7 @@
 
        {(char *)"shape",        (getter)bpy_bmlayeraccess_collection_get, 
(setter)NULL, (char *)bpy_bmlayeraccess_collection__shape_doc, (void 
*)CD_SHAPEKEY},
        {(char *)"bevel_weight", (getter)bpy_bmlayeraccess_collection_get, 
(setter)NULL, (char *)bpy_bmlayeraccess_collection__bevel_weight_doc, (void 
*)CD_BWEIGHT},
+       {(char *)"skin",         (getter)bpy_bmlayeraccess_collection_get, 
(setter)NULL, (char *)bpy_bmlayeraccess_collection__skin_doc, (void 
*)CD_MVERT_SKIN},
 
        {NULL, NULL, NULL, NULL, NULL} /* Sentinel */
 };
@@ -1030,6 +1034,11 @@
                        ret = PyFloat_FromDouble(*(float *)value);
                        break;
                }
+               case CD_MVERT_SKIN:
+               {
+                       ret = BPy_BMVertSkin_CreatePyObject(value);
+                       break;
+               }
                default:
                {
                        ret = Py_NotImplemented; /* TODO */
@@ -1147,6 +1156,11 @@
                        }
                        break;
                }
+               case CD_MVERT_SKIN:
+               {
+                       ret = BPy_BMVertSkin_AssignPyObject(value, py_value);
+                       break;
+               }
                default:
                {
                        PyErr_SetString(PyExc_AttributeError, "readonly / 
unsupported type");

Modified: trunk/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.c
===================================================================
--- trunk/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.c 
2013-10-27 10:01:35 UTC (rev 60954)
+++ trunk/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.c 
2013-10-27 12:16:45 UTC (rev 60955)
@@ -248,6 +248,115 @@
 
 /* --- End Mesh Loop UV --- */
 
+/* Mesh Vert Skin
+ * ************ */
+
+#define BPy_BMVertSkin_Check(v)  (Py_TYPE(v) == &BPy_BMVertSkin_Type)
+
+typedef struct BPy_BMVertSkin {
+       PyObject_VAR_HEAD
+       MVertSkin *data;
+} BPy_BMVertSkin;
+
+PyDoc_STRVAR(bpy_bmvertskin_radius_doc,
+"Vert skin radii (as a 2D Vector).\n\n:type: :class:`mathutils.Vector`"
+);
+static PyObject *bpy_bmvertskin_radius_get(BPy_BMVertSkin *self, void 
*UNUSED(closure))
+{
+       return Vector_CreatePyObject(self->data->radius, 2, Py_WRAP, NULL);
+}
+
+static int bpy_bmvertskin_radius_set(BPy_BMVertSkin *self, PyObject *value, 
void *UNUSED(closure))
+{
+       float tvec[2];
+       if (mathutils_array_parse(tvec, 2, 2, value, "BMVertSkin.radius") != 
-1) {
+               copy_v2_v2(self->data->radius, tvec);
+               return 0;
+       }
+       else {
+               return -1;
+       }
+}
+
+PyDoc_STRVAR(bpy_bmvertskin_flag__use_root_doc,
+"Use as root vertex.\n\n:type: boolean"
+);
+PyDoc_STRVAR(bpy_bmvertskin_flag__use_loose_doc,
+"Use loose vertex.\n\n:type: boolean"
+);
+
+static PyObject *bpy_bmvertskin_flag_get(BPy_BMVertSkin *self, void *flag_p)
+{
+       const int flag = GET_INT_FROM_POINTER(flag_p);
+       return PyBool_FromLong(self->data->flag & flag);
+}
+
+static int bpy_bmvertskin_flag_set(BPy_BMVertSkin *self, PyObject *value, void 
*flag_p)
+{
+       const int flag = GET_INT_FROM_POINTER(flag_p);
+
+       switch (PyLong_AsLong(value)) {
+               case true:
+                       self->data->flag |= flag;
+                       return 0;
+               case false:
+                       self->data->flag &= ~flag;
+                       return 0;
+               default:
+                       PyErr_SetString(PyExc_TypeError,
+                                       "expected a boolean type 0/1");
+                       return -1;
+       }
+}
+
+/* XXX Todo: Make root settable, currently the code to disable all other verts 
as roots sits within the modifier */
+static PyGetSetDef bpy_bmvertskin_getseters[] = {
+       /* attributes match rna_mesh_gen  */
+       {(char *)"radius",    (getter)bpy_bmvertskin_radius_get, 
(setter)bpy_bmvertskin_radius_set, (char *)bpy_bmvertskin_radius_doc, NULL},
+       {(char *)"use_root",  (getter)bpy_bmvertskin_flag_get,   (setter)NULL,  
                                   (char *)bpy_bmvertskin_flag__use_root_doc,  
(void *)MVERT_SKIN_ROOT},
+       {(char *)"use_loose", (getter)bpy_bmvertskin_flag_get,   
(setter)bpy_bmvertskin_flag_set,   (char *)bpy_bmvertskin_flag__use_loose_doc, 
(void *)MVERT_SKIN_LOOSE},
+
+       {NULL, NULL, NULL, NULL, NULL} /* Sentinel */
+};
+
+PyTypeObject BPy_BMVertSkin_Type = {{{0}}}; /* bm.loops.layers.uv.active */
+
+static void bm_init_types_bmvertskin(void)
+{
+       BPy_BMVertSkin_Type.tp_basicsize = sizeof(BPy_BMVertSkin);
+
+       BPy_BMVertSkin_Type.tp_name = "BMVertSkin";
+
+       BPy_BMVertSkin_Type.tp_doc = NULL; // todo
+
+       BPy_BMVertSkin_Type.tp_getset = bpy_bmvertskin_getseters;
+
+       BPy_BMVertSkin_Type.tp_flags = Py_TPFLAGS_DEFAULT;
+
+       PyType_Ready(&BPy_BMVertSkin_Type);
+}
+
+int BPy_BMVertSkin_AssignPyObject(struct MVertSkin *mvertskin, PyObject *value)
+{
+       if (UNLIKELY(!BPy_BMVertSkin_Check(value))) {
+               PyErr_Format(PyExc_TypeError, "expected BMVertSkin, not a 
%.200s", Py_TYPE(value)->tp_name);
+               return -1;
+       }
+       else {
+               *((MVertSkin *)mvertskin) = *(((BPy_BMVertSkin *)value)->data);
+               return 0;
+       }
+}
+
+PyObject *BPy_BMVertSkin_CreatePyObject(struct MVertSkin *mvertskin)
+{
+       BPy_BMVertSkin *self = PyObject_New(BPy_BMVertSkin, 
&BPy_BMVertSkin_Type);
+       self->data = mvertskin;
+       return (PyObject *)self;
+}
+
+/* --- End Mesh Vert Skin --- */
+
 /* Mesh Loop Color
  * *************** */
 
@@ -692,5 +801,6 @@
        bm_init_types_bmloopuv();
        bm_init_types_bmloopcol();
        bm_init_types_bmdvert();
+       bm_init_types_bmvertskin();
 }
 

Modified: trunk/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.h
===================================================================
--- trunk/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.h 
2013-10-27 10:01:35 UTC (rev 60954)
+++ trunk/blender/source/blender/python/bmesh/bmesh_py_types_meshdata.h 
2013-10-27 12:16:45 UTC (rev 60955)
@@ -51,6 +51,9 @@
 int       BPy_BMLoopUV_AssignPyObject(struct MLoopUV *data, PyObject *value);
 PyObject *BPy_BMLoopUV_CreatePyObject(struct MLoopUV *data);
 
+int       BPy_BMVertSkin_AssignPyObject(struct MVertSkin *data, PyObject 
*value);
+PyObject *BPy_BMVertSkin_CreatePyObject(struct MVertSkin *data);
+
 int       BPy_BMLoopColor_AssignPyObject(struct MLoopCol *data, PyObject 
*value);
 PyObject *BPy_BMLoopColor_CreatePyObject(struct MLoopCol *data);
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to