public void AddFaces(AKT_MeshFace face) { this._faces.Add(face); }
public List <AKT_Polyline> NakedEdges() { //IEnumerable<AKT_Polyline> polys = TopologyEdges.Edges.Distinct() // .Select(a => new AKT_Polyline(m_vertices[a.S], m_vertices[a.E])); //IEnumerable<AKT_Polyline> polys = TopologyEdges.Edges.GroupBy(a => a, new AKT_MeshEdgePairs.EdgeComparer()) // .Where(b => b.Count() == 1) // .Select(a => new AKT_Polyline(m_vertices[a.First().S], m_vertices[a.First().E])); List <AKT_MeshEdgePairs> edges = new List <AKT_MeshEdgePairs>(); foreach (AKT_MeshFace f in Faces.Faces) { edges.Add(new AKT_MeshEdgePairs(f.A, f.B)); edges.Add(new AKT_MeshEdgePairs(f.B, f.C)); if (f.MeshType == MeshTypology.Triangular) { edges.Add(new AKT_MeshEdgePairs(f.C, f.A)); } else { edges.Add(new AKT_MeshEdgePairs(f.C, f.D)); edges.Add(new AKT_MeshEdgePairs(f.D, f.A)); } } var polys1 = edges.GroupBy(a => a, new AKT_MeshEdgePairs.EdgeComparer()); var polys2 = polys1.Where(b => b.Count() == 1); var polys3 = polys2.Select(a => new AKT_Polyline(m_vertices[a.First().S], m_vertices[a.First().E])); //var polys1Arr = polys1.ToArray(); //var polys2Arr = polys2.ToArray(); //var polys3Arr = polys3.ToArray(); return(AKT_Polyline.JoinPolylines(polys3)); return(polys3.ToList()); AKT_Polyline[] polpo = polys3.ToArray(); //List<List<AKT_MeshEdgePairs>> lll = new List<List<AKT_MeshEdgePairs>>(); //foreach (var x in TopologyEdges.Edges) //{ // List<AKT_MeshEdgePairs> ll = new List<AKT_MeshEdgePairs>(); // foreach (var y in TopologyEdges.Edges) // { // bool e = x.E == y.E || x.E == y.S; // bool s = x.S == y.E || x.S == y.S; // bool a = e && s; // if (a) // { // ll.Add(y); // } // } // lll.Add(ll); //} return(AKT_Polyline.JoinPolylines(polys3)); AKT_Mesh mesh = this; List <AKT_Interval> intervals = new List <AKT_Interval>(); bool[] nakedEdgePointStatus = mesh.GetNakedEdgePointStatus(); int i = 0; while (true) { if (i >= mesh.m_faces.Count) { break; } AKT_MeshFace face = mesh.m_faces[i]; int a = face.A; int b = face.B; if ((!nakedEdgePointStatus[a] ? false : nakedEdgePointStatus[b])) { if (intervals.IndexOf(new AKT_Interval((double)b, (double)a)) != -1) { intervals.Remove(new AKT_Interval((double)b, (double)a)); } else if (intervals.IndexOf(new AKT_Interval((double)a, (double)b)) == -1) { intervals.Add(new AKT_Interval((double)a, (double)b)); } else { intervals.Remove(new AKT_Interval((double)a, (double)b)); } } a = face.B; b = face.C; if ((!nakedEdgePointStatus[a] ? false : nakedEdgePointStatus[b])) { if (intervals.IndexOf(new AKT_Interval((double)b, (double)a)) != -1) { intervals.Remove(new AKT_Interval((double)b, (double)a)); } else if (intervals.IndexOf(new AKT_Interval((double)a, (double)b)) == -1) { intervals.Add(new AKT_Interval((double)a, (double)b)); } else { intervals.Remove(new AKT_Interval((double)a, (double)b)); } } if (face.MeshType != MeshTypology.Triangular) { a = face.C; b = face.D; if ((!nakedEdgePointStatus[a] ? false : nakedEdgePointStatus[b])) { if (intervals.IndexOf(new AKT_Interval((double)b, (double)a)) != -1) { intervals.Remove(new AKT_Interval((double)b, (double)a)); } else if (intervals.IndexOf(new AKT_Interval((double)a, (double)b)) == -1) { intervals.Add(new AKT_Interval((double)a, (double)b)); } else { intervals.Remove(new AKT_Interval((double)a, (double)b)); } } a = face.D; b = face.A; if ((!nakedEdgePointStatus[a] ? false : nakedEdgePointStatus[b])) { if (intervals.IndexOf(new AKT_Interval((double)b, (double)a)) != -1) { intervals.Remove(new AKT_Interval((double)b, (double)a)); } else if (intervals.IndexOf(new AKT_Interval((double)a, (double)b)) == -1) { intervals.Add(new AKT_Interval((double)a, (double)b)); } else { intervals.Remove(new AKT_Interval((double)a, (double)b)); } } } else { a = face.C; b = face.A; if ((!nakedEdgePointStatus[a] ? false : nakedEdgePointStatus[b])) { if (intervals.IndexOf(new AKT_Interval((double)b, (double)a)) != -1) { intervals.Remove(new AKT_Interval((double)b, (double)a)); } else if (intervals.IndexOf(new AKT_Interval((double)a, (double)b)) == -1) { intervals.Add(new AKT_Interval((double)a, (double)b)); } else { intervals.Remove(new AKT_Interval((double)a, (double)b)); } } } i++; } if (intervals.Count > 0) { List <int> nums = new List <int>(intervals.Count); List <int> nums1 = new List <int>(intervals.Count); for (i = 0; i < intervals.Count; i++) { AKT_Interval item = intervals[i]; nums.Add((int)item.T0); item = intervals[i]; nums1.Add((int)item.T1); } } return(null); //throw new NotImplementedException(); }