[Bf-blender-cvs] [12ff7b4297d] sculpt-dev: Sculpt: fix problem with smooth brush defaults

Joseph Eagar noreply at git.blender.org
Wed Oct 6 02:28:32 CEST 2021


Commit: 12ff7b4297dbe1bb3dca0f18775009614348776a
Author: Joseph Eagar
Date:   Tue Oct 5 17:27:23 2021 -0700
Branches: sculpt-dev
https://developer.blender.org/rB12ff7b4297dbe1bb3dca0f18775009614348776a

Sculpt: fix problem with smooth brush defaults

Also wrapped some mv->flag OR's in a
macro, that can be switched with a macro
for debugging.

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

M	source/blender/blenkernel/BKE_blender_version.h
M	source/blender/blenkernel/BKE_pbvh.h
M	source/blender/blenkernel/intern/brush_engine_presets.c
M	source/blender/blenkernel/intern/dyntopo.c
M	source/blender/blenkernel/intern/paint.c
M	source/blender/blenkernel/intern/pbvh.c
M	source/blender/blenkernel/intern/pbvh_bmesh.c
M	source/blender/blenloader/intern/versioning_300.c
M	source/blender/editors/sculpt_paint/sculpt.c
M	source/blender/editors/sculpt_paint/sculpt_face_set.c
M	source/blender/editors/sculpt_paint/sculpt_undo.c

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

diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h
index 31ce1b124e9..ceb19e87b40 100644
--- a/source/blender/blenkernel/BKE_blender_version.h
+++ b/source/blender/blenkernel/BKE_blender_version.h
@@ -39,7 +39,7 @@ extern "C" {
 
 /* Blender file format version. */
 #define BLENDER_FILE_VERSION BLENDER_VERSION
-#define BLENDER_FILE_SUBVERSION 32
+#define BLENDER_FILE_SUBVERSION 33
 
 /* Minimum Blender version that supports reading file written with the current
  * version. Older Blender versions will test this and show a warning if the file
diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h
index 69640117f48..acdfe117931 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -953,7 +953,19 @@ void BKE_pbvh_update_vert_boundary_grids(PBVH *pbvh,
                                          SculptVertRef vertex);
 
 void BKE_pbvh_set_mdyntopo_verts(PBVH *pbvh, struct MDynTopoVert *mdyntopoverts);
+#if 0
+#  include "DNA_meshdata_types.h"
+ATTR_NO_OPT static void MV_ADD_FLAG(MDynTopoVert *mv, int flag)
+{
+  if (flag & DYNVERT_NEED_BOUNDARY) {
+    flag |= flag;
+  }
 
+  mv->flag |= flag;
+}
+#else
+#  define MV_ADD_FLAG(mv, flag1) (mv)->flag |= (flag1)
+#endif
 #ifdef __cplusplus
 }
 #endif
diff --git a/source/blender/blenkernel/intern/brush_engine_presets.c b/source/blender/blenkernel/intern/brush_engine_presets.c
index c14615246a3..f32b4ae3f24 100644
--- a/source/blender/blenkernel/intern/brush_engine_presets.c
+++ b/source/blender/blenkernel/intern/brush_engine_presets.c
@@ -1244,6 +1244,7 @@ void BKE_brush_channelset_ui_init(Brush *brush, int tool)
 
   SHOWWRK(normal_radius_factor);
   SHOWWRK(hardness);
+  SHOWWRK(dyntopo_disabled);
 
   switch (tool) {
     case SCULPT_TOOL_INFLATE:
@@ -1263,6 +1264,7 @@ void BKE_brush_channelset_ui_init(Brush *brush, int tool)
       SHOWWRK(smooth_deform_type);
       SHOWCTX(smooth_deform_type);
       SHOWWRK(projection);
+      SHOWCTX(dyntopo_disabled);
       break;
     case SCULPT_TOOL_SCRAPE:
     case SCULPT_TOOL_FILL:
@@ -1596,6 +1598,8 @@ void BKE_brush_builtin_create(Brush *brush, int tool)
       BRUSHSET_SET_FLOAT(chset, spacing, 5.0f);
       BRUSHSET_SET_FLOAT(chset, strength, 0.3f);
 
+      BRUSHSET_SET_BOOL(chset, dyntopo_disabled, true);
+
       ADDCH(surface_smooth_shape_preservation);
       ADDCH(surface_smooth_current_vertex);
       ADDCH(surface_smooth_iterations);
diff --git a/source/blender/blenkernel/intern/dyntopo.c b/source/blender/blenkernel/intern/dyntopo.c
index 834652000a7..6223a748028 100644
--- a/source/blender/blenkernel/intern/dyntopo.c
+++ b/source/blender/blenkernel/intern/dyntopo.c
@@ -200,8 +200,9 @@ static void fix_mesh(PBVH *pbvh, BMesh *bm)
     v->e = NULL;
     MDynTopoVert *mv = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, v);
 
-    mv->flag |= DYNVERT_NEED_VALENCE | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_DISK_SORT |
-                DYNVERT_NEED_TRIANGULATE;
+    MV_ADD_FLAG(mv,
+                DYNVERT_NEED_VALENCE | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_DISK_SORT |
+                    DYNVERT_NEED_TRIANGULATE);
   }
 
   BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
@@ -804,7 +805,7 @@ static BMVert *pbvh_bmesh_vert_create(PBVH *pbvh,
   BMVert *v = BM_vert_create(pbvh->bm, co, NULL, BM_CREATE_NOP);
   MDynTopoVert *mv = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, v);
 
-  mv->flag |= DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_DISK_SORT | DYNVERT_NEED_VALENCE;
+  MV_ADD_FLAG(mv, DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_DISK_SORT | DYNVERT_NEED_VALENCE);
 
   if (v_example) {
     v->head.hflag = v_example->head.hflag;
@@ -925,7 +926,7 @@ static BMFace *pbvh_bmesh_face_create(PBVH *pbvh,
       }
 
       MDynTopoVert *mv = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, l->v);
-      mv->flag |= DYNVERT_NEED_DISK_SORT | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_VALENCE;
+      MV_ADD_FLAG(mv, DYNVERT_NEED_DISK_SORT | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_VALENCE);
 
       l = l->next;
     } while (l != f->l_first);
@@ -935,7 +936,7 @@ static BMFace *pbvh_bmesh_face_create(PBVH *pbvh,
     do {
 
       MDynTopoVert *mv = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, l->v);
-      mv->flag |= DYNVERT_NEED_DISK_SORT | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_VALENCE;
+      MV_ADD_FLAG(mv, DYNVERT_NEED_DISK_SORT | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_VALENCE);
     } while ((l = l->next) != f->l_first);
   }
 
@@ -978,7 +979,7 @@ BMVert *BKE_pbvh_vert_create_bmesh(
     BM_ELEM_CD_SET_INT(v, pbvh->cd_vert_node_offset, DYNTOPO_NODE_NONE);
 
     MDynTopoVert *mv = BM_ELEM_CD_GET_VOID_P(v, pbvh->cd_dyn_vert);
-    mv->flag |= DYNVERT_NEED_VALENCE | DYNVERT_NEED_DISK_SORT | DYNVERT_NEED_BOUNDARY;
+    MV_ADD_FLAG(mv, DYNVERT_NEED_VALENCE | DYNVERT_NEED_DISK_SORT | DYNVERT_NEED_BOUNDARY);
 
     copy_v3_v3(mv->origco, co);
 
@@ -2539,7 +2540,7 @@ static bool check_vert_fan_are_tris(PBVH *pbvh, BMVert *v)
     do {
       MDynTopoVert *mv_l = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, l->v);
 
-      mv_l->flag |= DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_VALENCE | DYNVERT_NEED_DISK_SORT;
+      MV_ADD_FLAG(mv_l, DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_VALENCE | DYNVERT_NEED_DISK_SORT);
     } while ((l = l->next) != f->l_first);
     BLI_array_append(fs, f);
   }
@@ -3131,8 +3132,8 @@ static void pbvh_bmesh_split_edge(EdgeQueueContext *eq_ctx,
   pbvh_check_vert_boundary(pbvh, e->v1);
   pbvh_check_vert_boundary(pbvh, e->v2);
 
-  mv1->flag |= DYNVERT_NEED_VALENCE | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_DISK_SORT;
-  mv2->flag |= DYNVERT_NEED_VALENCE | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_DISK_SORT;
+  MV_ADD_FLAG(mv1, DYNVERT_NEED_VALENCE | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_DISK_SORT);
+  MV_ADD_FLAG(mv2, DYNVERT_NEED_VALENCE | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_DISK_SORT);
 
   bool boundary = (mv1->flag & DYNVERT_ALL_BOUNDARY) && (mv2->flag & DYNVERT_ALL_BOUNDARY);
 
@@ -3173,7 +3174,7 @@ static void pbvh_bmesh_split_edge(EdgeQueueContext *eq_ctx,
       &pbvh->bm->vdata, (const void **)vsrcs, (float *)vws, NULL, 2, v_new->head.data);
 
   // bke_pbvh_update_vert_boundary(pbvh->cd_dyn_vert, pbvh->cd_faceset_offset, v_new);
-  mv_new->flag |= DYNVERT_NEED_DISK_SORT | DYNVERT_NEED_VALENCE | DYNVERT_NEED_BOUNDARY;
+  MV_ADD_FLAG(mv_new, DYNVERT_NEED_DISK_SORT | DYNVERT_NEED_VALENCE | DYNVERT_NEED_BOUNDARY);
   mv_new->flag &= ~DYNVERT_VALENCE_TEMP;
 
   int ni_new2 = BM_ELEM_CD_GET_INT(v_new, pbvh->cd_vert_node_offset);
@@ -3207,9 +3208,9 @@ static void pbvh_bmesh_split_edge(EdgeQueueContext *eq_ctx,
     MDynTopoVert *mv2b = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, v2);
     MDynTopoVert *mv_opp = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, v_opp);
 
-    mv1b->flag |= DYNVERT_NEED_VALENCE | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_DISK_SORT;
-    mv2b->flag |= DYNVERT_NEED_VALENCE | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_DISK_SORT;
-    mv_opp->flag |= DYNVERT_NEED_VALENCE | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_DISK_SORT;
+    MV_ADD_FLAG(mv1b, DYNVERT_NEED_VALENCE | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_DISK_SORT);
+    MV_ADD_FLAG(mv2b, DYNVERT_NEED_VALENCE | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_DISK_SORT);
+    MV_ADD_FLAG(mv_opp, DYNVERT_NEED_VALENCE | DYNVERT_NEED_BOUNDARY | DYNVERT_NEED_DISK_SORT);
 
     if (ni != node_index && i == 0) {
       pbvh_bmesh_vert_ownership_transfer(pbvh, &pbvh->nodes[ni], v_new);
@@ -3778,7 +3779,7 @@ static void pbvh_bmesh_collapse_edge(PBVH *pbvh,
 
     BM_LOOPS_OF_VERT_ITER_BEGIN (l, v_del) {
       MDynTopoVert *mv_l = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, l->next->v);
-      mv_l->flag |= mupdateflag;
+      MV_ADD_FLAG(mv_l, mupdateflag);
 
       BLI_array_append(ls, l);
       totl++;
@@ -3787,7 +3788,7 @@ static void pbvh_bmesh_collapse_edge(PBVH *pbvh,
 
     BM_LOOPS_OF_VERT_ITER_BEGIN (l, v_conn) {
       MDynTopoVert *mv_l = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, l->next->v);
-      mv_l->flag |= mupdateflag;
+      MV_ADD_FLAG(mv_l, mupdateflag);
 
       BLI_array_append(ls, l);
       totl++;
@@ -3948,7 +3949,7 @@ static void pbvh_bmesh_collapse_edge(PBVH *pbvh,
     }
 
     MDynTopoVert *mv1 = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, v);
-    mv1->flag |= mupdateflag;
+    MV_ADD_FLAG(mv1, mupdateflag);
 
     BKE_pbvh_bmesh_remove_vertex(pbvh, v, true);
 
@@ -3980,7 +3981,7 @@ static void pbvh_bmesh_collapse_edge(PBVH *pbvh,
   }
 
   MDynTopoVert *mv_conn = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, v_conn);
-  mv_conn->flag |= mupdateflag;
+  MV_ADD_FLAG(mv_conn, mupdateflag);
 
   bool wasbad = false;
 
@@ -3996,7 +3997,7 @@ static void pbvh_bmesh_collapse_edge(PBVH *pbvh,
 
     BMVert *v2 = BM_edge_other_vert(e2, v_conn);
     MDynTopoVert *mv2 = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, v2);
-    mv2->flag |= mupdateflag;
+    MV_ADD_FLAG(mv2, mupdateflag);
 
     // kill wire edge
     if (!l) {
@@ -4050,7 +4051,7 @@ static void pbvh_bmesh_collapse_edge(PBVH *pbvh,
   // BM_vert_splice(pbvh->bm, v_del, v_conn);
 
   MDynTopoVert *mv3 = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, v_conn);
-  mv3->flag |= mupdateflag;
+  MV_ADD_FLAG(mv3, mupdateflag);
 
   if (BM_ELEM_CD_GET_INT(v_conn, pbvh->cd_vert_node_offset) == DYNTOPO_NODE_NONE) {
     printf("%s: error\n", __func__);
@@ -4149,7 +4150,7 @@ static void pbvh_bmesh_collapse_edge1(PBVH *pbvh,
       BMEdge *e2 = l->e;
 
       MDynTopoVert *mv_l = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, l->v);
-      mv_l->flag |= mupdateflag;
+      MV_ADD_FLAG(mv_l, mupdateflag);
 
       l = l->next;
     } while (l != f_adj->l_first);
@@ -4192,7 +4193,7 @@ static void pbvh_bmesh_collapse_edge1(PBVH *pbvh,
 
   BM_LOOPS_OF_VERT_ITER_BEGIN (l, v_del) {
     MDynTopoVert *mv_l = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, l->v);
-    mv_l->flag |= mupdateflag;
+    MV_ADD_FLAG(mv_l, mupdateflag);
 
     BLI_array_append(ls, l);
     totl++;
@@ -4201,7 +4202,7 @@ static void pbvh_bmesh_collapse_edge1(PBVH *pbvh,
 
   BM_LOOPS_OF_VERT_ITER_BEGIN (l, v_conn) {
     MDynTopoVert *mv_l = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, l->v);
-    mv_l->flag |= mupdateflag;
+    MV_ADD_FLAG(mv_l, mupdateflag);
 
     BLI_array_append(ls, l);
     totl++;
@@ -4340,8 +4341,8 @@ static void pbvh_bmesh_collapse_edge1(PBVH *pbvh,
       MDynTopoVert *mv2 = BKE_PBVH_DYNVERT

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list