void LocalRefinement(DynamicBuffer <DestroyedTriangleElement> destroyed) { var verts = V.GetEnumerator(); while (verts.MoveNext()) { _refinementQueue.PushBack(verts.Current); } InfiniteLoopDetection.Reset(); while (_refinementQueue.Count > 0) { InfiniteLoopDetection.Register(1000, "LocalRefinement"); var v = (Vertex *)_refinementQueue.PopFront(); var e = v->GetEdgeEnumerator(); while (e.MoveNext()) { if (TriDisturbed(e.Current, out var vRef) || TravsDisturbed(e.Current, out vRef)) { // todo are we adding duplicates here? _refinementQueue.PushBack((IntPtr)v); _refinementQueue.PushBack((IntPtr)vRef); break; } } } var tris = DestroyedTriangles.GetEnumerator(); while (tris.MoveNext()) { destroyed.Add(tris.Current); } destroyed.Reinterpret <int>().AsNativeArray().Sort(); }
void DestroyedTriangle(int tri) { DestroyedTriangles.TryAdd(tri); }