[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