From 6c67fc83ead6f54efb9d5a4c57e21362b6d888a2 Mon Sep 17 00:00:00 2001 From: Nicholas Bishop Date: Tue, 22 May 2012 15:30:14 +0000 Subject: Add vertex skin radii scaling as a transform operator. Add a new transform operator, "Skin Resize", which scales the X and Y axes of the radius field in MVertSkin. It's bound to CTRL+AKEY. Skin modifier documentation: http://wiki.blender.org/index.php/User:Nicholasbishop/SkinModifier --- source/blender/editors/transform/transform_ops.c | 36 ++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'source/blender/editors/transform/transform_ops.c') diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index b75e42c4df5..6fd8e07d34a 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -27,6 +27,7 @@ #include "MEM_guardedalloc.h" +#include "DNA_object_types.h" #include "DNA_scene_types.h" #include "RNA_access.h" @@ -63,6 +64,7 @@ static char OP_TRANSLATION[] = "TRANSFORM_OT_translate"; static char OP_ROTATION[] = "TRANSFORM_OT_rotate"; static char OP_TOSPHERE[] = "TRANSFORM_OT_tosphere"; static char OP_RESIZE[] = "TRANSFORM_OT_resize"; +static char OP_SKIN_RESIZE[] = "TRANSFORM_OT_skin_resize"; static char OP_SHEAR[] = "TRANSFORM_OT_shear"; static char OP_WARP[] = "TRANSFORM_OT_warp"; static char OP_SHRINK_FATTEN[] = "TRANSFORM_OT_shrink_fatten"; @@ -79,6 +81,7 @@ static void TRANSFORM_OT_translate(struct wmOperatorType *ot); static void TRANSFORM_OT_rotate(struct wmOperatorType *ot); static void TRANSFORM_OT_tosphere(struct wmOperatorType *ot); static void TRANSFORM_OT_resize(struct wmOperatorType *ot); +static void TRANSFORM_OT_skin_resize(struct wmOperatorType *ot); static void TRANSFORM_OT_shear(struct wmOperatorType *ot); static void TRANSFORM_OT_warp(struct wmOperatorType *ot); static void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot); @@ -97,6 +100,7 @@ static TransformModeItem transform_modes[] = {OP_ROTATION, TFM_ROTATION, TRANSFORM_OT_rotate}, {OP_TOSPHERE, TFM_TOSPHERE, TRANSFORM_OT_tosphere}, {OP_RESIZE, TFM_RESIZE, TRANSFORM_OT_resize}, + {OP_SKIN_RESIZE, TFM_SKIN_RESIZE, TRANSFORM_OT_skin_resize}, {OP_SHEAR, TFM_SHEAR, TRANSFORM_OT_shear}, {OP_WARP, TFM_WARP, TRANSFORM_OT_warp}, {OP_SHRINK_FATTEN, TFM_SHRINKFATTEN, TRANSFORM_OT_shrink_fatten}, @@ -118,6 +122,7 @@ EnumPropertyItem transform_mode_types[] = {TFM_TRANSLATION, "TRANSLATION", 0, "Translation", ""}, {TFM_ROTATION, "ROTATION", 0, "Rotation", ""}, {TFM_RESIZE, "RESIZE", 0, "Resize", ""}, + {TFM_SKIN_RESIZE, "SKIN_RESIZE", 0, "Skin Resize", ""}, {TFM_TOSPHERE, "TOSPHERE", 0, "Tosphere", ""}, {TFM_SHEAR, "SHEAR", 0, "Shear", ""}, {TFM_WARP, "WARP", 0, "Warp", ""}, @@ -542,6 +547,35 @@ static void TRANSFORM_OT_resize(struct wmOperatorType *ot) Transform_Properties(ot, P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_GEO_SNAP|P_OPTIONS); } +static int skin_resize_poll(bContext *C) +{ + struct Object *obedit = CTX_data_edit_object(C); + if (obedit && obedit->type == OB_MESH) { + BMEditMesh *em = BMEdit_FromObject(obedit); + return (em && CustomData_has_layer(&em->bm->vdata, CD_MVERT_SKIN)); + } + return 0; +} + +static void TRANSFORM_OT_skin_resize(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Skin Resize"; + ot->description = "Scale selected vertices' skin radii"; + ot->idname = OP_SKIN_RESIZE; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING; + + /* api callbacks */ + ot->invoke = transform_invoke; + ot->exec = transform_exec; + ot->modal = transform_modal; + ot->cancel = transform_cancel; + ot->poll = skin_resize_poll; + + RNA_def_float_vector(ot->srna, "value", 3, VecOne, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX); + + Transform_Properties(ot, P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_GEO_SNAP|P_OPTIONS); +} static void TRANSFORM_OT_trackball(struct wmOperatorType *ot) { @@ -901,6 +935,8 @@ void transform_keymap_for_space(wmKeyConfig *keyconf, wmKeyMap *keymap, int spac kmi = WM_keymap_add_item(keymap, OP_RESIZE, TKEY, KM_PRESS, KM_SHIFT|KM_ALT, 0); RNA_boolean_set(kmi->ptr, "texture_space", TRUE); + WM_keymap_add_item(keymap, OP_SKIN_RESIZE, AKEY, KM_PRESS, KM_CTRL, 0); + break; case SPACE_ACTION: kmi = WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", GKEY, KM_PRESS, 0, 0); -- cgit v1.2.3