private static void CalculateAreaAndPerimeter(DataAccessLayer DAL) { List<TtPolygon> polys = DAL.GetPolygons(); if (polys != null && polys.Count > 0) { foreach (TtPolygon poly in polys) { try { TtPolygon newPoly = new TtPolygon(poly); List<TtPoint> points = DAL.GetBoundaryPoints(poly.CN).FilterOut(OpType.WayPoint).ToList(); if (points.Count > 2) { double perim = 0, area = 0; points.Add(points[0]); TtPoint p1, p2; for (int i = 0; i < points.Count - 1; i++) { p1 = points[i]; p2 = points[i + 1]; perim += TtUtils.Distance(p1, p2); area += ((p2.AdjX - p1.AdjX) * (p2.AdjY + p1.AdjY) / 2); } newPoly.Perimeter = perim; newPoly.Area = Math.Abs(area); } else { newPoly.Perimeter = 0; newPoly.Area = 0; } DAL.SavePolygon(poly, newPoly); } catch (Exception ex) { TtUtils.WriteError(ex.Message, "SegmentFactory:CalculateAreaAndPerimeter", ex.StackTrace); } } } }