protected override MergeArgs GetMin() { List <HeapNode <TriMesh.Vertex> > unMergable = new List <HeapNode <TriMesh.Vertex> >(); HeapNode <TriMesh.Vertex> node = heap.Pull(); while (node != null) { foreach (var hf in node.Item.HalfEdges) { if (TriMeshModify.IsMergeable(hf.Edge)) { foreach (var item in unMergable) { heap.Add(item); } Vector3D pos = hf.ToVertex.Traits.Position; return(new MergeArgs() { Target = hf.Edge, Pos = pos }); } } unMergable.Add(node); node = heap.Pull(); } return(null); }
protected override MergeArgs GetMin() { List <HeapNode <TriMesh.Edge> > unMergable = new List <HeapNode <TriMesh.Edge> >(); HeapNode <TriMesh.Edge> node = heap.Pull(); while (node != null && !TriMeshModify.IsMergeable(node.Item)) { unMergable.Add(node); node = heap.Pull(); } foreach (var item in unMergable) { heap.Add(item); } if (node == null) { return(null); } else { Vector3D pos = this.GetPos(node.Item); return(new MergeArgs { Target = node.Item, Pos = pos }); } }
protected override void Init() { this.heap = new MinHeapTwo <TriMesh.Vertex>(this.Mesh.Vertices.Count); this.handle = new HeapNode <TriMesh.Vertex> [this.Mesh.Vertices.Count]; foreach (TriMesh.Vertex v in this.Mesh.Vertices) { double curvature = this.GetValue(v); this.handle[v.Index] = heap.Add(Math.Abs(curvature), v); } }
protected override void Init() { this.heap = new MinHeapTwo <TriMesh.Face>(this.Mesh.Faces.Count); this.handle = new HeapNode <TriMesh.Face> [this.Mesh.Faces.Count]; this.traits = new TriMeshTraits(this.Mesh); this.traits.Init(); foreach (TriMesh.Face face in this.Mesh.Faces) { double value = this.GetValue(face); this.handle[face.Index] = heap.Add(value, face); } }