diff options
-rw-r--r-- | release/scripts/startup/bl_ui/properties_data_modifier.py | 10 | ||||
-rw-r--r-- | source/blender/editors/mesh/mesh_data.c | 41 | ||||
-rw-r--r-- | source/blender/editors/mesh/mesh_intern.h | 1 | ||||
-rw-r--r-- | source/blender/editors/mesh/mesh_ops.c | 1 |
4 files changed, 48 insertions, 5 deletions
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py index 1186992b13e..d6d4e03df39 100644 --- a/release/scripts/startup/bl_ui/properties_data_modifier.py +++ b/release/scripts/startup/bl_ui/properties_data_modifier.py @@ -1131,13 +1131,15 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel): self.vertex_weight_mask(layout, ob, md) def SKIN(self, layout, ob, md): - layout.operator("object.skin_armature_create", text="Create Armature") + row = layout.row() + row.operator("object.skin_armature_create", text="Create Armature") + row.operator("mesh.customdata_skin_add") layout.separator() - col = layout.column(align=True) - col.prop(md, "branch_smoothing") - col.prop(md, "use_smooth_shade") + row = layout.row(align=True) + row.prop(md, "branch_smoothing") + row.prop(md, "use_smooth_shade") split = layout.split() diff --git a/source/blender/editors/mesh/mesh_data.c b/source/blender/editors/mesh/mesh_data.c index 86991d7dfeb..1d0cd6a2934 100644 --- a/source/blender/editors/mesh/mesh_data.c +++ b/source/blender/editors/mesh/mesh_data.c @@ -804,7 +804,7 @@ void MESH_OT_customdata_clear_mask(wmOperatorType *ot) } /* Clear Skin */ -static int mesh_customdata_clear_skin_poll(bContext *C) +static bool mesh_customdata_skin_has(bContext *C) { Object *ob = ED_object_context(C); @@ -819,6 +819,45 @@ static int mesh_customdata_clear_skin_poll(bContext *C) } return false; } + +static int mesh_customdata_skin_add_poll(bContext *C) +{ + return !mesh_customdata_skin_has(C); +} + +static int mesh_customdata_skin_add_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Object *ob = ED_object_context(C); + Mesh *me = ob->data; + + BKE_mesh_ensure_skin_customdata(me); + + DAG_id_tag_update(&me->id, 0); + WM_event_add_notifier(C, NC_GEOM | ND_DATA, me); + + return OPERATOR_FINISHED; +} + +void MESH_OT_customdata_skin_add(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Add Skin Data"; + ot->idname = "MESH_OT_customdata_skin_add"; + ot->description = "Add a vertex skin layer"; + + /* api callbacks */ + ot->exec = mesh_customdata_skin_add_exec; + ot->poll = mesh_customdata_skin_add_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + +static int mesh_customdata_clear_skin_poll(bContext *C) +{ + return mesh_customdata_skin_has(C); +} + static int mesh_customdata_clear_skin_exec(bContext *C, wmOperator *UNUSED(op)) { return mesh_customdata_clear_exec__internal(C, BM_VERT, CD_MVERT_SKIN); diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h index c7355120a57..de7d0f32f6f 100644 --- a/source/blender/editors/mesh/mesh_intern.h +++ b/source/blender/editors/mesh/mesh_intern.h @@ -233,6 +233,7 @@ void MESH_OT_vertex_color_add(struct wmOperatorType *ot); void MESH_OT_vertex_color_remove(struct wmOperatorType *ot); /* no create_mask yet */ void MESH_OT_customdata_clear_mask(struct wmOperatorType *ot); +void MESH_OT_customdata_skin_add(struct wmOperatorType *ot); void MESH_OT_customdata_clear_skin(struct wmOperatorType *ot); void MESH_OT_customdata_custom_splitnormals_add(struct wmOperatorType *ot); void MESH_OT_customdata_custom_splitnormals_clear(struct wmOperatorType *ot); diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c index 2855af063c0..31d3f019585 100644 --- a/source/blender/editors/mesh/mesh_ops.c +++ b/source/blender/editors/mesh/mesh_ops.c @@ -152,6 +152,7 @@ void ED_operatortypes_mesh(void) WM_operatortype_append(MESH_OT_vertex_color_add); WM_operatortype_append(MESH_OT_vertex_color_remove); WM_operatortype_append(MESH_OT_customdata_clear_mask); + WM_operatortype_append(MESH_OT_customdata_skin_add); WM_operatortype_append(MESH_OT_customdata_clear_skin); WM_operatortype_append(MESH_OT_customdata_custom_splitnormals_add); WM_operatortype_append(MESH_OT_customdata_custom_splitnormals_clear); |