private List <TriangleCell> ReadEleFromFile(string path, List <Node> nodes)
        {
            if (!File.Exists(path))
            {
                throw new FileNotFoundException("Error_ele_path");
            }
            var result = new List <TriangleCell>();
            Func <Point, Point> abs = (Point p) => new Point(Math.Abs(p.X), Math.Abs(p.Y));

            using (var fs = new StreamReader(File.Open(path, FileMode.Open))) {
                result = fs.ReadToEnd()
                         .Split('\n')
                         .Skip(1)
                         .Where(x => !(string.IsNullOrWhiteSpace(x) || x[0] == '#'))
                         .Select(x => {
                    var nums = x
                               .Split(' ')
                               .Where(y => !string.IsNullOrWhiteSpace(y))
                               .Select(s => int.Parse(s))
                               .ToArray();
                    var cell = new TriangleCell {
                        Id     = nums[0],
                        NCount = 3,
                        ECount = 3,
                        Node   = new List <Node> {
                            nodes[nums[1] - 1],
                            nodes[nums[2] - 1],
                            nodes[nums[3] - 1]
                        },
                        Type = nums[4]
                    };
                    AddToDict(cell.Node[0], cell);
                    AddToDict(cell.Node[1], cell);
                    AddToDict(cell.Node[2], cell);
                    cell.C = (cell.Node[0] + cell.Node[1] + cell.Node[2]) / 3;
                    cell.H = new Vector {
                        X = new[] {
                            Math.Abs(cell.Node[0].X - cell.Node[1].X),
                            Math.Abs(cell.Node[1].X - cell.Node[2].X),
                            Math.Abs(cell.Node[0].X - cell.Node[2].X)
                        }.Max(),
                        Y = new[] {
                            Math.Abs(cell.Node[0].Y - cell.Node[1].Y),
                            Math.Abs(cell.Node[1].Y - cell.Node[2].Y),
                            Math.Abs(cell.Node[0].Y - cell.Node[2].Y)
                        }.Max()
                    };
                    return(cell);
                })
                         .ToList();
            }
            return(result);
        }
 private void AddToDict(Node node, TriangleCell cell)
 {
     if (DictCells.ContainsKey(node))
     {
         DictCells[node].Add(cell);
     }
     else
     {
         DictCells.Add(node, new List <TriangleCell> {
             cell
         });
     }
 }