//private List<TtPoint> origPoints; //private DataAccessLayer _db; //Dictionary<string, TtMetaData> metas; public SegmentFactory(DataAccessLayer dal) { Dictionary<string, TtMetaData> meta = dal.GetMetaData().ToDictionary(m => m.CN, m => m); polys = dal.GetPolygons().ToDictionary(p => p.CN, p => p); List<TtPoint> tmpWayPoints = new List<TtPoint>(); Dictionary<string, TtPoint> tmpPoints = new Dictionary<string, TtPoint>(); foreach (TtPoint p in dal.GetPoints()) { if (p.op == OpType.WayPoint) { p.CalculatePoint(); p.AdjustPoint(); tmpWayPoints.Add(p); } else { tmpPoints.Add(p.CN, p); if (p.IsTravType()) { ((SideShotPoint)p).Declination = meta[p.MetaDefCN].magDec; } } } if (tmpWayPoints.Count > 0) { dal.SavePoints(tmpWayPoints, tmpWayPoints); } QuondamPoint qp; foreach (TtPoint p in tmpPoints.Values) { if (p.op == OpType.Quondam) { qp = p as QuondamPoint; qp.ParentPoint = tmpPoints[qp.ParentCN]; } } points = tmpPoints.Values.ToList(); }
public bool WritePoints(DataAccessLayer DAL) { List<TtPoint> points = DAL.GetPoints(); if (points != null && points.Count > 0) { List<string> Columns = new List<string>(); List<List<string>> data = new List<List<string>>(); Dictionary<string, TtMetaData> meta = DAL.GetMetaData().ToDictionary(m => m.CN, m => m); #region Columns Columns.Add("Point ID"); //0 Columns.Add("CN"); Columns.Add("Operation"); Columns.Add("Index"); Columns.Add("Poly Name"); Columns.Add("DateTime"); Columns.Add("Metadata"); Columns.Add("OnBnd"); Columns.Add("AdjX"); Columns.Add("AdjY"); Columns.Add("AdjZ"); Columns.Add("UnAdjX"); Columns.Add("UnAdjY"); Columns.Add("UnAdjZ"); Columns.Add("X"); Columns.Add("Y"); Columns.Add("Z"); Columns.Add("RMSEr"); Columns.Add("Man Acc"); Columns.Add("Fwd Az"); Columns.Add("Back Az"); Columns.Add("Slope Dist"); Columns.Add("Horiz Dist"); Columns.Add("Slope Dist Type"); Columns.Add("Slope Angle"); Columns.Add("Slope Angle Type"); Columns.Add("Parent Name"); Columns.Add("Parent CN"); Columns.Add("Comment"); Columns.Add("Poly CN"); Columns.Add("Group Name"); Columns.Add("Group CN"); Columns.Add("Linked CNs"); #endregion TtMetaData tmpMeta; #region Add Data try { foreach (TtPoint p in points) { List<string> pl = new List<string>(); tmpMeta = meta[p.MetaDefCN]; pl.Add(p.PID.ToString()); //0 pl.Add(p.CN); pl.Add(p.op.ToString()); pl.Add(p.Index.ToString()); pl.Add(p.PolyName.Scrub()); pl.Add(p.Time.ToString("MM/dd/yyyy hh:mm:ss tt")); try { pl.Add(tmpMeta.Name); } catch { pl.Add(p.MetaDefCN); } pl.Add(p.OnBnd.ToString()); pl.Add(p.AdjX.ToString()); pl.Add(p.AdjY.ToString()); pl.Add(p.AdjZ.ToString()); pl.Add(p.UnAdjX.ToString()); pl.Add(p.UnAdjY.ToString()); pl.Add(p.UnAdjZ.ToString()); if (p.IsGpsType()) { pl.Add(p.UnAdjX.ToString()); pl.Add(p.UnAdjY.ToString()); pl.Add(p.UnAdjZ.ToString()); pl.Add(((GpsPoint)p).RMSEr.ToString()); pl.Add(((GpsPoint)p).ManualAccuracy.ToString()); } else { for (int i = 0; i < 5; i++) { pl.Add(""); } } if (p.IsTravType()) { SideShotPoint sp = (SideShotPoint)p; pl.Add(sp.ForwardAz.ToString()); pl.Add(sp.BackwardAz.ToString()); pl.Add(TtUtils.ConvertDistance(sp.SlopeDistance, tmpMeta.uomDistance, UomDistance.Meters).ToString()); pl.Add(TtUtils.ConvertDistance(sp.HorizontalDistance, tmpMeta.uomDistance, UomDistance.Meters).ToString()); pl.Add(tmpMeta.uomDistance.ToString()); pl.Add(TtUtils.ConvertAngle(sp.SlopeAngle, tmpMeta.uomSlope, UomSlope.Degrees).ToString()); pl.Add(tmpMeta.uomSlope.ToString()); } else { for (int i = 0; i < 7; i++) { pl.Add(""); } } if (p.op == OpType.Quondam) { pl.Add(((QuondamPoint)p).ParentPID.ToString()); pl.Add(((QuondamPoint)p).ParentCN); } else { pl.Add(""); pl.Add(""); } pl.Add(p.Comment.Scrub()); pl.Add(p.PolyCN); pl.Add(p.GroupName.Scrub()); pl.Add(p.GroupCN); StringBuilder sb = new StringBuilder(); foreach (string link in p.LinkedPoints) { sb.Append(link + "_"); } pl.Add(sb.ToString()); data.Add(pl); } #endregion if (!WriteCsvFile("Points", Columns, data)) return false; data.Clear(); Columns.Clear(); #region Columns Columns.Add("Group Name"); //0 Columns.Add("CN"); Columns.Add("Description"); Columns.Add("Manual Accuracy"); Columns.Add("Group Type"); //Columns.Add("Number Of Points"); //5 /* Columns.Add("Num Of GpsType Points"); Columns.Add("Num Of Gps Points"); Columns.Add("Num Of Traverse Points"); Columns.Add("Num Of Take5 Points"); Columns.Add("Num Of Walk Points"); //10 Columns.Add("Num Of SideShot Points"); Columns.Add("Num Of Qnd Points"); Columns.Add("Num Of Way Points"); Columns.Add("Num Of Points OnBnd"); Columns.Add("Num Of Points OffBnd");//15 */ #endregion foreach (TtGroup g in DAL.GetGroups()) { List<string> gl = new List<string>(); gl.Add(g.Name.Scrub()); //0 gl.Add(g.CN); gl.Add(g.Description.Scrub()); gl.Add(g.ManualAccuracy.ToString()); gl.Add(g.GroupType.ToString()); //gl.Add(g.NumberOfPoints.ToString()); //5 /* gl.Add(g.NumOfGpsTypePoints.ToString()); gl.Add(g.NumOfGpsPoints.ToString()); gl.Add(g.NumOfTraversePoints.ToString()); gl.Add(g.NumOfTake5Points.ToString()); gl.Add(g.NumOfWalkPoints.ToString()); //10 gl.Add(g.NumOfSideShotPoints.ToString()); gl.Add(g.NumOfQndPoints.ToString()); gl.Add(g.NumOfWayPoints.ToString()); gl.Add(g.NumOfPointsOnBnd.ToString()); gl.Add(g.NumOfPointsOffBnd.ToString());//15 */ data.Add(gl); } return WriteCsvFile("Groups", Columns, data); } catch (Exception ex) { TtUtils.WriteError(ex.Message, "DataOutput:WritePoints", ex.StackTrace); throw ex; } } return false; }