[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