Ejemplo n.º 1
0
        private void DrawFrame(Graphics g, BrushesStorage brushes, PenStorage pens)
        {
            var brMain = brushes.GetBrush(SystemColors.ControlText);
            var cy     = Height / 2;

            // текст (название тикера)
            var fmt = new StringFormat {
                LineAlignment = StringAlignment.Center
            };

            g.DrawString(Ticker, font, brMain, padding, cy, fmt);

            // область истории
            var barRight = Width - padding - imageCancel.Width - padding;
            var barWd    = barRight - barLeft;

            if (barWd < 0)
            {
                barWd = 0;
            }

            barBounds = new Rectangle(barLeft, cy - barHeight / 2, barWd, barHeight);
            if (barWd == 0)
            {
                return;
            }

            // рамка
            g.DrawRectangle(pens.GetPen(SystemColors.ControlText), barBounds);
        }
Ejemplo n.º 2
0
        public void Draw(Font font, Graphics g, RectangleD worldRect, Rectangle canvasRect,
                         PenStorage penStorage, BrushesStorage brushStorage)
        {
            var strFormat = new StringFormat {
                LineAlignment = StringAlignment.Center,
                Alignment     = StringAlignment.Center
            };

            var pen       = penStorage.GetPen(Color.FromArgb(Transparency, ColorLine), Selected ? 3f : 1f);
            var brush     = brushStorage.GetBrush(Color.FromArgb(Transparency, ColorFill));
            var brushText = brushStorage.GetBrush(Color.FromArgb(Transparency, ColorText));

            var ptCenter = Conversion.WorldToScreen(new PointD(CandleIndex, Price),
                                                    worldRect, canvasRect);

            screenX = ptCenter.X;
            screenY = ptCenter.Y;

            DrawShape(g, brush, ptCenter, pen);

            // значок
            g.DrawString(Sign, font, brushText, (float)ptCenter.X, (float)ptCenter.Y, strFormat);

            // маркеры
            if (Selected)
            {
                foreach (var marker in markers)
                {
                    marker.CalculateScreenCoords(worldRect, canvasRect);
                    marker.Draw(g, penStorage, brushStorage);
                }
            }
        }
Ejemplo n.º 3
0
        public Image CreateSample(Size sizeHint)
        {
            var originalPoints = new List <PointF>(points);

            points.Clear();
            var centerx = sizeHint.Width / 2;
            var centery = sizeHint.Height / 2;
            var dx      = sizeHint.Width / 2;
            var dy      = sizeHint.Height / 2;
            var left    = centerx - dx;
            var top     = centery - dy;
            var width   = sizeHint.Width;
            var height  = sizeHint.Height;

            points.Add(new PointF(left, top));
            points.Add(new PointF(left + width, top + height));
            points.Add(new PointF(left + width / 2, top + height));
            var worldRect    = new RectangleD(left - 50, top - 50, width + 100, height + 100);
            var result       = new Bitmap(sizeHint.Width, sizeHint.Height);
            var brushStorage = new BrushesStorage();
            var penStorage   = new PenStorage();

            DrawEllipse(Graphics.FromImage(result), worldRect, new Rectangle(new Point(0, 0), sizeHint), brushStorage,
                        penStorage, new Font(FontFamily.GenericSansSerif, 8));
            points.Clear();
            points.AddRange(originalPoints);
            return(result);
        }
Ejemplo n.º 4
0
        public Image CreateSample(Size sizeHint)
        {
            if (sizeHint.IsEmpty)
            {
                return(null);
            }
            var result       = new Bitmap(sizeHint.Width, sizeHint.Height);
            var g            = Graphics.FromImage(result);
            var brushStorage = new BrushesStorage();
            var penStorage   = new PenStorage();
            var pen          = penStorage.GetPen(Color.FromArgb(Transparency, ColorLine));
            var brush        = brushStorage.GetBrush(Color.FromArgb(Transparency, ColorFill));
            var brushText    = brushStorage.GetBrush(Color.FromArgb(Transparency, ColorText));
            var ptCenter     = new PointD(sizeHint.Width / 2.0, sizeHint.Height / 2.0);

            DrawShape(g, brush, ptCenter, pen);
            // значок
            var strFormat = new StringFormat
            {
                LineAlignment = StringAlignment.Center,
                Alignment     = StringAlignment.Center
            };

            g.DrawString(Sign, new Font(FontFamily.GenericSansSerif, 8), brushText, (float)ptCenter.X,
                         (float)ptCenter.Y, strFormat);
            return(result);
        }
Ejemplo n.º 5
0
        private void DrawComments(Graphics g, RectangleD worldRect, Rectangle canvasRect)
        {
            List <Rectangle> areasDrawn = null;

            // контроль перекрывающихся комментов
            if (hideSpannedComments)
            {
                areasDrawn = new List <Rectangle>();
            }

            using (var fonts = new FontStorage(new Font(Chart.Font.FontFamily, fontSize,
                                                        FontBold ? FontStyle.Bold : FontStyle.Regular)))
                using (var penStorage = new PenStorage())
                    using (var brushStorage = new BrushesStorage())
                    {
                        for (var i = data.Count - 1; i >= 0; i--)
                        {
                            data[i].DrawComment(g, fonts, worldRect, canvasRect, penStorage, brushStorage, areasDrawn);
                            if (!hideSpannedComments)
                            {
                                continue;
                            }
                        }
                    }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Прорисовать индикатор - пририсовка квадритика и надписи в соответствии с установлеными для них размеров и положения
        /// </summary>
        /// <param name="graphic">Объект типа "Graphics" контрола типа QuoteTradeControl на котором будем рисовать индикатор</param>
        /// <param name="brushes">Кисть</param>
        public void Draw(Graphics graphic, BrushesStorage brushes)
        {
            graphic.FillRectangle(brushes.GetBrush(Color.FromArgb(255, 192, 255, 192)), spreadPointRectangle);
            graphic.DrawRectangle(new Pen(Color.FromArgb(255, 90, 188, 90), 1), spreadPointRectangle);
            var pipsStr = (Value * precisionPower).ToString("N1");


            // Устанавливаем стандартный размер шрифта
            var textSize = spreadPointRectangle.Height / 1.5f > spreadPointRectangle.Width / 3f ? spreadPointRectangle.Width / 3f : spreadPointRectangle.Height / 1.5f;
            var rectSize = graphic.MeasureString(pipsStr, new Font("Open Sans", textSize, FontStyle.Bold));

            // Если при стандарном размере шрифта текст полкостью не влезает, то смотрим насколько не влезло и высчитаваем подходящий размер шрифта
            if (rectSize.Height > spreadPointRectangle.Height || rectSize.Width > spreadPointRectangle.Width)
            {
                textSize = rectSize.Height > rectSize.Width
                               ? textSize * spreadPointRectangle.Height / rectSize.Height - 0.5f
                               : textSize * spreadPointRectangle.Width / rectSize.Width - 0.5f;
                rectSize = graphic.MeasureString(pipsStr, new Font("Open Sans", textSize, FontStyle.Bold));
            }

            var px = (spreadPointRectangle.Width - rectSize.Width) / 2;
            var py = (spreadPointRectangle.Height - rectSize.Height) / 2;

            graphic.DrawString(pipsStr, new Font("Open Sans", textSize, FontStyle.Bold),
                               brushes.GetBrush(Color.Black), spreadPointRectangle.X + px, spreadPointRectangle.Y + py);
        }
Ejemplo n.º 7
0
        private void DrawCursorCross(Graphics gr, BrushesStorage brushes)
        {
            if (!cursorInBounds)
            {
                return;
            }

            var pointModel  = cursorCrossCoords;
            var pointScreen = Conversion.WorldToScreen(pointModel.Value,
                                                       WorldRect, CanvasRect);
            var pointRight = new PointD(CanvasRect.Width, CanvasRect.Height);

            // нарисовать перекрестие
            using (var penCross = new Pen(Chart.visualSettings.SeriesForeColor)
            {
                DashStyle = DashStyle.Custom,
                DashPattern = dashPattern
            })
            {
                gr.DrawLine(penCross, 0, (int)pointScreen.Y, (int)pointRight.X, (int)pointScreen.Y);
                gr.DrawLine(penCross, (int)pointScreen.X, 0, (int)pointScreen.X, Height);
            }
            if (!ShowCrossToolTip)
            {
                return;
            }

            // нарисовать tooltip
            var tipText = Chart.GetTipText((int)pointScreen.X, (int)pointScreen.Y);

            if (!string.IsNullOrEmpty(tipText))
            {
                DrawHint(gr, pointScreen, tipText, brushes);
            }
        }
Ejemplo n.º 8
0
        private void DrawTextOrSymbol(string comment,
                                      BrushesStorage brushes,
                                      FontStorage fonts,
                                      Color commentColor, Graphics g,
                                      float left, float top, float width, float height)
        {
            const int textShift = 4;

            if (comment != null)
            {
                if (comment.Contains(TemplateBuy) || comment.Contains(TemplateSell))
                {
                    var smb = symbolBuySell.Copy();
                    smb.Scale(SymbolBuySellWidth / smb.Width, SymbolBuySellHeight / smb.Height);
                    if (comment.Contains(TemplateBuy))
                    {
                        smb.Move2Point(new PointF(left + width / 2, top + height - textShift));
                        smb.PaintFills(Color.Blue);
                    }
                    if (comment.Contains(TemplateSell))
                    {
                        smb.Rotate((float)-Math.PI);
                        smb.Move2Point(new PointF(left + width / 2, top + textShift));
                        smb.PaintFills(Color.Red);
                    }
                    smb.Draw(g);
                    return;
                }
            }
            var text = string.IsNullOrEmpty(comment) ? "<пусто>" : comment;

            g.DrawFormattedText(left + textShift, top + textShift, brushes, commentColor,
                                text, fonts);
        }
Ejemplo n.º 9
0
 private void DrawYAxisGrid(Graphics g, BrushesStorage brushes)
 {
     if (GridLineVisible || GridBandVisible)
     {
         Rectangle  canvasRect = Owner.CanvasRect;
         RectangleD worldRect  = Owner.WorldRect;
         var        pen        = new Pen(GridLineColor);
         var        brush      = brushes.GetBrush(GridBandColor);
         pen.DashStyle = (DashStyle)Enum.Parse(typeof(DashStyle), GridLineStyle.ToString());
         using (pen)
         {
             var ef =
                 (SizeF)Conversion.WorldToScreen(new SizeD(0.0, LabelInfo.MajorStep), worldRect, canvasRect);
             float left  = canvasRect.Left;
             float right = canvasRect.Right;
             right = (right < left) ? left : right;
             double max  = LabelInfo.Max;
             bool   flag = true;
             while (max > LabelInfo.Min)
             {
                 var tf = (PointF)Conversion.WorldToScreen(new PointD(0.0, max), worldRect, canvasRect);
                 if ((GridBandVisible && (GridBandColor != Color.Empty)) && flag)
                 {
                     g.FillRectangle(brush, canvasRect.Left, tf.Y, canvasRect.Width, ef.Height);
                 }
                 if (GridLineVisible)
                 {
                     g.DrawLine(pen, left, tf.Y, right, tf.Y);
                 }
                 flag = !flag;
                 max -= LabelInfo.MajorStep;
             }
         }
     }
 }
Ejemplo n.º 10
0
 internal virtual void Draw(Graphics g)
 {
     try
     {
         using (var brushes = new BrushesStorage())
             using (var pens = new PenStorage())
             {
                 AdjustLayout();
                 DrawBackground(g, brushes);
                 DrawFrame(g);
                 GraphicsContainer container = g.BeginContainer();
                 g.TranslateTransform(ClientRect.X, ClientRect.Y);
                 DrawYAxis(g);
                 DrawStockSeries(g);
                 DrawSeries(g);
                 if (paneIconStrip != null)
                 {
                     paneIconStrip.Draw(g);
                 }
                 DrawCursorCross(g, brushes);
                 g.EndContainer(container);
                 // нарисовать иконки - кнопочки
                 DrawButtons(g, brushes, pens);
             }
     }
     catch (Exception ex)
     {
         Logger.Error("Pane.Draw()", ex);
         throw;
     }
 }
Ejemplo n.º 11
0
        public override void Draw(Graphics g, RectangleD worldRect, Rectangle canvasRect)
        {
            base.Draw(g, worldRect, canvasRect);

            using (var penStorage = new PenStorage())
                using (var brushStorage = new BrushesStorage())
                    foreach (var marker in data)
                    {
                        var ptScreen = Conversion.WorldToScreen(new PointD(marker.candleIndex, marker.Price),
                                                                worldRect, canvasRect);
                        marker.Draw(g, ptScreen, Chart.Font);

                        if (marker.exitPair.HasValue)
                        {
                            var pairId = marker.exitPair;
                            var pair   = data.FirstOrDefault(m => m.id == pairId);
                            if (pair != null)
                            {
                                var ptPair = Conversion.WorldToScreen(new PointD(pair.candleIndex, pair.Price),
                                                                      worldRect, canvasRect);
                                // соединить две точки
                                var pen = penStorage.GetPen(Color.DarkSlateBlue, 1,
                                                            DashStyle.Dash);
                                g.DrawLine(pen, ptScreen.ToPointF(), ptPair.ToPointF());
                            }
                        }
                        if (marker.Selected)
                        {
                            marker.DrawMarker(g, worldRect, canvasRect, penStorage, brushStorage);
                        }
                    }
        }
Ejemplo n.º 12
0
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            try
            {
                using (var brushes = new BrushesStorage())
                    using (var pens = new PenStorage())
                    {
                        // подготовить фон
                        DrawBackgr(e.Graphics, brushes);

                        // нарисовать разметку
                        DrawFrame(e.Graphics, brushes, pens);

                        // кнопка отмены
                        if (CancelEnabled)
                        {
                            e.Graphics.DrawImageUnscaled(imageCancel,
                                                         Width - imageCancel.Width - padding,
                                                         (Height - imageCancel.Height) / 2);
                        }

                        if (gaps == null)
                        {
                            return;
                        }
                        DrawGaps(e.Graphics, brushes);
                    }
            }
            catch (Exception ex)
            {
                Logger.Error("QuoteHistoryFillLineControl error", ex);
            }
        }
Ejemplo n.º 13
0
        private void TrendLineTypeDialogLoad(object sender, EventArgs e)
        {
            // заполнить список линий
            var w          = imageListLarge.ImageSize.Width;
            var h          = imageListLarge.ImageSize.Height;
            var rectWorld  = new RectangleD(0, 0, w, h);
            var rectCanvas = new Rectangle(0, 0, w, h);

            var colors     = new [] { Color.BlanchedAlmond, Color.GreenYellow, Color.PaleTurquoise };
            var colorIndex = 0;

            foreach (TrendLine.TrendLineStyle lineType in Enum.GetValues(typeof(TrendLine.TrendLineStyle)))
            {
                var bmp  = new Bitmap(w, h);
                var line = new TrendLine();
                line.AddPoint(h * 0.23, w - 5);
                line.AddPoint(h * 0.77, 5);
                if (lineType == TrendLine.TrendLineStyle.Отрезок ||
                    lineType == TrendLine.TrendLineStyle.Окружность || lineType == TrendLine.TrendLineStyle.ЛинияСМаркерами ||
                    lineType == TrendLine.TrendLineStyle.ОтрезокСМаркерами)
                {
                    line.linePoints[1] = new PointD(h * 0.32, w - 16);
                    line.linePoints[0] = new PointD(h * 0.68, 16);
                }

                line.LineColor      = Color.Black;
                line.ShapeFillColor = colors[colorIndex];
                line.LineStyle      = lineType;
                colorIndex++;
                if (colorIndex == colors.Length)
                {
                    colorIndex = 0;
                }

                using (var gr = Graphics.FromImage(bmp))
                    using (var brushes = new BrushesStorage())
                        using (var pens = new PenStorage())
                        {
                            gr.SmoothingMode = SmoothingMode.AntiAlias;
                            line.Draw(gr, rectWorld, rectCanvas, pens, brushes);
                        }

                imageListLarge.Images.Add(bmp);
                var item = listView.Items.Add(lineType.ToString(),
                                              EnumFriendlyName <TrendLine.TrendLineStyle> .GetString(lineType),
                                              imageListLarge.Images.Count - 1);
                item.Tag = lineType;
                if (lineType == selectedStyle)
                {
                    item.Selected = true;
                }
            }

            // привязать картинки к списку
            listView.LargeImageList = imageListLarge;
            listView.SmallImageList = imageListLarge;
        }
Ejemplo n.º 14
0
        public QuotePartButton(float scaleX, float scaleY, BrushesStorage brushes, PenStorage pens, bool isLeft = true)
        {
            brushesStor = brushes;
            pensStor    = pens;
            colorScheme.Add(ButtonFigureColorScheme.Normal, Color.FromArgb(255, 180, 247, 180));
            colorScheme.Add(ButtonFigureColorScheme.Pressed, Color.FromArgb(255, 200, 247, 210));
            colorScheme.Add(ButtonFigureColorScheme.Light, Color.FromArgb(255, 160, 195, 180));

            currentBrush = brushesStor.GetBrush(colorScheme[ButtonFigureColorScheme.Normal]) as SolidBrush;

            ScaleX          = scaleX;
            ScaleY          = scaleY;
            this.isLeft     = isLeft;
            translateMatrix = new Matrix();

            string buySellIndicatorHaderText;

            if (isLeft)
            {
                translateMatrix.Translate(paddingLeftRightProportion / 2, PaddingTopProportion);
                buySellIndicatorHaderText = "Bid";
            }
            else
            {
                translateMatrix.Translate(QuotePartButtonFigure.OriginalWidth * 2 + paddingLeftRightProportion / 2, PaddingTopProportion);
                translateMatrix.Scale(-1, 1);
                buySellIndicatorHaderText = "Ask";
            }

            buySellIndicator = new BuySellIndicator
            {
                ScaleX           = scaleX,
                ScaleY           = scaleY,
                OriginalLocation = isLeft
                                            ?
                                   new Point(
                    Convert.ToInt32(paddingLeftRightProportion),
                    Convert.ToInt32(PaddingTopProportion + PaddingTopBuySellIndicator))
                                            :
                                   new Point(
                    Convert.ToInt32(QuotePartButtonFigure.OriginalWidth + paddingLeftRightProportion),
                    Convert.ToInt32(PaddingTopProportion + PaddingTopBuySellIndicator)),
                HaderText = buySellIndicatorHaderText,
                Volume    = null
            };


            arrowTrend = new ArrowTrend
            {
                Sx               = ScaleX,
                Sy               = ScaleY,
                Brushes          = brushes,
                Pens             = pens,
                OriginalLocation = isLeft ? new PointF(QuotePartButtonFigure.OriginalWidth - paddingLeftRightProportion - 2, PaddingTopArrow) :
                                   new PointF(QuotePartButtonFigure.OriginalWidth * 2 - paddingLeftRightProportion - 2, PaddingTopArrow)
            };
        }
Ejemplo n.º 15
0
        /// <summary>
        /// нарисовать на истории полоски гэпов
        /// </summary>
        private void DrawGaps(Graphics g, BrushesStorage brushes)
        {
            if (gaps.Count == 0)
            {
                return;
            }
            var widthPx = barBounds.Width - 2;

            if (widthPx == 0)
            {
                return;
            }

            var br = brushes.GetBrush(clHistOk);

            g.FillRectangle(br, barBounds.Left + 1, barBounds.Top + 1, barBounds.Width - 1, barBounds.Height - 1);

            // пересчитать модельные координаты в координаты времени,
            // заодно склеив соседние
            var      startTick   = Interval.a.Ticks;
            var      endTick     = Interval.b.Ticks;
            var      widthTics   = endTick - startTick;
            var      intervalsPx = new List <GapIntPx>();
            GapIntPx?lastPoint   = null;

            var gapsCopy = gaps.ToArray();

            foreach (var gap in gapsCopy)
            {
                var gapStartPx = (gap.start.Ticks - startTick) * widthPx / widthTics;
                var gapEndPx   = (gap.end.Ticks - startTick) * widthPx / widthTics;
                var color      = clGap[(int)gap.status];

                if (lastPoint.HasValue)
                {
                    if (lastPoint.Value.end >= gapStartPx && lastPoint.Value.color == color)
                    {
                        intervalsPx[intervalsPx.Count - 1] = new GapIntPx(lastPoint.Value.start, gapEndPx,
                                                                          color);
                        continue;
                    }
                }
                lastPoint = new GapIntPx(gapStartPx, gapEndPx == gapStartPx ? gapStartPx + 1 : gapEndPx, color);
                intervalsPx.Add(lastPoint.Value);
            }

            // отобразить
            foreach (var inter in intervalsPx)
            {
                var brushGap = brushes.GetBrush(inter.color);
                g.FillRectangle(brushGap,
                                inter.start + barLeft + 1,
                                barBounds.Top + 1,
                                (inter.end - inter.start),
                                barBounds.Height - 1);
            }
        }
Ejemplo n.º 16
0
 private void DrawEllipses(Graphics g, RectangleD worldRect, Rectangle canvasRect)
 {
     using (var brushStorage = new BrushesStorage())
         using (var penStorage = new PenStorage())
             foreach (var ellipse in data)
             {
                 ellipse.DrawEllipse(g, worldRect, canvasRect, brushStorage, penStorage, Chart.Font);
             }
 }
Ejemplo n.º 17
0
 public void DrawComments(Graphics g, RectangleD worldRect, Rectangle canvasRect,
                          PenStorage penStorage, BrushesStorage brushStorage)
 {
     foreach (var marker in markers)
     {
         marker.CalculateScreenCoords(worldRect, canvasRect);
         marker.Draw(g, penStorage, brushStorage);
     }
 }
Ejemplo n.º 18
0
        private void DrawLabels(Graphics g,
                                BrushesStorage brushes,
                                Rectangle axisRect, YAxisAlignment alignment)
        {
            var canvasRect = Owner.CanvasRect;
            var worldRect  = Owner.WorldRect;
            var format     = PrepareStringFormat(alignment);
            var provider   = PrepareNumberFormat();
            var brush      = brushes.GetBrush(TextColor);

            using (format)
            {
                var rect = new Rectangle(axisRect.Left + 5, 0, ((axisRect.Width - 5) - 5) - 1, Font.Height);
                for (double i = LabelInfo.Max; i > LabelInfo.Min; i -= LabelInfo.MajorStep)
                {
                    var tf = (PointF)Conversion.WorldToScreen(new PointD(0.0, i), worldRect, canvasRect);
                    rect.Y = ((int)tf.Y) - (Font.Height / 2);
                    double num2 = i / LabelInfo.Exponent;
                    if (axisRect.Contains(rect))
                    {
                        g.DrawString(num2.ToString("N", provider), Font, brush, rect, format);
                    }
                }
                if (CurrentPrice.HasValue)
                {
                    // рисуем текущую цену в шкале
                    DrawSelectedPriceLabel(CurrentPrice.Value,
                                           brush, format, axisRect, worldRect, canvasRect, g);
                }

                if (SelectedLabelPrice.HasValue)
                {
                    // отметка цены для перекрестия
                    DrawSelectedPriceLabel(SelectedLabelPrice.Value,
                                           brush, format, axisRect, worldRect, canvasRect, g);
                }

                switch (ShipsDrawMode)
                {
                case ShipsDrawMode.None:
                    break;

                case ShipsDrawMode.Default:
                    DrawOrderShip(format, axisRect, worldRect, canvasRect, g);       //Рисуем кораблики к открытым сделкам
                    break;

                case ShipsDrawMode.Average:
                    DrawAverageOrderShip(format, axisRect, worldRect, canvasRect, g);       //Рисуем кораблики средних значений к открытым сделкам
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(ShipsDrawMode));
                }

                ExponentLabel.Draw(g, axisRect, alignment);
            }
        }
Ejemplo n.º 19
0
 public void DrawMarkers(Graphics g, RectangleD worldRect, Rectangle canvasRect)
 {
     using (var penStorage = new PenStorage())
         using (var brushStorage = new BrushesStorage())
             foreach (var marker in markers)
             {
                 marker.CalculateScreenCoords(worldRect, canvasRect);
                 marker.Draw(g, penStorage, brushStorage);
             }
 }
Ejemplo n.º 20
0
        private void DrawXAxisGrid(Graphics g, BrushesStorage brushes)
        {
            Rectangle     canvasRect = Owner.CanvasRect;
            RectangleD    worldRect  = Owner.WorldRect;
            GraphicsState gstate     = g.Save();

            g.SetClip(canvasRect);
            if ((Chart.XAxis.GridLineVisible || Chart.XAxis.GridBandVisible) &&
                (Chart.XAxis.Grid.Count > 0))
            {
                var pen   = new Pen(Chart.XAxis.GridLineColor);
                var brush = brushes.GetBrush(Chart.XAxis.GridBandColor);
                pen.DashStyle = (DashStyle)Enum.Parse(typeof(DashStyle), Chart.XAxis.GridLineStyle.ToString());
                using (pen)
                {
                    bool           flag = true;
                    XAxisLabelInfo info;
                    for (int i = 0; i < Chart.XAxis.Grid.Count; i++)
                    {
                        info = (XAxisLabelInfo)Chart.XAxis.Grid[i];
                        var tf = (PointF)Conversion.WorldToScreen(new PointD(info.X, 0.0), worldRect, canvasRect);
                        if (Chart.XAxis.GridBandVisible)
                        {
                            if (flag)
                            {
                                PointF tf2;
                                if (i != (Chart.XAxis.Grid.Count - 1))
                                {
                                    var info2 = (XAxisLabelInfo)Chart.XAxis.Grid[i + 1];
                                    tf2 =
                                        (PointF)
                                        Conversion.WorldToScreen(new PointD(info2.X, 0.0), worldRect, canvasRect);
                                }
                                else
                                {
                                    tf2 = new PointF(canvasRect.Right, canvasRect.Top);
                                }
                                g.FillRectangle(brush, tf.X, 0f, tf2.X - tf.X, canvasRect.Height);
                            }
                            else if ((i == 0) && (tf.X > canvasRect.Left))
                            {
                                g.FillRectangle(brush, canvasRect.Left, 0f, tf.X - canvasRect.Left,
                                                canvasRect.Height);
                            }
                            flag = !flag;
                        }
                        if (Chart.XAxis.GridLineVisible)
                        {
                            g.DrawLine(pen, tf.X, 0f, tf.X, (canvasRect.Height - 1));
                        }
                    }
                }
            }
            g.Restore(gstate);
        }
Ejemplo n.º 21
0
 private void DrawButtons(Graphics g, BrushesStorage brushes, PenStorage pens)
 {
     if (customButtons == null)
     {
         return;
     }
     foreach (var btn in customButtons)
     {
         btn.Draw(g, brushes, pens);
     }
 }
Ejemplo n.º 22
0
        private void DrawDragScaleMarks(Graphics g, BrushesStorage brushes)
        {
            if (!startDragPoint.HasValue)
            {
                return;
            }

            // найти X-координату (точно в центре области, занимаемой отметками оси)
            var xCoord = startDragPoint.Value.X;

            if (Chart.YAxisAlignment == YAxisAlignment.Left)
            {
                xCoord = (int)(LeftAxisRect.Left + LeftAxisRect.Width * 0.5);
            }
            else if (Chart.YAxisAlignment == YAxisAlignment.Right)
            {
                xCoord = (int)(RightAxisRect.Left + RightAxisRect.Width * 0.5);
            }
            else
            {
                var left       = (int)(LeftAxisRect.Left + LeftAxisRect.Width * 0.5);
                var right      = (int)(RightAxisRect.Left + RightAxisRect.Width * 0.5);
                var deltaLeft  = Math.Abs(xCoord - left);
                var deltaRight = Math.Abs(xCoord - right);
                xCoord = deltaLeft < deltaRight ? left : right;
            }

            // нарисовать отметку начала перетягивания
            const int pointStartR = 5, pointStartD = 10;
            var       brush    = brushes.GetBrush(Chart.visualSettings.SeriesForeColor);
            var       ptCenter = new Point(xCoord, startDragPoint.Value.Y);

            g.FillEllipse(brush, ptCenter.X - pointStartR, ptCenter.Y - pointStartR, pointStartD, pointStartD);

            // нарисовать отметку текущей позиции курсора
            if (!currentDragPoint.HasValue)
            {
                return;
            }
            const int shapeWd2 = 5, shapeHt2 = 4, shapeHt = 7;

            var x = currentDragPoint.Value.X;
            var y = currentDragPoint.Value.Y;
            var dir = y > startDragPoint.Value.Y ? 1 : -1;

            var points = new []
            {
                new Point(x - shapeWd2, y - shapeHt2 * dir),
                new Point(x + shapeWd2, y - shapeHt2 * dir),
                new Point(x, y + shapeHt * dir)
            };

            g.FillPolygon(brush, points);
        }
Ejemplo n.º 23
0
 public override void Draw(Graphics g, RectangleD worldRect, Rectangle canvasRect)
 {
     base.Draw(g, worldRect, canvasRect);
     using (var pens = new PenStorage())
         using (var brushes = new BrushesStorage())
         {
             foreach (TrendLine line in data)
             {
                 line.Draw(g, worldRect, canvasRect, pens, brushes);
             }
         }
 }
Ejemplo n.º 24
0
        public Image CreateSample(Size sizeHint)
        {
            var result    = new Bitmap(sizeHint.Width, sizeHint.Height);
            var g         = Graphics.FromImage(result);
            var pens      = new PenStorage();
            var brushes   = new BrushesStorage();
            var worldRect = new RectangleD(StartIndex - 1, Price * 0.9, EndIndex + 1, Price * 1.1);

            Draw(g, pens, brushes, worldRect, new Rectangle(new Point(0, 0), sizeHint),
                 new Font(FontFamily.GenericSansSerif, 8));
            return(result);
        }
Ejemplo n.º 25
0
 public void DrawButtons(Graphics g)
 {
     if (customButtons == null)
     {
         return;
     }
     using (var brushes = new BrushesStorage())
         using (var pens = new PenStorage())
             foreach (var btn in customButtons)
             {
                 btn.Draw(g, brushes, pens);
             }
 }
Ejemplo n.º 26
0
        private void DrawTangent(List <PointD> screenPoints, Rectangle canvasRect, Graphics g, PenStorage penStorage,
                                 BrushesStorage brushStorage, Font font)
        {
            var ptLeft  = points[0].X < points[1].X ? points[0] : points[1];
            var ptRight = points[0].X < points[1].X ? points[1] : points[0];
            var m1      = new PointD(cx + b * Math.Sin(angle), cy + b * Math.Cos(angle));
            var m2      = new PointD(cx + b * Math.Sin(angle + Math.PI), cy + b * Math.Cos(angle + Math.PI));
            var m       = ptLeft.Y > ptRight.Y
                        ? m1.Y < m2.Y ? m1 : m2  // нижняя касательная для растущего эллипса
                        : m1.Y < m2.Y ? m2 : m1; // верхняя для падающего

            var o = new PointD(cx, cy);
            var r = new PointD(m.X - o.X, m.Y - o.Y);

            var pen = penStorage.GetPen(TangentColor);

            foreach (var level in tangentFiboLevels)
            {
                // нарисовать касательную или параллельную ей линию
                var A = new PointD(screenPoints[0].X + r.X * (level + 1), screenPoints[0].Y + r.Y * (level + 1));
                var B = new PointD(screenPoints[1].X + r.X * (level + 1), screenPoints[1].Y + r.Y * (level + 1));
                if (TangentType == EllipseTangentType.Прямая)
                {
                    StretchSpanToScreen(ref A, ref B, canvasRect);
                }
                g.DrawLine(pen, A.ToPointF(), B.ToPointF());
                if (level == 0)
                {
                    continue;
                }
                // нарисовать текстовую отметку
                var ptText   = new PointD(o.X + r.X * (level + 1), o.Y + r.Y * (level + 1));
                var textSz   = g.MeasureString(level.ToString(), font);
                var textRect = new Rectangle((int)(ptText.X - textSz.Width / 2 - 2),
                                             (int)(ptText.Y - textSz.Height / 2 - 2),
                                             (int)textSz.Width + 4, (int)textSz.Height + 4);
                var brushWhite = brushStorage.GetBrush(Color.FromArgb(60, pen.Color));
                g.FillRectangle(brushWhite, textRect);
                g.DrawRectangle(pen, textRect);
                var brushText = brushStorage.GetBrush(pen.Color);
                g.DrawString(level.ToString(), font, brushText, (float)ptText.X, (float)ptText.Y,
                             new StringFormat
                {
                    Alignment     = StringAlignment.Center,
                    LineAlignment = StringAlignment.Center
                });
            }
        }
Ejemplo n.º 27
0
 public override void Draw(Graphics g, RectangleD worldRect, Rectangle canvasRect)
 {
     if (data.Count == 0)
     {
         return;
     }
     base.Draw(g, worldRect, canvasRect);
     using (var pens = new PenStorage())
         using (var brushes = new BrushesStorage())
         {
             foreach (var span in data)
             {
                 span.Draw(g, pens, brushes, worldRect, canvasRect, Chart.Font);
             }
         }
 }
Ejemplo n.º 28
0
        private void DrawHint(Graphics gr, PointD pointScreen,
                              string tipText, BrushesStorage brushes)
        {
            var spaceToRight = CanvasRect.Width - pointScreen.X;
            var spaceToBotom = CanvasRect.Height - pointScreen.Y;
            var tipSz        = gr.MeasureString(tipText, Chart.Font);

            const int textPadding   = 2;
            const int pointDisplace = 2;

            tipSz.Width  += textPadding * 2;
            tipSz.Height += textPadding * 2;

            var placeRight = spaceToRight >= tipSz.Width;
            var placeBotom = spaceToBotom >= tipSz.Height;

            var ptLeft = new Point((int)pointScreen.X + pointDisplace,
                                   (int)pointScreen.Y + pointDisplace);

            if (!placeRight)
            {
                ptLeft.X -= (pointDisplace * 2 + (int)tipSz.Width);
            }
            if (!placeBotom)
            {
                ptLeft.Y -= (pointDisplace * 2 + (int)tipSz.Height);
            }

            var rect = new Rectangle(ptLeft, new Size((int)tipSz.Width, (int)tipSz.Height));

            using (var brushFill = new SolidBrush(Chart.visualSettings.PaneBackColor))
                gr.FillRectangle(brushFill, rect);
            using (var pen = new Pen(Chart.visualSettings.SeriesForeColor))
                gr.DrawRectangle(pen, rect);
            using (var brushText = new SolidBrush(Chart.visualSettings.SeriesForeColor))
            {//brushes.GetBrush();
                try
                {
                    gr.DrawString(tipText, Chart.Font, brushText, ptLeft);
                }
                catch (Exception ex)
                {
                    Logger.ErrorFormat("DrawHint::DrawString error (left is {0}) - {1}", ptLeft, ex);
                    //throw;
                }
            }
        }
Ejemplo n.º 29
0
 public override void Draw(Graphics g, RectangleD worldRect, Rectangle canvasRect)
 {
     base.Draw(g, worldRect, canvasRect);
     using (var penDic = new PenStorage())
         using (var brushStorage = new BrushesStorage())
             foreach (var channel in data)
             {
                 try
                 {
                     channel.Draw(g, worldRect, canvasRect, Chart.Font, penDic, brushStorage);
                 }
                 catch (Exception ex)
                 {
                     logNoFlood.LogMessageFormatCheckFlood(LogEntryType.Error,
                                                           LogMsgErrorDrawChannel, "SeriesFiboChannel darawing error: {0}", ex);
                 }
             }
 }
Ejemplo n.º 30
0
        private void DrawBackground(Graphics g, BrushesStorage brushes,
                                    Rectangle axisRect, YAxisAlignment alignment)
        {
            var brush = brushes.GetBrush(BackColor);
            var pen   = new Pen(ForeColor);

            g.FillRectangle(brush, axisRect);
            using (pen)
            {
                if (alignment == YAxisAlignment.Left)
                {
                    g.DrawLine(pen, axisRect.Right - 1, axisRect.Top, axisRect.Right - 1, axisRect.Bottom - 1);
                }
                else if (alignment == YAxisAlignment.Right)
                {
                    g.DrawLine(pen, axisRect.Left, axisRect.Top, axisRect.Left, axisRect.Bottom - 1);
                }
            }
        }