forked from bartvdbraak/blender
Hiding support for dynamic topology
This commit is contained in:
parent
bbaeac3bf8
commit
6ded71fb62
@ -232,6 +232,75 @@ static void partialvis_update_grids(Object *ob,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void partialvis_update_bmesh_verts(BMesh *bm,
|
||||||
|
GHash *verts,
|
||||||
|
PartialVisAction action,
|
||||||
|
PartialVisArea area,
|
||||||
|
float planes[4][4],
|
||||||
|
int *any_changed,
|
||||||
|
int *any_visible)
|
||||||
|
{
|
||||||
|
GHashIterator gh_iter;
|
||||||
|
|
||||||
|
GHASH_ITER (gh_iter, verts) {
|
||||||
|
BMVert *v = BLI_ghashIterator_getKey(&gh_iter);
|
||||||
|
float *vmask = CustomData_bmesh_get(&bm->vdata,
|
||||||
|
v->head.data,
|
||||||
|
CD_PAINT_MASK);
|
||||||
|
|
||||||
|
/* hide vertex if in the hide volume */
|
||||||
|
if (is_effected(area, planes, v->co, *vmask)) {
|
||||||
|
if (action == PARTIALVIS_HIDE)
|
||||||
|
BM_elem_flag_enable(v, BM_ELEM_HIDDEN);
|
||||||
|
else
|
||||||
|
BM_elem_flag_disable(v, BM_ELEM_HIDDEN);
|
||||||
|
(*any_changed) = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!BM_elem_flag_test(v, BM_ELEM_HIDDEN))
|
||||||
|
(*any_visible) = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void partialvis_update_bmesh(Object *ob,
|
||||||
|
PBVH *pbvh,
|
||||||
|
PBVHNode *node,
|
||||||
|
PartialVisAction action,
|
||||||
|
PartialVisArea area,
|
||||||
|
float planes[4][4])
|
||||||
|
{
|
||||||
|
BMesh *bm;
|
||||||
|
GHash *unique, *other;
|
||||||
|
int any_changed = 0, any_visible = 0;
|
||||||
|
|
||||||
|
bm = BLI_pbvh_get_bmesh(pbvh);
|
||||||
|
unique = BLI_pbvh_bmesh_node_unique_verts(node);
|
||||||
|
other = BLI_pbvh_bmesh_node_other_verts(node);
|
||||||
|
|
||||||
|
sculpt_undo_push_node(ob, node, SCULPT_UNDO_HIDDEN);
|
||||||
|
|
||||||
|
partialvis_update_bmesh_verts(bm,
|
||||||
|
unique,
|
||||||
|
action,
|
||||||
|
area,
|
||||||
|
planes,
|
||||||
|
&any_changed,
|
||||||
|
&any_visible);
|
||||||
|
|
||||||
|
partialvis_update_bmesh_verts(bm,
|
||||||
|
other,
|
||||||
|
action,
|
||||||
|
area,
|
||||||
|
planes,
|
||||||
|
&any_changed,
|
||||||
|
&any_visible);
|
||||||
|
|
||||||
|
if (any_changed) {
|
||||||
|
BLI_pbvh_node_mark_rebuild_draw(node);
|
||||||
|
BLI_pbvh_node_fully_hidden_set(node, !any_visible);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void rect_from_props(rcti *rect, PointerRNA *ptr)
|
static void rect_from_props(rcti *rect, PointerRNA *ptr)
|
||||||
{
|
{
|
||||||
rect->xmin = RNA_int_get(ptr, "xmin");
|
rect->xmin = RNA_int_get(ptr, "xmin");
|
||||||
@ -330,6 +399,9 @@ static int hide_show_exec(bContext *C, wmOperator *op)
|
|||||||
case PBVH_GRIDS:
|
case PBVH_GRIDS:
|
||||||
partialvis_update_grids(ob, pbvh, nodes[i], action, area, clip_planes);
|
partialvis_update_grids(ob, pbvh, nodes[i], action, area, clip_planes);
|
||||||
break;
|
break;
|
||||||
|
case PBVH_BMESH:
|
||||||
|
partialvis_update_bmesh(ob, pbvh, nodes[i], action, area, clip_planes);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user