/// <summary>
        /// Defines fill brush.
        /// </summary>
        /// <param name="parentColor">Parent color.</param>
        /// <returns>Normal fill brush</returns>
        private static SolidColorBrush _GetFillBrush(System.Drawing.Color parentColor)
        {
            Color color = new Color();

            color.A = parentColor.A;
            color.R = parentColor.R;
            color.G = parentColor.G;
            color.B = parentColor.B;

            SolidColorBrush resultBrush = new SolidColorBrush(color);

            // Freeze brush.
            resultBrush = (SolidColorBrush)resultBrush.GetCurrentValueAsFrozen();

            Debug.Assert(resultBrush != null);

            return(resultBrush);
        }
        /// <summary>
        /// Gets grayscale brush from color.
        /// </summary>
        /// <param name="originalColor">Input color.</param>
        /// <returns>Brush with converted grayscale color.</returns>
        private static SolidColorBrush _GetGrayscaleBrush(System.Drawing.Color originalColor)
        {
            Color grayscaleColor = new Color();

            double R = Convert.ToDouble(originalColor.R);
            double G = Convert.ToDouble(originalColor.G);
            double B = Convert.ToDouble(originalColor.B);

            grayscaleColor.A = originalColor.A;

            // Convert original color to grayscale.
            grayscaleColor.R = Convert.ToByte((R + G + B) / GRAYSCALE_CONVERTER_PARAMETER);
            grayscaleColor.G = Convert.ToByte((R + G + B) / GRAYSCALE_CONVERTER_PARAMETER);
            grayscaleColor.B = Convert.ToByte((R + G + B) / GRAYSCALE_CONVERTER_PARAMETER);

            SolidColorBrush resultBrush = new SolidColorBrush(grayscaleColor);

            // Freeze brush.
            resultBrush = (SolidColorBrush)resultBrush.GetCurrentValueAsFrozen();
            Debug.Assert(resultBrush != null);

            return(resultBrush);
        }
Пример #3
0
        /// <summary>
        /// Creates canvas with invalidated route and its stops.
        /// </summary>
        /// <param name="route">Route to draw.</param>
        /// <param name="sortedRouteStops">Sorted stops from route.</param>
        /// <param name="mapImage">Map image.</param>
        /// <returns>Canvas with invalidated route and its stops.</returns>
        private SysControls.Canvas _CreateRouteCanvas(Route route, IList <Stop> sortedRouteStops, MapImage mapImage)
        {
            Debug.Assert(null != route);
            Debug.Assert(null != mapImage);
            Debug.Assert(null != sortedRouteStops);

            // create canvas
            var canvas = new SysControls.Canvas();

            canvas.InvalidateVisual();
            canvas.Height = mapImage.ImageHeight;
            canvas.Width  = mapImage.ImageWidth;

            // init route brush from route color
            System.Drawing.Color color = route.Color;
            var mediaColor             =
                SysWindows.Media.Color.FromArgb(color.A, color.R, color.G, color.B);
            var fillingBrush = new SolidColorBrush(mediaColor);

            // create and init route image
            SymbolControl routeBox = new SymbolControl(_routeSymbolTemplate);

            routeBox.Geometry = _CreatePath(route,
                                            sortedRouteStops,
                                            mapImage.Extent,
                                            mapImage.ImageWidth,
                                            mapImage.ImageHeight);
            routeBox.Fill = (SolidColorBrush)fillingBrush.GetCurrentValueAsFrozen();
            routeBox.HorizontalAlignment = HorizontalAlignment.Stretch;
            routeBox.VerticalAlignment   = VerticalAlignment.Stretch;
            // draw route
            canvas.Children.Add(routeBox);

            // draw stops - from last to first (visual elements)
            int stopLastIndex = sortedRouteStops.Count - 1;

            for (int index = stopLastIndex; index >= 0; --index)
            {
                Stop stop = sortedRouteStops[index];
                if (!stop.MapLocation.HasValue)
                {
                    continue; // skip empty
                }
                bool isVisible = true;
                if (stop.AssociatedObject is Location)
                {
                    if (index == 0)
                    {
                        isVisible = _showLeadingStemTime;
                    }
                    else if (index == stopLastIndex)
                    {
                        isVisible = _showTrailingStemTime;
                    }
                    // else do nothing
                }

                if (isVisible)
                {
                    UIElement element = _CreateStopUIElement(stop, mapImage, fillingBrush);
                    if (element != null)
                    {
                        canvas.Children.Add(element);
                    }
                }
            }

            return(canvas);
        }