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);
        }
Пример #5
0
 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.
 }