public static List <Isoline> GetIsoLines(List <FE> listFE, double Areq) { var ListofLines = new List <Isoline>(); var ListOfIsolines = new List <Isoline>(); listFE.ForEach(x => { for (int i = 0; i < x.nodesForMapping.Count; i++) { var j = (i == x.nodesForMapping.Count - 1) ? 0 : i + 1; if (!(x.nodes.Any(c => c == x.nodesForMapping[i]) || x.nodes.Any(c => c == x.nodesForMapping[j]))) { var I = new Isoline(); I.Nodes.Add(x.nodesForMapping[i]); I.Nodes.Add(x.nodesForMapping[j]); ListofLines.Add(I); } } }); if (ListofLines.Count == 0) { return(new List <Isoline>()); } return(FilterIsoline(ListofLines));; }
private static List <Isoline> FilterIsoline(List <Isoline> ListofLines) { var listNewIsolines = new List <Isoline>(); var backingList = ListofLines; try { do { var t = true; var line = backingList[0]; backingList.Remove(line); var removed = new List <Isoline>(); do { Isoline line2 = null; for (int i = 0; i < backingList.Count; i++) { if (backingList[i].Nodes.First().Compare(line.Nodes.First()) || backingList[i].Nodes.Last().Compare(line.Nodes.First()) || backingList[i].Nodes.Last().Compare(line.Nodes.Last()) || backingList[i].Nodes.First().Compare(line.Nodes.Last()) ) { if (!CompereListAndIsoline(removed, backingList[i])) { line2 = backingList[i]; break; } } } if (line2 != null) { line = AddTwoIsolines(line, line2); removed.Add(line2); backingList.Remove(line2); } t = line2 != null; } while (t); listNewIsolines.Add(line); } while (backingList.Count != 0); } catch (Exception ex) { throw new Exception($"Error in GeneratorForNodesForIsolines.GetIsoLinesV2: {ex.Message}"); } return(listNewIsolines); }
private static Isoline AddTwoIsolines(Isoline line, Isoline line2) { //Detrment if connect to start or to end if (line.Nodes.First().Compare(line2.Nodes.Last())) { for (int i = 1; i < line2.Nodes.Count; i++) { line.Nodes.Insert(0, line2.Nodes[line2.Nodes.Count - 1 - i]); } } if (line.Nodes.Last().Compare(line2.Nodes.First())) { for (int i = 1; i < line2.Nodes.Count; i++) { line.Nodes.Add(line2.Nodes[i]); } } //Add node to line one by one // return line return(line); }
private static bool CompereListAndIsoline(List <Isoline> isolines, Isoline isoline) { bool t = false; isolines.ForEach(x => { if (x.Nodes.First().Compare(isoline.Nodes.First()) && x.Nodes.Last().Compare(isoline.Nodes.Last())) { t = true; ///Use Compere } if (x.Nodes.Last().Compare(isoline.Nodes.First()) && x.Nodes.First().Compare(isoline.Nodes.Last())) { t = true; ///Use Compere } if (x.Nodes.Last().Compare(isoline.Nodes.Last()) && x.Nodes.First().Compare(isoline.Nodes.First())) { t = true; ///Use Compere } }); return(t); }
public bool Equals(Isoline obj) { return(obj != null && obj.Nodes == this.Nodes && obj.IsClosed == this.IsClosed); // Or whatever you think qualifies as the objects being equal. }