[Bf-blender-cvs] [3009701] hair_immediate_fixes: Support for common operators, keymap entries and radial controls for hair brush settings.

Lukas Tönne noreply at git.blender.org
Sat Dec 27 11:32:30 CET 2014


Commit: 3009701b698cdfa76b93d6f273a99b98c2ae7692
Author: Lukas Tönne
Date:   Wed Dec 3 17:45:42 2014 +0100
Branches: hair_immediate_fixes
https://developer.blender.org/rB3009701b698cdfa76b93d6f273a99b98c2ae7692

Support for common operators, keymap entries and radial controls for
hair brush settings.

===================================================================

M	release/scripts/startup/bl_operators/wm.py
M	source/blender/editors/hair/hair_ops.c
M	source/blender/editors/sculpt_paint/paint_ops.c

===================================================================

diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index 8d04cb1..934b034 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -142,6 +142,7 @@ class BRUSH_OT_active_index_set(Operator):
                   "vertex_paint": "use_paint_vertex",
                   "weight_paint": "use_paint_weight",
                   "image_paint": "use_paint_image",
+                  "hair_edit": "use_hair_edit",
                   }
 
     def execute(self, context):
diff --git a/source/blender/editors/hair/hair_ops.c b/source/blender/editors/hair/hair_ops.c
index 3a1e350..f2672fe 100644
--- a/source/blender/editors/hair/hair_ops.c
+++ b/source/blender/editors/hair/hair_ops.c
@@ -61,6 +61,59 @@ static int hair_poll(bContext *C)
 	return false;
 }
 
+static void ed_keymap_hair_brush_switch(wmKeyMap *keymap, const char *mode)
+{
+	wmKeyMapItem *kmi;
+	int i;
+	/* index 0-9 (zero key is tenth), shift key for index 10-19 */
+	for (i = 0; i < 20; i++) {
+		kmi = WM_keymap_add_item(keymap, "BRUSH_OT_active_index_set",
+		                         ZEROKEY + ((i + 1) % 10), KM_PRESS, i < 10 ? 0 : KM_SHIFT, 0);
+		RNA_string_set(kmi->ptr, "mode", mode);
+		RNA_int_set(kmi->ptr, "index", i);
+	}
+}
+
+static void ed_keymap_hair_brush_size(wmKeyMap *keymap, const char *UNUSED(path))
+{
+	wmKeyMapItem *kmi;
+
+	kmi = WM_keymap_add_item(keymap, "BRUSH_OT_scale_size", LEFTBRACKETKEY, KM_PRESS, 0, 0);
+	RNA_float_set(kmi->ptr, "scalar", 0.9);
+
+	kmi = WM_keymap_add_item(keymap, "BRUSH_OT_scale_size", RIGHTBRACKETKEY, KM_PRESS, 0, 0);
+	RNA_float_set(kmi->ptr, "scalar", 10.0 / 9.0); // 1.1111....
+}
+
+static void ed_keymap_hair_brush_radial_control(wmKeyMap *keymap, const char *settings, RCFlags flags)
+{
+	wmKeyMapItem *kmi;
+	/* only size needs to follow zoom, strength shows fixed size circle */
+	int flags_nozoom = flags & (~RC_ZOOM);
+	int flags_noradial_secondary = flags & (~(RC_SECONDARY_ROTATION | RC_ZOOM));
+
+	kmi = WM_keymap_add_item(keymap, "WM_OT_radial_control", FKEY, KM_PRESS, 0, 0);
+	set_brush_rc_props(kmi->ptr, settings, "size", "use_unified_size", flags);
+
+	kmi = WM_keymap_add_item(keymap, "WM_OT_radial_control", FKEY, KM_PRESS, KM_SHIFT, 0);
+	set_brush_rc_props(kmi->ptr, settings, "strength", "use_unified_strength", flags_nozoom);
+
+	if (flags & RC_WEIGHT) {
+		kmi = WM_keymap_add_item(keymap, "WM_OT_radial_control", WKEY, KM_PRESS, 0, 0);
+		set_brush_rc_props(kmi->ptr, settings, "weight", "use_unified_weight", flags_nozoom);
+	}
+
+	if (flags & RC_ROTATION) {
+		kmi = WM_keymap_add_item(keymap, "WM_OT_radial_control", FKEY, KM_PRESS, KM_CTRL, 0);
+		set_brush_rc_props(kmi->ptr, settings, "texture_slot.angle", NULL, flags_noradial_secondary);
+	}
+
+	if (flags & RC_SECONDARY_ROTATION) {
+		kmi = WM_keymap_add_item(keymap, "WM_OT_radial_control", FKEY, KM_PRESS, KM_CTRL | KM_ALT, 0);
+		set_brush_rc_props(kmi->ptr, settings, "mask_texture_slot.angle", NULL, flags_nozoom);
+	}
+}
+
 void ED_keymap_hair(wmKeyConfig *keyconf)
 {
 	wmKeyMap *keymap;
@@ -70,4 +123,8 @@ void ED_keymap_hair(wmKeyConfig *keyconf)
 	keymap->poll = hair_poll;
 	
 	kmi = WM_keymap_add_item(keymap, "HAIR_OT_stroke", LEFTMOUSE, KM_PRESS, 0,        0);
+	
+	ed_keymap_hair_brush_switch(keymap, "hair_edit");
+	ed_keymap_hair_brush_size(keymap, "tool_settings.hair_edit.brush.size");
+	ed_keymap_hair_brush_radial_control(keymap, "hair_edit", 0);
 }
diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c
index 9a2cae4..b95343c 100644
--- a/source/blender/editors/sculpt_paint/paint_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_ops.c
@@ -116,11 +116,20 @@ static void BRUSH_OT_add(wmOperatorType *ot)
 static int brush_scale_size_exec(bContext *C, wmOperator *op)
 {
 	Scene *scene = CTX_data_scene(C);
-	Paint  *paint =  BKE_paint_get_active_from_context(C);
-	Brush  *brush =  BKE_paint_brush(paint);
-	// Object *ob = CTX_data_active_object(C);
+	Object *ob = CTX_data_active_object(C);
+	Brush  *brush;
 	float scalar = RNA_float_get(op->ptr, "scalar");
 
+	/* get active brush context */
+	if (ob->mode == OB_MODE_HAIR_EDIT) {
+		HairEditSettings *hair_edit = &scene->toolsettings->hair_edit;
+		brush = hair_edit->brush;
+	}
+	else {
+		Paint  *paint = BKE_paint_get_active_from_context(C);
+		brush = BKE_paint_brush(paint);
+	}
+
 	if (brush) {
 		// pixel radius
 		{




More information about the Bf-blender-cvs mailing list