Ejemplo n.º 1
0
        public void ReplaceVertex(ProgMeshVertex vOld, ProgMeshVertex vNew)
        {
            Debug.Assert(vOld != null && vNew != null, "[ProgMeshTriangle.ReplaceVertex] Arguments must not be null.");
            Debug.Assert(vOld == _vertex[0] || vOld == _vertex[1] || vOld == _vertex[2], "[ProgMeshTriangle.replaceVertex] vOld must not be included in this.vertex.");
            Debug.Assert(vNew != _vertex[0] && vNew != _vertex[1] && vNew != _vertex[2], "[ProgMeshTriangle.replaceVertex] vNew must not be included in this.vertex.");

            if (vOld == _vertex[0])
            {
                _vertex[0] = vNew;
            }
            else if (vOld == _vertex[1])
            {
                _vertex[1] = vNew;
            }
            else
            {
                Debug.Assert(vOld == _vertex[2], "[ProgMeshTriangle.ReplaceVertex] vOld == vertex[2]");
                _vertex[2] = vNew;
            }

            ProgMeshUtil.RemoveFillWithBack(vOld.Face, this);
            Debug.Assert(!vNew.Face.Contains(this), "[ProgMeshTriangle.ReplaceVertex] !Contains(vNew->face, this)");

            vNew.Face.Add(this);

            for (var i = 0; i < 3; i++)
            {
                vOld.RemoveIfNonNeighbor(_vertex[i]);
                _vertex[i].RemoveIfNonNeighbor(vOld);
            }

            for (var i = 0; i < 3; i++)
            {
                Debug.Assert(_vertex[i].Face.Count(f => f == this) == 1, "[ProgMeshTriangle.replaceVertex] Contains(vertex[i]->face, this) == 1");
                for (var j = 0; j < 3; j++)
                {
                    if (i != j)
                    {
                        ProgMeshUtil.AddUnique(_vertex[i].Neighbor, _vertex[j]);
                    }
                }
            }
            ComputeNormal();
        }
Ejemplo n.º 2
0
        public ProgMeshTriangle(ProgMeshVertex v0, ProgMeshVertex v1, ProgMeshVertex v2)
        {
            Debug.Assert(v0 != null && v1 != null && v2 != null, "[ProgMeshTriangle] Vertices must not be null.");
            Debug.Assert(v0 != v1 && v1 != v2 && v2 != v0, "[ProgMeshTriangle] Vertices must be different.");

            _vertex = new[] { v0, v1, v2 };
            ComputeNormal();

            for (var i = 0; i < 3; i++)
            {
                _vertex[i].Face.Add(this);
                for (var j = 0; j < 3; j++)
                {
                    if (i != j)
                    {
                        ProgMeshUtil.AddUnique(_vertex[i].Neighbor, _vertex[j]);
                    }
                }
            }
        }