[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