Age | Commit message (Collapse) | Author |
|
No need to track previous edge in vert-separate cleanup
|
|
Use changes from previous commit for BM_vert_find_first_loop.
|
|
- `bmesh_radial_faceloop_find_first` & `bmesh_disk_faceedge_find_first`
can be replaced with a single call to a new function:
`bmesh_disk_faceloop_find_first`
- `bmesh_disk_faceedge_find_first` called `bmesh_radial_facevert_check`
which isn't needed, since either the current or next loop in the
cycle is attached to the edge we're looking for.
|
|
|
|
No need to perform edge-of-vert then loop-of-edge check.
Any vertex that has an edge with a face will be connected to a face.
|
|
Edge-rotate would randomly flip one of the faces to match the other.
Also maintain active-face when rotating the edge.
|
|
|
|
|
|
Just return the face or NULL, like BM_edge_exists(),
Also for BM_face_exists_overlap & bm_face_exists_tri_from_loop_vert.
No functional changes.
Old code did some partial overlap checks where this made some sense,
but it's since been removed.
|
|
|
|
Pass in loops instead of edge & faces.
Nearly all callers have the loop-pairs to pass in.
|
|
Keep ifdef'd out for holes, this isn't needed currently.
|
|
|
|
Reverse loops in-place.
|
|
Replace search with direct lookup.
|
|
Would always set both first1 and first2.
|
|
Correct unhelpful comment & some comment edits.
Rename 'disk_is_flagged' -> 'bm_vert_is_manifold_flagged',
since the check is quite specific.
|
|
|
|
Radial append/remove had swapped args and *slightly* different behavior.
- bmesh_radial_append(edge, loop)
- bmesh_radial_loop_remove(loop, edge)
Match logic for append/remove,
Logic for the one case where the edge needs to be left untouched
has been moved to: `bmesh_radial_loop_unlink`.
|
|
|
|
|
|
Rewrite the current range-tree API used by dyn-topo undo
to avoid inefficiencies from stdc++'s set use.
- every call to `take_any` (called for all verts & faces)
removed and added to the set.
- further range adjustment also took 2x btree edits.
This patch inlines a btree which is modified in-place,
so common resizing operations don't need to perform a remove & insert.
Ranges are stored in a list so `take_any` can access the first item
without a btree lookup.
Since range-tree isn't a bottleneck in sculpting, this only gives minor speedups.
Measured approx ~15% overall faster calculation for sculpting,
although this number time doesn't include GPU updates and depends on how
much edits fragment the range-tree.
|
|
In practice I couldn't make this cause a bug,
however it's a logical regression in fix for T48716.
Thanks to Francesc Juhe for finding.
|
|
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D2304
|
|
Not sure where this comes from, but code was converting BMEdge* to BMVert* to check oflags,
i.e. not accessing correct memory.
Regression, to be backported to 2.78a.
|
|
No need to declare new iterator for second loop.
|
|
Fixes T47488 and T47478.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D2224
|
|
The mesh interpolation function failed to fill a fractions-of-the-way
array properly when the distances are very small but nonzero.
|
|
|
|
Was calling the fast path for finding edge order in cases
where it should not have been called.
|
|
|
|
|
|
Also resolves: T34294
|
|
|
|
- remove edge scaling, instead avoid checking intersections with connected edges.
- replace local line intersection functions with BLI_math
- center the projection for more precise calculation.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This can be used to re-allocate bmesh data with/without tool flags.
Needed for Symmetrize since it uses bmesh operators from dyntopo.
|
|
|
|
Saves 8 bytes per vert/edge/face.
Gives overall ~20-25% memory saving for dyntopo sculpting
and modifiers that use BMesh.
|
|
For simple cases bitmasks were OK, but didnt work for vert/edge, vert/edge tests.
Tag verts instead, makes logic easier to follow and gives minor speedup.
|
|
|
|
|
|
In the case of having 3+ boundary edges, we need to find the best.
|
|
In rare cases intersect would attempt to add edges with the same vertex twice
from edge-vert / edge-edge intersections.
Solve by checking for duplicates when creating vertex-array for these types of intersections
(always under 3x comparisons, so not much overhead).
|