Expose CD_PAINT_MASK to Python API
D782 by Stanislav Blinov
This commit is contained in:
@@ -1143,6 +1143,37 @@ static int rna_MeshSkinVertexLayer_data_length(PointerRNA *ptr)
|
|||||||
|
|
||||||
/* End skin vertices */
|
/* 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)
|
static void rna_TexturePoly_image_set(PointerRNA *ptr, PointerRNA value)
|
||||||
{
|
{
|
||||||
MTexPoly *tf = (MTexPoly *)ptr->data;
|
MTexPoly *tf = (MTexPoly *)ptr->data;
|
||||||
@@ -1783,6 +1814,7 @@ static void UNUSED_FUNCTION(rna_mesh_unused)(void)
|
|||||||
{
|
{
|
||||||
/* unused functions made by macros */
|
/* unused functions made by macros */
|
||||||
(void)rna_Mesh_skin_vertice_index_range;
|
(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_active_set;
|
||||||
(void)rna_Mesh_tessface_uv_texture_clone_get;
|
(void)rna_Mesh_tessface_uv_texture_clone_get;
|
||||||
(void)rna_Mesh_tessface_uv_texture_clone_index_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");
|
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)
|
static void rna_def_mesh(BlenderRNA *brna)
|
||||||
{
|
{
|
||||||
StructRNA *srna;
|
StructRNA *srna;
|
||||||
@@ -3376,6 +3438,16 @@ static void rna_def_mesh(BlenderRNA *brna)
|
|||||||
rna_def_skin_vertices(brna, prop);
|
rna_def_skin_vertices(brna, prop);
|
||||||
/* End skin vertices */
|
/* 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);
|
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_boolean_sdna(prop, NULL, "flag", ME_AUTOSMOOTH);
|
||||||
RNA_def_property_ui_text(prop, "Auto Smooth",
|
RNA_def_property_ui_text(prop, "Auto Smooth",
|
||||||
|
@@ -116,6 +116,9 @@ PyDoc_STRVAR(bpy_bmlayeraccess_collection__color_doc,
|
|||||||
PyDoc_STRVAR(bpy_bmlayeraccess_collection__skin_doc,
|
PyDoc_STRVAR(bpy_bmlayeraccess_collection__skin_doc,
|
||||||
"Accessor for skin layer.\n\ntype: :class:`BMLayerCollection`"
|
"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
|
#ifdef WITH_FREESTYLE
|
||||||
PyDoc_STRVAR(bpy_bmlayeraccess_collection__freestyle_edge_doc,
|
PyDoc_STRVAR(bpy_bmlayeraccess_collection__freestyle_edge_doc,
|
||||||
"Accessor for Freestyle edge layer.\n\ntype: :class:`BMLayerCollection`"
|
"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 *)"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 *)"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 *)"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 */
|
{NULL, NULL, NULL, NULL, NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
@@ -984,6 +988,7 @@ PyObject *BPy_BMLayerItem_GetItem(BPy_BMElem *py_ele, BPy_BMLayerItem *py_layer)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CD_PROP_FLT:
|
case CD_PROP_FLT:
|
||||||
|
case CD_PAINT_MASK:
|
||||||
{
|
{
|
||||||
ret = PyFloat_FromDouble(*(float *)value);
|
ret = PyFloat_FromDouble(*(float *)value);
|
||||||
break;
|
break;
|
||||||
@@ -1061,6 +1066,7 @@ int BPy_BMLayerItem_SetItem(BPy_BMElem *py_ele, BPy_BMLayerItem *py_layer, PyObj
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CD_PROP_FLT:
|
case CD_PROP_FLT:
|
||||||
|
case CD_PAINT_MASK:
|
||||||
{
|
{
|
||||||
float tmp_val = PyFloat_AsDouble(py_value);
|
float tmp_val = PyFloat_AsDouble(py_value);
|
||||||
if (UNLIKELY(tmp_val == -1 && PyErr_Occurred())) {
|
if (UNLIKELY(tmp_val == -1 && PyErr_Occurred())) {
|
||||||
|
Reference in New Issue
Block a user