[Bf-blender-cvs] [b21595cdf9b] temp_bmesh_multires: Tweak last commit to not affect base face set.

Joseph Eagar noreply at git.blender.org
Sat Aug 28 06:54:36 CEST 2021


Commit: b21595cdf9b06b08d86d9345412fd75fee785d16
Author: Joseph Eagar
Date:   Fri Aug 27 21:54:15 2021 -0700
Branches: temp_bmesh_multires
https://developer.blender.org/rBb21595cdf9b06b08d86d9345412fd75fee785d16

Tweak last commit to not affect base face set.

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

M	source/blender/blenkernel/BKE_pbvh.h
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/blenkernel/intern/pbvh_intern.h
M	source/blender/editors/sculpt_paint/sculpt.c
M	source/blender/editors/sculpt_paint/sculpt_dyntopo.c
M	source/blender/editors/sculpt_paint/sculpt_intern.h

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

diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h
index 4ccdc66349b..9a6e6983293 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -874,4 +874,3 @@ typedef struct SculptLayerEntry {
 #ifdef __cplusplus
 }
 #endif
-
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index e5c7d4a183a..078c087a1b5 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -1630,7 +1630,7 @@ static bool sculpt_modifiers_active(Scene *scene, Sculpt *sd, Object *ob)
   return false;
 }
 
-char BKE_get_fset_boundary_symflag(Object *object) 
+char BKE_get_fset_boundary_symflag(Object *object)
 {
   const Mesh *mesh = BKE_mesh_from_object(object);
   return mesh->flag & ME_SCULPT_MIRROR_FSET_BOUNDARIES ? mesh->symmetry : 0;
@@ -1674,7 +1674,7 @@ static void sculpt_update_object(Depsgraph *depsgraph,
 
   ss->shapekey_active = (mmd == NULL) ? BKE_keyblock_from_object(ob) : NULL;
 
-  ss->boundary_symmetry = (int) BKE_get_fset_boundary_symflag(ob);
+  ss->boundary_symmetry = (int)BKE_get_fset_boundary_symflag(ob);
 
   /* NOTE: Weight pPaint require mesh info for loop lookup, but it never uses multires code path,
    * so no extra checks is needed here. */
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index a7c24e2c82f..4ddb32f2638 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -4007,7 +4007,8 @@ void BKE_pbvh_set_stroke_id(PBVH *pbvh, int stroke_id)
   pbvh->stroke_id = stroke_id;
 }
 
-void BKE_pbvh_set_symmetry(PBVH *pbvh, int symmetry, int boundary_symmetry) {
+void BKE_pbvh_set_symmetry(PBVH *pbvh, int symmetry, int boundary_symmetry)
+{
   if (symmetry == pbvh->symmetry && boundary_symmetry == pbvh->boundary_symmetry) {
     return;
   }
@@ -4019,7 +4020,7 @@ void BKE_pbvh_set_symmetry(PBVH *pbvh, int symmetry, int boundary_symmetry) {
     BMIter iter;
     BMVert *v;
 
-    BM_ITER_MESH(v, &iter, pbvh->bm, BM_VERTS_OF_MESH) {
+    BM_ITER_MESH (v, &iter, pbvh->bm, BM_VERTS_OF_MESH) {
       MDynTopoVert *mv = BKE_PBVH_DYNVERT(pbvh->cd_dyn_vert, v);
 
       mv->flag |= DYNVERT_NEED_BOUNDARY;
diff --git a/source/blender/blenkernel/intern/pbvh_bmesh.c b/source/blender/blenkernel/intern/pbvh_bmesh.c
index 57b794307b0..78b686436db 100644
--- a/source/blender/blenkernel/intern/pbvh_bmesh.c
+++ b/source/blender/blenkernel/intern/pbvh_bmesh.c
@@ -1362,26 +1362,35 @@ typedef struct FSetTemp {
   bool boundary;
 } FSetTemp;
 
-static int do_fset_sym(int fset, const int symflag, const float *co) {
+static int do_fset_sym(int fset, const int symflag, const float *co)
+{
   fset = abs(fset);
 
-  //surely we don't need more then 8 million face sets?
+  // don't affect base face set
+  if (fset == 1) {
+    return 1;
+  }
+
+  // surely we don't need more then 8 million face sets?
   if (co[0] < 0.0f) {
-    fset |= (symflag&1) << 24;
+    fset |= (symflag & 1) << 24;
   }
 
   if (co[1] < 0.0f) {
-    fset |= (symflag&2) << 24;
+    fset |= (symflag & 2) << 24;
   }
 
   if (co[2] < 0.0f) {
-    fset |= (symflag&4) << 24;
+    fset |= (symflag & 4) << 24;
   }
 
   return fset;
 }
 
-void bke_pbvh_update_vert_boundary(int cd_dyn_vert, int cd_faceset_offset, BMVert *v, int bound_symmetry)
+void bke_pbvh_update_vert_boundary(int cd_dyn_vert,
+                                   int cd_faceset_offset,
+                                   BMVert *v,
+                                   int bound_symmetry)
 {
   MDynTopoVert *mv = BKE_PBVH_DYNVERT(cd_dyn_vert, v);
 
@@ -1436,7 +1445,8 @@ void bke_pbvh_update_vert_boundary(int cd_dyn_vert, int cd_faceset_offset, BMVer
     }
 
     if (e->l) {
-      int fset = do_fset_sym(BM_ELEM_CD_GET_INT(e->l->f, cd_faceset_offset), bound_symmetry, v2->co);
+      int fset = do_fset_sym(
+          BM_ELEM_CD_GET_INT(e->l->f, cd_faceset_offset), bound_symmetry, v2->co);
 
       if (e->l->f->len > 3) {
         mv->flag |= DYNVERT_NEED_TRIANGULATE;
@@ -1477,8 +1487,9 @@ void bke_pbvh_update_vert_boundary(int cd_dyn_vert, int cd_faceset_offset, BMVer
       // also check e->l->radial_next, in case we are not manifold
       // which can mess up the loop order
       if (e->l->radial_next != e->l) {
-        //fset = abs(BM_ELEM_CD_GET_INT(e->l->radial_next->f, cd_faceset_offset));
-        fset = do_fset_sym(BM_ELEM_CD_GET_INT(e->l->radial_next->f, cd_faceset_offset), bound_symmetry, v2->co);
+        // fset = abs(BM_ELEM_CD_GET_INT(e->l->radial_next->f, cd_faceset_offset));
+        fset = do_fset_sym(
+            BM_ELEM_CD_GET_INT(e->l->radial_next->f, cd_faceset_offset), bound_symmetry, v2->co);
 
         if (e->l->radial_next->f->len > 3) {
           mv->flag |= DYNVERT_NEED_TRIANGULATE;
@@ -1586,7 +1597,10 @@ void bke_pbvh_update_vert_boundary(int cd_dyn_vert, int cd_faceset_offset, BMVer
   BLI_array_free(fsets);
 }
 
-void BKE_pbvh_update_vert_boundary(int cd_dyn_vert, int cd_faceset_offset, BMVert *v, int bound_symmetry)
+void BKE_pbvh_update_vert_boundary(int cd_dyn_vert,
+                                   int cd_faceset_offset,
+                                   BMVert *v,
+                                   int bound_symmetry)
 {
   bke_pbvh_update_vert_boundary(cd_dyn_vert, cd_faceset_offset, v, bound_symmetry);
 }
@@ -1598,7 +1612,8 @@ void BKE_pbvh_recalc_bmesh_boundary(PBVH *pbvh)
   BMIter iter;
 
   BM_ITER_MESH (v, &iter, pbvh->bm, BM_VERTS_OF_MESH) {
-    bke_pbvh_update_vert_boundary(pbvh->cd_dyn_vert, pbvh->cd_faceset_offset, v, pbvh->boundary_symmetry);
+    bke_pbvh_update_vert_boundary(
+        pbvh->cd_dyn_vert, pbvh->cd_faceset_offset, v, pbvh->boundary_symmetry);
   }
 }
 
@@ -1728,7 +1743,8 @@ void BKE_pbvh_build_bmesh(PBVH *pbvh,
 
     mv->flag = DYNVERT_NEED_DISK_SORT;
 
-    bke_pbvh_update_vert_boundary(pbvh->cd_dyn_vert, pbvh->cd_faceset_offset, v, pbvh->boundary_symmetry);
+    bke_pbvh_update_vert_boundary(
+        pbvh->cd_dyn_vert, pbvh->cd_faceset_offset, v, pbvh->boundary_symmetry);
     BKE_pbvh_bmesh_update_valence(pbvh->cd_dyn_vert, (SculptVertRef){(intptr_t)v});
 
     copy_v3_v3(mv->origco, v->co);
diff --git a/source/blender/blenkernel/intern/pbvh_intern.h b/source/blender/blenkernel/intern/pbvh_intern.h
index 050869ea351..da85e1fffad 100644
--- a/source/blender/blenkernel/intern/pbvh_intern.h
+++ b/source/blender/blenkernel/intern/pbvh_intern.h
@@ -320,14 +320,18 @@ bool pbvh_bmesh_node_limit_ensure(PBVH *pbvh, int node_index);
 void pbvh_bmesh_check_nodes(PBVH *pbvh);
 void bke_pbvh_insert_face_finalize(PBVH *pbvh, BMFace *f, const int ni);
 void bke_pbvh_insert_face(PBVH *pbvh, struct BMFace *f);
-void bke_pbvh_update_vert_boundary(int cd_dyn_vert, int cd_faceset_offset, BMVert *v, int bound_symmetry);
+void bke_pbvh_update_vert_boundary(int cd_dyn_vert,
+                                   int cd_faceset_offset,
+                                   BMVert *v,
+                                   int bound_symmetry);
 
 BLI_INLINE bool pbvh_check_vert_boundary(PBVH *pbvh, struct BMVert *v)
 {
   MDynTopoVert *mv = BM_ELEM_CD_GET_VOID_P(v, pbvh->cd_dyn_vert);
 
   if (mv->flag & DYNVERT_NEED_BOUNDARY) {
-    bke_pbvh_update_vert_boundary(pbvh->cd_dyn_vert, pbvh->cd_faceset_offset, v, pbvh->boundary_symmetry);
+    bke_pbvh_update_vert_boundary(
+        pbvh->cd_dyn_vert, pbvh->cd_faceset_offset, v, pbvh->boundary_symmetry);
     return true;
   }
 
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 4e44b4123d4..29e07efc5d5 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -1230,7 +1230,8 @@ bool SCULPT_vertex_has_unique_face_set(const SculptSession *ss, SculptVertRef in
       MDynTopoVert *mv = BKE_PBVH_DYNVERT(ss->cd_dyn_vert, v);
 
       if (mv->flag & DYNVERT_NEED_BOUNDARY) {
-        BKE_pbvh_update_vert_boundary(ss->cd_dyn_vert, ss->cd_faceset_offset, v, ss->cache->boundary_symmetry);
+        BKE_pbvh_update_vert_boundary(
+            ss->cd_dyn_vert, ss->cd_faceset_offset, v, ss->cache->boundary_symmetry);
       }
 
       return !(mv->flag & DYNVERT_FSET_BOUNDARY);
@@ -1595,7 +1596,10 @@ SculptCornerType SCULPT_vertex_is_corner(const SculptSession *ss,
       MDynTopoVert *mv = BKE_PBVH_DYNVERT(ss->cd_dyn_vert, v);
 
       if (mv->flag & DYNVERT_NEED_BOUNDARY) {
-        BKE_pbvh_update_vert_boundary(ss->cd_dyn_vert, ss->cd_faceset_offset, (BMVert *)vertex.i, ss->cache->boundary_symmetry);
+        BKE_pbvh_update_vert_boundary(ss->cd_dyn_vert,
+                                      ss->cd_faceset_offset,
+                                      (BMVert *)vertex.i,
+                                      ss->cache->boundary_symmetry);
       }
 
       ret = 0;
@@ -1665,7 +1669,10 @@ SculptBoundaryType SCULPT_vertex_is_boundary(const SculptSession *ss,
       MDynTopoVert *mv = BKE_PBVH_DYNVERT(ss->cd_dyn_vert, ((BMVert *)(vertex.i)));
 
       if (mv->flag & DYNVERT_NEED_BOUNDARY) {
-        BKE_pbvh_update_vert_boundary(ss->cd_dyn_vert, ss->cd_faceset_offset, (BMVert *)vertex.i, ss->cache->boundary_symmetry);
+        BKE_pbvh_update_vert_boundary(ss->cd_dyn_vert,
+                                      ss->cd_faceset_offset,
+                                      (BMVert *)vertex.i,
+                                      ss->cache->boundary_symmetry);
       }
 
       int flag = 0;
diff --git a/source/blender/editors/sculpt_paint/sculpt_dyntopo.c b/source/blender/editors/sculpt_paint/sculpt_dyntopo.c
index f198af831d8..c985d7b9e9d 100644
--- a/source/blender/editors/sculpt_paint/sculpt_dyntopo.c
+++ b/source/blender/editors/sculpt_paint/sculpt_dyntopo.c
@@ -839,7 +839,8 @@ void SCULPT_dynamic_topology_enable_ex(Main *bmain, Depsgraph *depsgraph, Scene
 
     mv->flag |= DYNVERT_NEED_DISK_SORT | DYNVERT_NEED_VALENCE;
 
-    BKE_pbvh_update_vert_boundary(ss->cd_dyn_vert, ss->cd_faceset_offset, v, ss->boundary_symmetry);
+    BKE_pbvh_update_vert_boundary(
+        ss->cd_dyn_vert, ss->cd_faceset_offset, v, ss->boundary_symmetry);
     BKE_pbvh_bmesh_update_valence(ss->cd_dyn_vert, (Sculpt

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list