public KmlPropertySelectorDialog(KmlProperties properties)
 {
     InitializeComponent();
       Properties = properties;
 }
        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;
        }
        private void SetPropertiesToControls(KmlProperties value)
        {
            includeMap.Checked = (value.MapType != KmlExportMapType.None);
              includeRoute.Checked = (value.RouteType != KmlExportRouteType.None || value.MapType == KmlExportMapType.MapAndRoute);
              if (value.MapType == KmlExportMapType.MapAndRoute) routeLineStyle.SelectedIndex = 0;
              else
              {
            switch (value.RouteType)
            {
              case KmlExportRouteType.Monochrome:
            routeLineStyle.SelectedIndex = 1;
            break;
              case KmlExportRouteType.ColorCoded:
            routeLineStyle.SelectedIndex = 2;
            break;
              default:
            routeLineStyle.SelectedIndex = 0;
            break;
            }
              }
              adaptRouteToMapImage.Checked = (value.RouteAdaptionStyle != KmlRouteAdaptationStyle.NoAdaption);
              adaptReplayToMapImage.Checked = (value.RouteAdaptionStyle != KmlRouteAdaptationStyle.NoAdaption);

              includeReplay.Checked = (value.ReplayType != KmlExportReplayType.None);
              switch (value.ReplayType)
              {
            case KmlExportReplayType.Monochrome:
              replayMarkerStyle.SelectedIndex = 0;
              break;
            case KmlExportReplayType.ColorCoded:
              replayMarkerStyle.SelectedIndex = 1;
              break;
            default:
              replayMarkerStyle.SelectedIndex = 0;
              break;
              }
              replayTimeInterval.Text = value.ReplayTimeInterval.TotalSeconds.ToString();
              replayTailVisible.Checked = value.HasReplayTails;
              if (value.HasReplayTails)
              {
            replayTailDuration.Text = (value.ReplayTails[0].EndVisible.HasValue
                                     ? value.ReplayTails[0].EndVisible.Value.TotalSeconds.ToString()
                                     : Strings.Infinite);
              }
              else
              {
            replayTailDuration.Text = "";
              }
        }
Пример #4
0
        private void CreateKmz(IEnumerable<string> documentFileNames, Stream stream, KmlProperties kmlProperties)
        {
            var imageExporterProperties = new ImageExporterProperties()
              {
            ColorCodingAttribute = SelectedColorCodingAttribute,
            SecondaryColorCodingAttribute = SelectedSecondaryColorCodingAttribute,
            ColorRangeProperties = GetCurrentColorRangeProperties(),
            SessionSettings = new SessionSettings()
              };

              var kmlExporter = new KmlExporter(
            documentFileNames,
            imageExporterProperties,
            stream)
              {
            KmlProperties = kmlProperties
              };
              kmlExporter.ExportKmz(CommonUtil.GetTempFileName() + @"\");
        }
Пример #5
0
        private void CreateKmz(Document document, Stream stream, KmlProperties kmlProperties, WaypointAttribute colorCodingAttribute, WaypointAttribute? secondaryColorCodingAttribute, ColorRangeProperties colorRangeProperties)
        {
            var imageExporterProperties = new ImageExporterProperties()
              {
            ColorCodingAttribute = colorCodingAttribute,
            SecondaryColorCodingAttribute = secondaryColorCodingAttribute,
            ColorRangeProperties = colorRangeProperties
              };

              var imageExporter = new ImageExporter(document)
              {
            Properties = imageExporterProperties
              };

              var kmlExporter = new KmlExporter(document, imageExporter, stream)
              {
            KmlProperties = kmlProperties
              };
              kmlExporter.ExportKmz(CommonUtil.GetTempFileName() + @"\");
        }
Пример #6
0
 public object Clone()
 {
     var clone = new KmlProperties
             {
               MapType = MapType,
               RouteType = RouteType,
               ReplayType = ReplayType,
               RouteLineStyle = RouteLineStyle.Clone() as KmlLineStyle,
               ReplayMarkerStyle = ReplayMarkerStyle.Clone() as KmlMarkerStyle,
               ReplayTimeInterval = ReplayTimeInterval,
               ReplayTails = new List<KmlReplayTail>(),
               RouteAdaptionStyle = RouteAdaptionStyle
             };
       foreach (var tail in ReplayTails)
       {
     clone.ReplayTails.Add(tail.Clone() as KmlReplayTail);
       }
       return clone;
 }
        public KmlMultipleFilesExporter(IEnumerable<string> fileNames, KmlMultipleFileExporterProperties multipleFileProperties)
        {
            MultipleFileExporterProperties = multipleFileProperties;
              KmlProperties = new KmlProperties()
              {
            MapType = KmlExportMapType.Map,
            RouteType = (multipleFileProperties.IncludeRoutes ? KmlExportRouteType.Monochrome : KmlExportRouteType.None),
            ReplayType = (multipleFileProperties.IncludeReplay ? KmlExportReplayType.Monochrome : KmlExportReplayType.None),
            ReplayTimeInterval = multipleFileProperties.ReplayTimeInterval,
            ReplayTails = multipleFileProperties.ReplayTails,
            RouteLineStyle = new KmlLineStyle() { Width = multipleFileProperties.RouteLineWidth },
            ReplayMarkerStyle = new KmlMarkerStyle() { Size = 3 * multipleFileProperties.RouteLineWidth }
              };

              var massStartTime = DateTime.MaxValue;
              var allMapsHaveTheSameSize = true;
              Sessions = new SessionCollection();
              InvalidFileNames = new List<string>();
              foreach (var fileName in fileNames)
              {
            var d = Document.Open(fileName);
            if (d != null)
            {
              if (Document == null)
              {
            // first file name sets document
            Document = d;
              }
              if (d.Map.Image.Size != Document.Map.Image.Size) allMapsHaveTheSameSize = false;
              var s = d.Sessions[0];
              if (multipleFileProperties.IncludeReplay && s.Route.FirstWaypoint.Time < massStartTime) massStartTime = s.Route.FirstWaypoint.Time;
              Sessions.Add(s);
            }
            else
            {
              InvalidFileNames.Add(fileName);
            }
              }
              // if all map images have the same size, then assume that the very same map image is used and adjust the route to the document map
              // otherwise, adjust the route to the individual session map
              // todo: make it possible to choose KmlRouteAdaptationStyle.NoAdjustment in the GUI
              KmlProperties.RouteAdaptionStyle = (allMapsHaveTheSameSize
                                            ? KmlRouteAdaptationStyle.AdaptToDocumentMapImage
                                            : KmlRouteAdaptationStyle.AdaptToSessionMapImage);

              if (multipleFileProperties.IncludeReplay && multipleFileProperties.MassStart)
              {
            // adjust to mass start
            foreach (var s in Sessions)
            {
              s.AddTimeOffset(massStartTime.Subtract(s.Route.FirstWaypoint.Time));
            }

            // adjust routes to restart after each lap if necessary
            if (multipleFileProperties.ReplayRestartAfterEachLap)
            {
              var maxTimeDurations = GetMaxLapTimeDurations(Sessions);
              foreach (var s in Sessions)
              {
            Lap previousLap = null;
            var count = 0;

            // 1. Caclulate the durations and place in separate variable (since the session will be altered as time passes by)
            var durations = new List<TimeSpan>();
            foreach (var lap in s.Laps)
            {
              if (previousLap != null && (lap.LapType == LapType.Lap || lap.LapType == LapType.Stop))
              {
                durations.Add(lap.Time - previousLap.Time);
                count++;
              }
              previousLap = lap;
            }

            // 2. Add idle time
            previousLap = null;
            count = 0;
            foreach (var lap in s.Laps)
            {
              if (previousLap != null && (lap.LapType == LapType.Lap || lap.LapType == LapType.Stop))
              {
                if (durations[count] < maxTimeDurations[count])
                {
                  var timeToAdd = maxTimeDurations[count] - durations[count];
                  s.InsertIdleTime(lap.Time, timeToAdd);
                }
                count++;
              }
              previousLap = lap;
            }
              }
            }
              }
        }