public void AddNeighbor(TriangleFace face) { if (Faces.Count < 4) { Faces.Add(face); } }
public override bool Equals(object obj) { TriangleFace edge = obj as TriangleFace; return(edge != null && EqualityComparer <Vertex> .Default.Equals(P1, edge.P1) && EqualityComparer <Vertex> .Default.Equals(P2, edge.P2) && EqualityComparer <Vertex> .Default.Equals(P3, edge.P3) && EqualityComparer <Tetra> .Default.Equals(RightTetra, edge.RightTetra) && EqualityComparer <Tetra> .Default.Equals(LeftTetra, edge.LeftTetra)); }
public Tetra(TriangleFace face1, TriangleFace face2, TriangleFace face3, TriangleFace face4) { P1 = face1.P1; P2 = face1.P2; P3 = face1.P3; FindLastVertexOfTetra(face2); if (!IsTetraDirect) { MakeTetraDirect(); } ComputeCircumcircleInfos(); Faces.Add(face1); Faces.Add(face2); Faces.Add(face3); Faces.Add(face4); }
private void FindLastVertexOfTetra(TriangleFace face2) { Vertex[] vertices = new Vertex[3] { P1, P2, P3 }; if (!vertices.Contains(face2.P1)) { P4 = face2.P1; } if (!vertices.Contains(face2.P2)) { P4 = face2.P2; } if (!vertices.Contains(face2.P3)) { P4 = face2.P3; } }
private HashSet <TriangleFace> GetPolygonalHoleFromBadTetras(HashSet <Tetra> badTetras) { HashSet <TriangleFace> polyHole = new HashSet <TriangleFace>(); foreach (Tetra badTetra in badTetras) { foreach (TriangleFace face in badTetra.Faces) { Tetra otherTetraOfFace = face.GetOtherTetraThan(badTetra); if (!badTetras.Contains(otherTetraOfFace)) { TriangleFace newFace = new TriangleFace(face.P1, face.P2, face.P3, otherTetraOfFace); polyHole.Add(newFace); } } } return(polyHole); }
public Tetra(TriangleFace baseFace, Vertex vertex) { P1 = baseFace.P1; P2 = baseFace.P2; P3 = baseFace.P3; P4 = vertex; if (!IsTetraDirect) { MakeTetraDirect(); } ComputeCircumcircleInfos(); if (!baseFace.HasOneNeighborTetraNull()) { throw new Exception("Trying to construct a tetrahedron with a base that already has 2 neighboring tetrahedrons registered."); } else { baseFace.RegisterNeighbor(this); } Faces.Add(baseFace); }
private HashSet <Tetra> GetNewTetrasFromPolygonalHole(Vertex vertex, HashSet <TriangleFace> polyHole) { HashSet <Tetra> tetrasToAdd = new HashSet <Tetra>(); foreach (TriangleFace face in polyHole) { Tetra newTetra = new Tetra(face, vertex); tetrasToAdd.Add(newTetra); } foreach (Tetra tetra in tetrasToAdd) { foreach (Tetra otherTetra in tetrasToAdd) { if (tetra.IsNeighborOf(otherTetra)) { TriangleFace face = new TriangleFace(tetra, otherTetra); tetra.AddNeighbor(face); } } } return(tetrasToAdd); }