public void Dispose(ProgMesh pm) { Debug.Assert(Face.Count == 0, "[ProgMeshVertex.destroy] face.size() == 0"); while (Neighbor.Count > 0) { ProgMeshUtil.RemoveFillWithBack(Neighbor[0].Neighbor, this); ProgMeshUtil.RemoveFillWithBack(Neighbor, Neighbor[0]); } ProgMeshUtil.RemoveFillWithBack(pm.Vertices, this); }
public void RemoveIfNonNeighbor(ProgMeshVertex n) { // removes n from neighbor Array if n isn't a neighbor. if (!Neighbor.Contains(n)) { return; } foreach (var face in Face) { if (face.HasVertex(n)) { return; } } ProgMeshUtil.RemoveFillWithBack(Neighbor, n); }
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(); }
public void Dispose(ProgMesh pm) { ProgMeshUtil.RemoveFillWithBack(pm.Triangles, this); for (var i = 0; i < 3; i++) { if (_vertex[i] != null) { ProgMeshUtil.RemoveFillWithBack(_vertex[i].Face, this); } } for (var i = 0; i < 3; i++) { var i2 = (i + 1) % 3; if (_vertex[i] != null && _vertex[i2] != null) { _vertex[i].RemoveIfNonNeighbor(_vertex[i2]); _vertex[i2].RemoveIfNonNeighbor(_vertex[i]); } } }