Example #1
0
 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);
     }
 }
Example #2
0
        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();
        }