[Bf-blender-cvs] [8189f2c8062] sculpt-dev: Merge branch 'master' into sculpt-dev
Pablo Dobarro
noreply at git.blender.org
Sun Apr 18 18:15:05 CEST 2021
Commit: 8189f2c806206b4c5d8acfec0a5041fd9fef7426
Author: Pablo Dobarro
Date: Thu Apr 15 20:14:30 2021 +0200
Branches: sculpt-dev
https://developer.blender.org/rB8189f2c806206b4c5d8acfec0a5041fd9fef7426
Merge branch 'master' into sculpt-dev
===================================================================
===================================================================
diff --cc release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 238b218022e,9404bfe327a..3d566b6c949
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@@ -4469,8 -4469,9 +4469,9 @@@ def km_sculpt(params)
)
items.extend([
- # Switch Object (release to avoid conflict with grease pencil drawing).
- ("object.switch_object", {"type": 'D', "value": 'RELEASE'}, None),
+ # Transfer Sculpt Mode (release to avoid conflict with grease pencil drawing).
+ ("object.transfer_mode", {"type": 'D', "value": 'RELEASE'},
- {"properties": [("use_eyedropper", False)]}),
++ {"properties": [("use_eyedropper", False), ("flash_object", True)]}),
# Brush strokes
("sculpt.brush_stroke", {"type": 'LEFTMOUSE', "value": 'PRESS'},
{"properties": [("mode", 'NORMAL')]}),
diff --cc release/scripts/startup/bl_ui/space_view3d.py
index 0a3ad58efc8,08f4ed9dd6c..0f8e68bfd00
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@@ -3040,9 -3040,10 +3040,16 @@@ class VIEW3D_MT_sculpt(Menu)
layout.separator()
+ props = layout.operator("object.transfer_mode", text="Transfer Sculpt Mode")
+ props.use_eyedropper = True
++ props.flash_object = False
++
++ layout.separator()
++
+ layout.operator("sculpt.reset_brushes")
+
+
class VIEW3D_MT_mask(Menu):
bl_label = "Mask"
diff --cc source/blender/blenloader/intern/versioning_290.c
index 199d188b588,e8a6ee7a583..153e2967b96
--- a/source/blender/blenloader/intern/versioning_290.c
+++ b/source/blender/blenloader/intern/versioning_290.c
@@@ -2067,5 -2043,32 +2044,44 @@@ void blo_do_versions_290(FileData *fd,
}
}
}
+
+ /* Consolidate node and final evaluation modes. */
+ LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
+ LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
+ LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
+ if (sl->spacetype == SPACE_SPREADSHEET) {
+ SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)sl;
+ if (sspreadsheet->object_eval_state == 2) {
+ sspreadsheet->object_eval_state = SPREADSHEET_OBJECT_EVAL_STATE_EVALUATED;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Versioning code until next subversion bump goes here.
+ *
+ * \note Be sure to check when bumping the version:
+ * - "versioning_userdef.c", #blo_do_versions_userdef
+ * - "versioning_userdef.c", #do_versions_theme
+ *
+ * \note Keep this message at the bottom of the function.
+ */
+ {
+ /* Keep this block, even when empty. */
++ LISTBASE_FOREACH (Brush *, br, &bmain->brushes) {
++ BKE_brush_default_input_curves_set(br);
++ }
++
++ if (!DNA_struct_elem_find(fd->filesdna, "Sculpt", "float", "smooth_strength_factor")) {
++ LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
++ Sculpt *sd = scene->toolsettings->sculpt;
++ if (sd) {
++ sd->smooth_strength_factor = 1.0f;
++ }
++ }
++ }
}
}
diff --cc source/blender/editors/object/object_modes.c
index 4c07b067e4a,ff1855cafc5..6b70ed085b0
--- a/source/blender/editors/object/object_modes.c
+++ b/source/blender/editors/object/object_modes.c
@@@ -36,10 -30,7 +36,11 @@@
#include "BLI_math.h"
#include "BLI_utildefines.h"
+#include "GPU_immediate.h"
+#include "GPU_immediate_util.h"
+#include "GPU_matrix.h"
+#include "GPU_state.h"
+ #include "BLT_translation.h"
#include "BKE_context.h"
#include "BKE_gpencil_modifier.h"
@@@ -422,106 -410,33 +424,89 @@@ bool ED_object_mode_generic_has_data(st
* leaving the mode of the current object.
* \{ */
+typedef struct SwitchObjectCustomData {
+ void *draw_handle;
+ Object *target_object;
+ Mesh *mesh;
+ MLoopTri *looptri;
+ wmTimer *timer;
+
+ int tottris;
+ double start_time;
+ float alpha;
+} SwitchObjectCustomData;
+
- static void switch_object_draw(const bContext *UNUSED(C), ARegion *UNUSED(ar), void *arg)
++static void transfer_mode_draw(const bContext *UNUSED(C), ARegion *UNUSED(ar), void *arg)
+{
+ SwitchObjectCustomData *cd = arg;
+
+ if (!cd->mesh) {
+ return;
+ }
+ if (!cd->looptri) {
+ return;
+ }
+
+ GPU_blend(GPU_BLEND_ALPHA);
+ GPU_line_smooth(true);
+
+ uint pos3d = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_3D_CLIPPED_UNIFORM_COLOR);
+ GPU_matrix_push();
+ GPU_matrix_mul(cd->target_object->obmat);
+
+ const float col_base = 0.6f;
+ immUniformColor4f(col_base, col_base, col_base, 0.25 * cd->alpha);
+
+ Mesh *mesh = cd->mesh;
+ immBegin(GPU_PRIM_TRIS, cd->tottris * 3);
+
+ for (int i = 0; i < cd->tottris; i++) {
+ MLoopTri *looptri = &cd->looptri[i];
+ for (int j = 0; j < 3; j++) {
+ MLoop *loop = &mesh->mloop[looptri->tri[j]];
+ MVert *vert = &mesh->mvert[loop->v];
+ float co[3] = {0.0f, 0.0f, 0.0f};
+ immVertex3fv(pos3d, vert->co);
+ }
+ }
+
+ immEnd();
+
+ immUnbindProgram();
+ GPU_matrix_pop();
+ GPU_blend(GPU_BLEND_NONE);
+
+ GPU_line_smooth(false);
+}
+
- static int object_switch_object_modal(bContext *C, wmOperator *op, const wmEvent *event)
+ static bool object_transfer_mode_poll(bContext *C)
{
-
- ARegion *region = CTX_wm_region(C);
- SwitchObjectCustomData *cd = op->customdata;
- if (cd->start_time == 0.0) {
- cd->start_time = PIL_check_seconds_timer();
- }
- const double time = PIL_check_seconds_timer();
- const double delta_time = time - cd->start_time;
- float alpha = 1.0f - (6.0 * delta_time);
-
- if (alpha > 0.01f) {
- cd->alpha = alpha;
- ED_region_tag_redraw(region);
- return OPERATOR_RUNNING_MODAL;
+ if (!CTX_wm_region_view3d(C)) {
+ return false;
}
-
- WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), cd->timer);
-
- ED_region_draw_cb_exit(region->type, cd->draw_handle);
- MEM_freeN(op->customdata);
- ED_region_tag_redraw(region);
-
- return OPERATOR_FINISHED;
+ const Object *ob = CTX_data_active_object(C);
+ return ob && (ob->mode & (OB_MODE_SCULPT));
}
- static bool object_switch_object_poll(bContext *C)
+ /* Update the viewport rotation origin to the mouse cursor. */
+ static void object_transfer_mode_reposition_view_pivot(bContext *C, const int mval[2])
{
+ ARegion *region = CTX_wm_region(C);
+ Scene *scene = CTX_data_scene(C);
- if (!U.experimental.use_switch_object_operator) {
- return false;
- }
-
- if (!CTX_wm_region_view3d(C)) {
- return false;
+ float global_loc[3];
+ if (!ED_view3d_autodist_simple(region, mval, global_loc, 0, NULL)) {
+ return;
}
- const Object *ob = CTX_data_active_object(C);
- return ob && (ob->mode & (OB_MODE_EDIT | OB_MODE_SCULPT));
+ UnifiedPaintSettings *ups = &scene->toolsettings->unified_paint_settings;
+ copy_v3_v3(ups->average_stroke_accum, global_loc);
+ ups->average_stroke_counter = 1;
+ ups->last_stroke_valid = true;
}
- static int object_switch_object_invoke(bContext *C, wmOperator *op, const wmEvent *event)
+ static bool object_transfer_mode_to_base(bContext *C, wmOperator *op, Base *base_dst)
{
- ARegion *region = CTX_wm_region(C);
Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
@@@ -578,46 -478,75 +548,165 @@@
}
ED_undo_group_end(C);
+ return mode_transfered;
+ }
- const bool flash_object = true;
++static bool object_transfer_mode_flash_animation_update(bContext *C, wmOperator *op) {
++ SwitchObjectCustomData *cd = op->customdata;
+
- if (!flash_object) {
- if (switched) {
- return OPERATOR_FINISHED;
- }
- else {
- return OPERATOR_CANCELLED;
- }
++ if (cd == NULL) {
++ return true;
++ }
++
++ ARegion *region = CTX_wm_region(C);
++ if (cd->start_time == 0.0) {
++ cd->start_time = PIL_check_seconds_timer();
++ }
++ const double time = PIL_check_seconds_timer();
++ const double delta_time = time - cd->start_time;
++ float alpha = 1.0f - (6.0 * delta_time);
++
++ if (alpha > 0.01f) {
++ cd->alpha = alpha;
++ ED_region_tag_redraw(region);
++ return false;
+ }
+
++ WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), cd->timer);
++
++ ED_region_draw_cb_exit(region->type, cd->draw_handle);
++ MEM_freeN(op->customdata);
++ ED_region_tag_redraw(region);
++
++ return true;
++}
++
++static void object_transfer_mode_flash_animation_begin(bContext *C, wmOperator *op, Base *base_dst) {
++
++ if (!base_dst) {
++ return;
++ }
++
++ if (!base_dst->object) {
++ return;
++ }
++
++
++ ARegion *region = CTX_wm_region(C);
+ SwitchObjectCustomData *cd = MEM_callocN(sizeof(SwitchObjectCustomData),
+ "Switch Object Custom Data");
+
+ cd->timer = WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.05f);
+ cd->draw_handle = ED_region_draw_cb_activate(
- region->type, switch_object_draw, cd, REGION_DRAW_POST_VIEW);
- cd->target_object = ob_dst;
++ region->type, transfer_mode_draw, cd, REGION_DRAW_POST_VIEW);
++ cd->target_object = base_dst->object;
+ cd->start_time = 0.0;
+
+ Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
+ Object *evaluated_object = DEG_get_evaluated_object(depsgraph, cd->target_object);
+ Mesh *mesh = BKE_modifier_get_evaluated_mesh_from_evaluated_object(evaluated_object, false);
+ const MLoopTri *looptri = BKE_mesh_runtime_looptri_ensure(mesh);
+ cd->looptri = looptri;
+ cd->tottris = BKE_mesh_runtime_looptri_len(mesh);
+ cd->mesh = mesh;
+ cd->alpha = 1.0f;
-
+ op->customdata = cd;
++}
++
+ static int object_transfer_mode_modal(bContext *C, wmOperator *op, const wmEvent *event)
+ {
++ const bool use_eyedropper = RNA_boolean_get(op->ptr, "use_eyedropper");
++ const bool flash_object = RNA_boolean_get(op->ptr, "flash_object");
++
++ if (use_eyedropper) {
+ swi
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list