Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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
                });
            }
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
            }
        }