private KmlProperties GetPropertiesFromControls() { var controlProperties = new KmlProperties { MapType = (includeMap.Checked ? KmlExportMapType.Map : KmlExportMapType.None) }; if (includeRoute.Checked && routeLineStyle.SelectedIndex == 0) controlProperties.MapType = KmlExportMapType.MapAndRoute; if (!includeRoute.Checked) { controlProperties.RouteType = KmlExportRouteType.None; } else { switch (routeLineStyle.SelectedIndex) { case 1: controlProperties.RouteType = KmlExportRouteType.Monochrome; break; case 2: controlProperties.RouteType = KmlExportRouteType.ColorCoded; break; default: controlProperties.RouteType = KmlExportRouteType.None; break; } } controlProperties.RouteAdaptionStyle = includeMap.Checked && adaptRouteToMapImage.Checked ? KmlRouteAdaptationStyle.AdaptToSessionMapImage : KmlRouteAdaptationStyle.NoAdaption; if (!includeReplay.Checked) { controlProperties.ReplayType = KmlExportReplayType.None; } else { switch (replayMarkerStyle.SelectedIndex) { case 0: controlProperties.ReplayType = KmlExportReplayType.Monochrome; break; case 1: controlProperties.ReplayType = KmlExportReplayType.ColorCoded; break; default: controlProperties.ReplayType = KmlExportReplayType.None; break; } double timeInterval = 1; double.TryParse(replayTimeInterval.Text, out timeInterval); timeInterval = Math.Max(0.1, Math.Min(3600, timeInterval)); controlProperties.ReplayTimeInterval = new TimeSpan((long)(timeInterval * TimeSpan.TicksPerSecond)); var tails = new List<KmlReplayTail>(); if (replayTailVisible.Checked) { var tail = new KmlReplayTail() { StartVisible = new TimeSpan(0) }; double tailDurationSeconds = 0; if (double.TryParse(replayTailDuration.Text, out tailDurationSeconds)) { tailDurationSeconds = Math.Max(0.1, Math.Min(3600, tailDurationSeconds)); tail.EndVisible = new TimeSpan((long)(tailDurationSeconds * TimeSpan.TicksPerSecond)); } else { tail.EndVisible = null; // infinite } tails.Add(tail); } controlProperties.ReplayTails = tails; } return controlProperties; }
public object Clone() { var clone = new KmlReplayTail() { StartVisible = StartVisible, EndVisible = EndVisible }; if (RouteLineStyle != null) clone.RouteLineStyle = RouteLineStyle.Clone() as KmlLineStyle; return clone; }
private KmlMultipleFileExporterProperties GetPropertiesFromControls() { var p = new KmlMultipleFileExporterProperties(); // include routes p.IncludeRoutes = includeRoutes.Checked; // include replay p.IncludeReplay = includeReplay.Checked; // mass start p.MassStart = massStart.Checked; // tails var tails = new List<KmlReplayTail>(); if (replayTailsVisible.Checked) { var tail = new KmlReplayTail() { StartVisible = new TimeSpan(0) }; double tailDurationSeconds = 0; if (double.TryParse(replayTailDuration.Text, out tailDurationSeconds)) { tailDurationSeconds = Math.Max(0.1, Math.Min(3600, tailDurationSeconds)); tail.EndVisible = new TimeSpan((long)(tailDurationSeconds * TimeSpan.TicksPerSecond)); } else { tail.EndVisible = null; } tails.Add(tail); } p.ReplayTails = tails; // replay time interval double timeInterval; if (double.TryParse(replayTimeInterval.Text, out timeInterval)) { timeInterval = Math.Max(0.1, Math.Min(3600, timeInterval)); p.ReplayTimeInterval = new TimeSpan((long)(timeInterval * TimeSpan.TicksPerSecond)); } else { p.ReplayTimeInterval = originalMultipleFileProperties.ReplayTimeInterval; } // restart after each lap p.ReplayRestartAfterEachLap = replayRestartAfterEachLap.Checked; // opacity var opacity = (originalMultipleFileProperties.Colors.Count > 0 ? (double)originalMultipleFileProperties.Colors[0].A / 255 : 1.0); for (var i = 0; i < originalMultipleFileProperties.Colors.Count; i++) { p.Colors[i] = Color.FromArgb((int)(255 * opacity), p.Colors[i]); } // route line width p.RouteLineWidth = originalMultipleFileProperties.RouteLineWidth; return p; }
private void CreateReplayTails(Session session, KmlExportDocument parentDocument, KmlReplayTail templateTail, XmlWriter writer, IFormatProvider formatProvider) { LogUtil.LogDebug("start"); var sessionSettings = parentDocument.ImageExporter.Properties.SessionSettings ?? session.Settings; KmlLineStyle routeLineStyle = null; if (KmlProperties.ReplayType == KmlExportReplayType.Monochrome) { routeLineStyle = templateTail.RouteLineStyle ?? GetRouteLineStyleForSession(session); } var route = GetRouteForSession(session, parentDocument); foreach (var segment in route.Segments) { var waypoints = route.GetEquallySpacedWaypoints(segment.FirstWaypoint.Time, segment.LastWaypoint.Time, KmlProperties.ReplayTimeInterval); for (var i = 1; i < waypoints.Count; i++) { var lastWaypoint = waypoints[i - 1]; var waypoint = waypoints[i]; // create tail DateTime? lineAppearTime = null; DateTime? lineDisappearTime = null; if (templateTail.StartVisible.HasValue) { lineAppearTime = waypoint.Time.Add(templateTail.StartVisible.Value); if (lineAppearTime < segment.FirstWaypoint.Time.Add(templateTail.StartVisible.Value)) lineAppearTime = segment.FirstWaypoint.Time; if (lineAppearTime > segment.LastWaypoint.Time.Add(templateTail.StartVisible.Value)) lineAppearTime = segment.LastWaypoint.Time; } if (templateTail.EndVisible.HasValue) { // subtract a millisecond from the time to ensure tail disappears correctly lineDisappearTime = waypoint.Time.Add(templateTail.EndVisible.Value).Subtract(new TimeSpan(TimeSpan.TicksPerMillisecond)); if (lineDisappearTime < segment.FirstWaypoint.Time.Add(templateTail.EndVisible.Value)) lineDisappearTime = segment.FirstWaypoint.Time; if (lineDisappearTime > segment.LastWaypoint.Time.Add(templateTail.EndVisible.Value)) lineDisappearTime = segment.LastWaypoint.Time; } if (KmlProperties.ReplayType == KmlExportReplayType.ColorCoded) { routeLineStyle = GetLineStyleFromWaypoint(waypoint, parentDocument.ImageExporter, sessionSettings); } CreateLineStringPlacemark(new[] { lastWaypoint, waypoint }, routeLineStyle, lineAppearTime, lineDisappearTime, writer, formatProvider); } } LogUtil.LogDebug("end"); }