Beispiel #1
0
 /// <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);
         }
     }
 }