diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-11-04 01:31:55 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-04-23 21:10:51 +0300 |
commit | 18ee59372979b98f33c054dd5d92ed8cc72b321c (patch) | |
tree | 2354859dc3b5a1f6dfcfd6d730b2a92244856a06 | |
parent | d2f35d6d5001dbe190bb3e147caec1b974d373ab (diff) |
Expose CD_PAINT_MASK to Python API
D782 by Stanislav Blinov
-rw-r--r-- | source/blender/makesrna/intern/rna_mesh.c | 72 | ||||
-rw-r--r-- | source/blender/python/bmesh/bmesh_py_types_customdata.c | 6 |
2 files changed, 78 insertions, 0 deletions
diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c index b1f0adb0d98..400e98befd0 100644 --- a/source/blender/makesrna/intern/rna_mesh.c +++ b/source/blender/makesrna/intern/rna_mesh.c @@ -1143,6 +1143,37 @@ static int rna_MeshSkinVertexLayer_data_length(PointerRNA *ptr) /* End skin vertices */ +/* Paint mask */ +DEFINE_CUSTOMDATA_LAYER_COLLECTION(vertex_paint_mask, vdata, CD_PAINT_MASK) + +static char *rna_MeshPaintMaskLayer_path(PointerRNA *ptr) +{ + CustomDataLayer *cdl = ptr->data; + char name_esc[sizeof(cdl->name) * 2]; + BLI_strescape(name_esc, cdl->name, sizeof(name_esc)); + return BLI_sprintfN("vertex_paint_masks[\"%s\"]", name_esc); +} + +static char *rna_MeshPaintMask_path(PointerRNA *ptr) +{ + return rna_VertCustomData_data_path(ptr, "vertex_paint_masks", CD_PAINT_MASK); +} + +static void rna_MeshPaintMaskLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) +{ + Mesh *me = rna_mesh(ptr); + CustomDataLayer *layer = (CustomDataLayer *)ptr->data; + rna_iterator_array_begin(iter, layer->data, sizeof(MFloatProperty), me->totvert, 0, NULL); +} + +static int rna_MeshPaintMaskLayer_data_length(PointerRNA *ptr) +{ + Mesh *me = rna_mesh(ptr); + return me->totvert; +} + +/* End paint mask */ + static void rna_TexturePoly_image_set(PointerRNA *ptr, PointerRNA value) { MTexPoly *tf = (MTexPoly *)ptr->data; @@ -1783,6 +1814,7 @@ static void UNUSED_FUNCTION(rna_mesh_unused)(void) { /* unused functions made by macros */ (void)rna_Mesh_skin_vertice_index_range; + (void)rna_Mesh_vertex_paint_mask_index_range; (void)rna_Mesh_tessface_uv_texture_active_set; (void)rna_Mesh_tessface_uv_texture_clone_get; (void)rna_Mesh_tessface_uv_texture_clone_index_get; @@ -3172,6 +3204,36 @@ static void rna_def_skin_vertices(BlenderRNA *brna, PropertyRNA *UNUSED(cprop)) RNA_def_property_update(prop, 0, "rna_Mesh_update_data"); } +static void rna_def_paint_mask(BlenderRNA *brna, PropertyRNA *UNUSED(cprop)) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna = RNA_def_struct(brna, "MeshPaintMaskLayer", NULL); + RNA_def_struct_ui_text(srna, "Mesh Paint Mask Layer", "Per-vertex paint mask data"); + RNA_def_struct_sdna(srna, "CustomDataLayer"); + RNA_def_struct_path_func(srna, "rna_MeshPaintMaskLayer_path"); + + prop = RNA_def_property(srna, "data", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_type(prop, "MeshPaintMaskProperty"); + RNA_def_property_ui_text(prop, "Data", ""); + + RNA_def_property_collection_funcs(prop, "rna_MeshPaintMaskLayer_data_begin", "rna_iterator_array_next", + "rna_iterator_array_end", "rna_iterator_array_get", + "rna_MeshPaintMaskLayer_data_length", NULL, NULL, NULL); + + srna = RNA_def_struct(brna, "MeshPaintMaskProperty", NULL); + RNA_def_struct_sdna(srna, "MFloatProperty"); + RNA_def_struct_ui_text(srna, "Mesh Paint Mask Property", + "Floating point paint mask value"); + RNA_def_struct_path_func(srna, "rna_MeshPaintMask_path"); + + prop = RNA_def_property(srna, "value", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "f"); + RNA_def_property_ui_text(prop, "Value", ""); + RNA_def_property_update(prop, 0, "rna_Mesh_update_data"); +} + static void rna_def_mesh(BlenderRNA *brna) { StructRNA *srna; @@ -3376,6 +3438,16 @@ static void rna_def_mesh(BlenderRNA *brna) rna_def_skin_vertices(brna, prop); /* End skin vertices */ + /* Paint mask */ + prop = RNA_def_property(srna, "vertex_paint_masks", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_sdna(prop, NULL, "vdata.layers", "vdata.totlayer"); + RNA_def_property_collection_funcs(prop, "rna_Mesh_vertex_paint_masks_begin", NULL, NULL, NULL, + "rna_Mesh_vertex_paint_masks_length", NULL, NULL, NULL); + RNA_def_property_struct_type(prop, "MeshPaintMaskLayer"); + RNA_def_property_ui_text(prop, "Vertex Paint Mask", "Vertex paint mask"); + rna_def_paint_mask(brna, prop); + /* End paint mask */ + prop = RNA_def_property(srna, "use_auto_smooth", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_AUTOSMOOTH); RNA_def_property_ui_text(prop, "Auto Smooth", diff --git a/source/blender/python/bmesh/bmesh_py_types_customdata.c b/source/blender/python/bmesh/bmesh_py_types_customdata.c index 7b6e062896f..3adf37f78f0 100644 --- a/source/blender/python/bmesh/bmesh_py_types_customdata.c +++ b/source/blender/python/bmesh/bmesh_py_types_customdata.c @@ -116,6 +116,9 @@ PyDoc_STRVAR(bpy_bmlayeraccess_collection__color_doc, PyDoc_STRVAR(bpy_bmlayeraccess_collection__skin_doc, "Accessor for skin layer.\n\ntype: :class:`BMLayerCollection`" ); +PyDoc_STRVAR(bpy_bmlayeraccess_collection__paint_mask_doc, +"Accessor for paint mask 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`" @@ -196,6 +199,7 @@ static PyGetSetDef bpy_bmlayeraccess_vert_getseters[] = { {(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}, + {(char *)"paint_mask", (getter)bpy_bmlayeraccess_collection_get, (setter)NULL, (char *)bpy_bmlayeraccess_collection__paint_mask_doc, (void *)CD_PAINT_MASK}, {NULL, NULL, NULL, NULL, NULL} /* Sentinel */ }; @@ -984,6 +988,7 @@ PyObject *BPy_BMLayerItem_GetItem(BPy_BMElem *py_ele, BPy_BMLayerItem *py_layer) break; } case CD_PROP_FLT: + case CD_PAINT_MASK: { ret = PyFloat_FromDouble(*(float *)value); break; @@ -1061,6 +1066,7 @@ int BPy_BMLayerItem_SetItem(BPy_BMElem *py_ele, BPy_BMLayerItem *py_layer, PyObj break; } case CD_PROP_FLT: + case CD_PAINT_MASK: { float tmp_val = PyFloat_AsDouble(py_value); if (UNLIKELY(tmp_val == -1 && PyErr_Occurred())) { |