/// <summary> /// Add seed point as id/distance pair /// </summary> public void AddSeed(int id, float seed_dist) { if (SparseNodes != null) { GraphNode g = get_node(id); Debug.Assert(SparseQueue.Contains(g) == false); SparseQueue.Enqueue(g, seed_dist); } else { Debug.Assert(DenseQueue.Contains(id) == false); enqueue_node_dense(id, seed_dist, -1); } Seeds.Add(id); }
// update queue weight for each edge in vertex one-ring protected virtual void UpdateNeighbours(int vid) { foreach (int eid in mesh.VtxEdgesItr(vid)) { Index2i nev = mesh.GetEdgeV(eid); QuadricError Q = new QuadricError(ref vertQuadrics[nev.a], ref vertQuadrics[nev.b]); Vector3d opt = OptimalPoint(eid, ref Q, nev.a, nev.b); double err = Q.Evaluate(ref opt); EdgeQuadrics[eid] = new QEdge(eid, ref Q, ref opt); if (EdgeQueue.Contains(eid)) { EdgeQueue.Update(eid, (float)err); } else { EdgeQueue.Insert(eid, (float)err); } } }