Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/sculpt_paint/paint_ops.c')
-rw-r--r--source/blender/editors/sculpt_paint/paint_ops.c151
1 files changed, 121 insertions, 30 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c
index 5d52b0a3272..b5cadb9c484 100644
--- a/source/blender/editors/sculpt_paint/paint_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_ops.c
@@ -46,7 +46,7 @@ static int brush_add_exec(bContext *C, wmOperator *op)
{
/*int type = RNA_enum_get(op->ptr, "type");*/
Paint *paint = paint_get_active(CTX_data_scene(C));
- Brush *br = paint_brush(paint);
+ struct Brush *br = paint_brush(paint);
if (br)
br = copy_brush(br);
@@ -69,23 +69,44 @@ void BRUSH_OT_add(wmOperatorType *ot)
ot->exec= brush_add_exec;
/* flags */
- ot->flag= OPTYPE_UNDO;
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
static int brush_scale_size_exec(bContext *C, wmOperator *op)
{
- /*int type = RNA_enum_get(op->ptr, "type");*/
- Paint *paint = paint_get_active(CTX_data_scene(C));
- Brush *br = paint_brush(paint);
- float factor = RNA_float_get(op->ptr, "scalar");
-
- if (br) {
- if (U.sculpt_paint_settings & SCULPT_PAINT_USE_UNIFIED_SIZE) {
- U.sculpt_paint_unified_size *= factor;
+ Paint *paint= paint_get_active(CTX_data_scene(C));
+ struct Brush *brush= paint_brush(paint);
+ // Object *ob= CTX_data_active_object(C);
+ float scalar= RNA_float_get(op->ptr, "scalar");
+
+ if (brush) {
+ // pixel radius
+ {
+ const int old_size= brush_size(brush);
+ int size= (int)(scalar*old_size);
+
+ if (old_size == size) {
+ if (scalar > 1) {
+ size++;
+ }
+ else if (scalar < 1) {
+ size--;
+ }
+ }
+ CLAMP(size, 1, 2000); // XXX magic number
+
+ brush_set_size(brush, size);
}
- else {
- br->size *= factor;
+
+ // unprojected radius
+ {
+ float unprojected_radius= scalar*brush_unprojected_radius(brush);
+
+ if (unprojected_radius < 0.001) // XXX magic number
+ unprojected_radius= 0.001f;
+
+ brush_set_unprojected_radius(brush, unprojected_radius);
}
}
@@ -103,7 +124,7 @@ void BRUSH_OT_scale_size(wmOperatorType *ot)
ot->exec= brush_scale_size_exec;
/* flags */
- ot->flag= OPTYPE_UNDO;
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
RNA_def_float(ot->srna, "scalar", 1, 0, 2, "Scalar", "Factor to scale brush size by", 0, 2);
}
@@ -133,6 +154,35 @@ void PAINT_OT_vertex_color_set(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
+static int brush_reset_exec(bContext *C, wmOperator *op)
+{
+ Paint *paint = paint_get_active(CTX_data_scene(C));
+ struct Brush *brush = paint_brush(paint);
+ Object *ob = CTX_data_active_object(C);
+
+ if(!ob) return OPERATOR_CANCELLED;
+
+ if(ob->mode & OB_MODE_SCULPT)
+ brush_reset_sculpt(brush);
+ /* TODO: other modes */
+
+ return OPERATOR_FINISHED;
+}
+
+void BRUSH_OT_reset(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Reset Brush";
+ ot->description= "Return brush to defaults based on current tool";
+ ot->idname= "BRUSH_OT_reset";
+
+ /* api callbacks */
+ ot->exec= brush_reset_exec;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
/**************************** registration **********************************/
void ED_operatortypes_paint(void)
@@ -141,7 +191,7 @@ void ED_operatortypes_paint(void)
WM_operatortype_append(BRUSH_OT_add);
WM_operatortype_append(BRUSH_OT_scale_size);
WM_operatortype_append(BRUSH_OT_curve_preset);
-
+ WM_operatortype_append(BRUSH_OT_reset);
/* image */
WM_operatortype_append(PAINT_OT_texture_paint_toggle);
@@ -154,7 +204,6 @@ void ED_operatortypes_paint(void)
WM_operatortype_append(PAINT_OT_project_image);
WM_operatortype_append(PAINT_OT_image_from_view);
-
/* weight */
WM_operatortype_append(PAINT_OT_weight_paint_toggle);
WM_operatortype_append(PAINT_OT_weight_paint_radial_control);
@@ -209,6 +258,36 @@ static void ed_keymap_paint_brush_switch(wmKeyMap *keymap, const char *path)
kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", ZEROKEY, KM_PRESS, 0, 0);
RNA_string_set(kmi->ptr, "data_path", path);
RNA_int_set(kmi->ptr, "value", 9);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", ONEKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 10);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", TWOKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 11);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", THREEKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 12);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", FOURKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 13);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", FIVEKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 14);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", SIXKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 15);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", SEVENKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 16);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", EIGHTKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 17);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", NINEKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 18);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", ZEROKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", path);
+ RNA_int_set(kmi->ptr, "value", 19);
}
static void ed_keymap_paint_brush_size(wmKeyMap *keymap, const char *path)
@@ -271,29 +350,41 @@ void ED_keymap_paint(wmKeyConfig *keyconf)
RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush.use_airbrush");
/* brush switching */
- kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", DKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.active_brush_name");
- RNA_string_set(kmi->ptr, "value", "Draw");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", DKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
+ RNA_string_set(kmi->ptr, "value", "SculptDraw");
- kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", SKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.active_brush_name");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", SKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
RNA_string_set(kmi->ptr, "value", "Smooth");
- kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", PKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.active_brush_name");
- RNA_string_set(kmi->ptr, "value", "Pinch");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", PKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
+ RNA_string_set(kmi->ptr, "value", "Pinch/Magnify");
- kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", GKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.active_brush_name");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", GKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
RNA_string_set(kmi->ptr, "value", "Grab");
- kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", LKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.active_brush_name");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", LKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
RNA_string_set(kmi->ptr, "value", "Layer");
- kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", TKEY, KM_PRESS, KM_SHIFT, 0); // was just T in 2.4x
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.active_brush_name");
- RNA_string_set(kmi->ptr, "value", "Flatten");
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", CKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
+ RNA_string_set(kmi->ptr, "value", "Crease");
+
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", CKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
+ RNA_string_set(kmi->ptr, "value", "Clay");
+
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", IKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
+ RNA_string_set(kmi->ptr, "value", "Inflate/Deflate");
+
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_id", TKEY, KM_PRESS, KM_SHIFT, 0); // was just T in 2.4x
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush");
+ RNA_string_set(kmi->ptr, "value", "Flatten/Contrast");
/* Vertex Paint mode */
keymap= WM_keymap_find(keyconf, "Vertex Paint", 0, 0);