Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
 void DestroyedTriangle(int tri)
 {
     DestroyedTriangles.TryAdd(tri);
 }