protected void Compute_Dense() { while (DenseQueue.Count > 0) { float idx_priority = DenseQueue.FirstPriority; int idx = DenseQueue.Dequeue(); GraphNodeStruct g = DenseNodes[idx]; g.frozen = true; g.distance = max_value; DenseNodes[idx] = g; max_value = Math.Max(idx_priority, max_value); update_neighbours_dense(g.id); } }
public virtual void DoReduce() { if (mesh.TriangleCount == 0) // badness if we don't catch this... { return; } begin_pass(); begin_setup(); Precompute(); InitializeVertexQuadrics(); InitializeQueue(); end_setup(); begin_ops(); begin_collapse(); while (EdgeQueue.Count > 0 && mesh.TriangleCount > TargetTriangleCount) { COUNT_ITERATIONS++; int eid = EdgeQueue.Dequeue(); if (!mesh.IsEdge(eid)) { continue; } int vKept; ProcessResult result = CollapseEdge(eid, EdgeQuadrics[eid].collapse_pt, out vKept); if (result == ProcessResult.Ok_Collapsed) { vertQuadrics[vKept] = EdgeQuadrics[eid].q; UpdateNeighbours(vKept); } } end_collapse(); end_ops(); Reproject(); end_pass(); }