public override void Draw(GraphicsWrapper g, PointF?mousePosition, RectangleF clippingRectangle, RectangleF drawingSpace) { if (Visible == false) { return; } if (_controlPoints.Count < 1) { return; } PointF point1 = _controlPoints[0]; PointF point2; if (_controlPoints.Count < 2) { point2 = mousePosition.Value; } else { point2 = _controlPoints[1]; } // Clipping opitmization. RectangleF rectangle = new RectangleF( Math.Min(point1.X, point2.X), Math.Min(point1.Y, point2.Y), Math.Abs(point2.X - point1.X), Math.Abs(point2.Y - point1.Y)); if (rectangle.IntersectsWith(clippingRectangle) == false) { return; } // Draw base line. g.DrawLine(_dashedLinePen, point1, point2); float baseLevel = point1.Y; float height = point2.Y - point1.Y; // Draw fibbonacci levels. float[] levels = new float[] { 0, 23.6f, 38.2f, 50, 61.8f, 100 }; for (int i = 0; i < levels.Length; i++) { float actualLevel = baseLevel + height * levels[i] / 100f; g.DrawLine(_solidLinePen, point1.X, actualLevel, point2.X, actualLevel); g.DrawString(levels[i].ToString(), DefaultDynamicObjectFont, Brushes.White, point1.X, actualLevel); } if (Selected) { DrawControlPoints(g); } }
public override void Draw(GraphicsWrapper g, PointF?mousePosition, RectangleF clippingRectangle, RectangleF drawingSpace) { if (Visible == false || _controlPoints.Count < 1) { return; } if (clippingRectangle.Contains(_controlPoints[0]) == false) {// Clipping opitmization. return; } SizeF size = g.MeasureString(_text, DefaultDynamicObjectFont); if (size.Height < 0) { _rectangle = new RectangleF(_controlPoints[0].X, _controlPoints[0].Y + size.Height, size.Width, -size.Height); } else { _rectangle = new RectangleF(_controlPoints[0].X, _controlPoints[0].Y, size.Width, size.Height); } g.DrawString(_text, DefaultDynamicObjectFont, _brush, _controlPoints[0]); if (Selected || IsBuilding) { g.DrawLine(Pens.Red, _rectangle.Location, new PointF(_rectangle.X + _rectangle.Width, _rectangle.Y)); } // Rounding rectangle. //g.DrawRectangle(Pens.White, _rectangle); if (Selected) { DrawControlPoints(g); } }
public override void Draw(GraphicsWrapper g, PointF? mousePosition, RectangleF clippingRectangle, RectangleF drawingSpace) { if (Visible == false) { return; } if (_controlPoints.Count < 1) { return; } PointF point1 = _controlPoints[0]; PointF point2; if (_controlPoints.Count < 2) { point2 = mousePosition.Value; } else { point2 = _controlPoints[1]; } // Clipping opitmization. RectangleF rectangle = new RectangleF( Math.Min(point1.X, point2.X), Math.Min(point1.Y, point2.Y), Math.Abs(point2.X - point1.X), Math.Abs(point2.Y - point1.Y)); if (rectangle.IntersectsWith(clippingRectangle) == false) { return; } // Draw base line. g.DrawLine(_dashedLinePen, point1, point2); float baseLevel = point1.Y; float height = point2.Y - point1.Y; // Draw fibbonacci levels. float[] levels = new float[] { 0, 23.6f, 38.2f, 50, 61.8f, 100 }; for (int i = 0; i < levels.Length; i++) { float actualLevel = baseLevel + height * levels[i] / 100f; g.DrawLine(_solidLinePen, point1.X, actualLevel, point2.X, actualLevel); g.DrawString(levels[i].ToString(), DefaultDynamicObjectFont, Brushes.White, point1.X, actualLevel); } if (Selected) { DrawControlPoints(g); } }
public override void Draw(GraphicsWrapper g, PointF? mousePosition, RectangleF clippingRectangle, RectangleF drawingSpace) { if (Visible == false || _controlPoints.Count < 1) { return; } if (clippingRectangle.Contains(_controlPoints[0]) == false) {// Clipping opitmization. return; } SizeF size = g.MeasureString(_text, DefaultDynamicObjectFont); if (size.Height < 0) { _rectangle = new RectangleF(_controlPoints[0].X, _controlPoints[0].Y + size.Height, size.Width, -size.Height); } else { _rectangle = new RectangleF(_controlPoints[0].X, _controlPoints[0].Y, size.Width, size.Height); } g.DrawString(_text, DefaultDynamicObjectFont, _brush, _controlPoints[0]); if (Selected || IsBuilding) { g.DrawLine(Pens.Red, _rectangle.Location, new PointF(_rectangle.X + _rectangle.Width, _rectangle.Y)); } // Rounding rectangle. //g.DrawRectangle(Pens.White, _rectangle); if (Selected) { DrawControlPoints(g); } }
void DrawGraphicSeriesLabels(GraphicsWrapper g, int initialMarginLeft) { _currentLabelsRectangles = new Rectangle[_series.Count]; for (int i = 0; i < _series.Count; i++) { if (i == 0) { _currentLabelsRectangles[0].X = initialMarginLeft; } else { _currentLabelsRectangles[i].X = _currentLabelsRectangles[i - 1].Right + (int)_labelsMargin; } _currentLabelsRectangles[i].Y = (int)_labelsTopMargin; SizeF seriesSize = g.MeasureString(_series[i].Name, _labelsFont); _currentLabelsRectangles[i].Size = new Size((int)seriesSize.Width, (int)seriesSize.Height); int iconWidth = 18; // Add space for series icon _currentLabelsRectangles[i].Width += iconWidth; if (_labelsFill != null) { g.FillRectangle(_labelsFill, _currentLabelsRectangles[i]); } if (_labelsFont != null) { g.DrawString(_series[i].Name, _labelsFont, _labelsFontBrush, _currentLabelsRectangles[i].X + iconWidth, _currentLabelsRectangles[i].Y); } _series[i].DrawSeriesIcon(g, new Rectangle(_currentLabelsRectangles[i].X + 2, _currentLabelsRectangles[i].Y + 2, 14, _currentLabelsRectangles[i].Height - 4)); } }
protected virtual void DrawPostActualSpaceOverlays(GraphicsWrapper g) { if (_titleFont != null && _titleFontBrush != null) { // Title Rectangle titleRectangle = new Rectangle(_actualDrawingSpaceArea.Left, _actualDrawingSpaceArea.Top, 0, 0); SizeF titleSize = g.MeasureString(_chartName, _titleFont); titleRectangle.Size = new Size((int)titleSize.Width, (int)titleSize.Height); g.DrawString(_chartName, _titleFont, _titleFontBrush, titleRectangle.Location); } if (_actualDrawingSpaceAreaBorderPen != null) { // Border g.DrawRectangle(_actualDrawingSpaceAreaBorderPen, _actualDrawingSpaceArea.X - 1, _actualDrawingSpaceArea.Y - 1, _actualDrawingSpaceArea.Width + 1, _actualDrawingSpaceArea.Height + 1); } }
protected virtual void DrawInitialActualSpaceOverlays(GraphicsWrapper g, ChartSeries timeBasedSeries) { {// X Axis labels. float totalItemWidth = _seriesItemWidth + _seriesItemMargin; float actualXSpacing = _xAxisLabelSpacing * totalItemWidth; if (_considerAxisLabelsSpacingScale) { int xScaling = Math.Abs((int)(1 / _graphicsWrapper.DrawingSpaceTransform.Elements[0])); if (xScaling > 1) { actualXSpacing = actualXSpacing * xScaling; } } // Set starting to the closes compatible positionactualXSpacing // TODO : this can be optimized further by narrowing the range of xStart to end float xStart = (int)(_drawingSpaceDisplayLimit.X / actualXSpacing); xStart = xStart * actualXSpacing; for (float i = xStart; i < _drawingSpaceDisplayLimit.X + _drawingSpaceDisplayLimit.Width; i += actualXSpacing) { PointF point = GraphicsWrapper.DrawingSpaceToActualSpace(new PointF(i, 0), true); if (point.X > _actualDrawingSpaceArea.X - 10 && point.X < _actualDrawingSpaceArea.X + _actualDrawingSpaceArea.Width) { int index = (int)(i / totalItemWidth); string message = string.Empty; if (timeBasedSeries != null) {// If there is a leading dateAssignedSeries show labels based on its timing. if (timeBasedSeries.MaximumIndex > index) { message = GeneralHelper.GetShortDateTime(timeBasedSeries.GetTimeAtIndex(index)); } } else { message = index.ToString(_xAxisLabelsFormat); } if (_axisLabelsFont != null && _xAxisLabelsFontBrush != null) { g.DrawString(message, _axisLabelsFont, _xAxisLabelsFontBrush, point.X, _actualDrawingSpaceArea.Y + _actualDrawingSpaceArea.Height); } // Draw the small line indicating where the string applies for. g.DrawLine(_actualDrawingSpaceAreaBorderPen, point.X, _actualDrawingSpaceArea.Y + _actualDrawingSpaceArea.Height, point.X, _actualDrawingSpaceArea.Y + _actualDrawingSpaceArea.Height + 5); } } } if (_axisLabelsFont != null && _xAxisLabelsFontBrush != null) { _actualDrawingSpaceAreaMarginBottom = 20; } else { _actualDrawingSpaceAreaMarginBottom = 8; } {// Y Axis labels. int? yAxisLabelsWidth = null; float actualYSpacing = _yAxisLabelSpacing; if (_considerAxisLabelsSpacingScale) { int yScaling = Math.Abs((int)(1 / _graphicsWrapper.DrawingSpaceTransform.Elements[3])); if (yScaling > 1) { actualYSpacing = actualYSpacing * yScaling; } } // Set starting to the closes compatible positionactualXSpacing int maxDecimalPlaces = actualYSpacing.ToString().Length - 1; float yStart = (int)(_drawingSpaceDisplayLimit.Y / actualYSpacing); yStart = yStart * actualYSpacing; // Round off to a fixed number of post decimal point digits, will only work for values under 1 yStart = (float)Math.Round(yStart, maxDecimalPlaces); { //float minLabelValue = yStart; //float maxLabelValue = _drawingSpaceDisplayLimit.Y + _drawingSpaceDisplayLimit.Height; // Harry--Modified // This must auto adjust to format the number properly and always fit in 6 spaces. // Specify positive, negative and zero formats. _yAxisLabelsFormat = " #0.#####;-#0.#####; Zero"; //_yAxisLabelsFormat = " #0.##;-#0.##; Zero"; // original //_yAxisLabelsFormat = " #0.#####;-#0.#####; Zero"; //_yAxisLabelsFormat = " 0.000;-0.000;Zero"; // The default is 6 positions total for the y axis labels. yAxisLabelsWidth = ((int)g.MeasureString("00.00000", _axisLabelsFont).Width); //yAxisLabelsWidth = ((int)g.MeasureString("00.00", _axisLabelsFont).Width); } if (yAxisLabelsWidth.HasValue) {// Calculate the current margin and confirm with any controling subscriber. _actualDrawingSpaceAreaMarginLeft = yAxisLabelsWidth.Value + 5; if (ActualDrawingSpaceMarginLeftUpdateEvent != null) { _actualDrawingSpaceAreaMarginLeft = ActualDrawingSpaceMarginLeftUpdateEvent(this, _actualDrawingSpaceAreaMarginLeft); } } // Pass 2 - actually draw the labels and label lines at the established and confirmed location. for (float i = yStart; i < _drawingSpaceDisplayLimit.Y + _drawingSpaceDisplayLimit.Height; i += actualYSpacing) { i = (float)Math.Round(i, maxDecimalPlaces); PointF point = GraphicsWrapper.DrawingSpaceToActualSpace(new PointF(0, i), true); if (point.Y > _actualDrawingSpaceArea.Y && point.Y < _actualDrawingSpaceArea.Y + _actualDrawingSpaceArea.Height) { if (_axisLabelsFont != null && _yAxisLabelsFontBrush != null) { g.DrawString((i).ToString(_yAxisLabelsFormat), _axisLabelsFont, _yAxisLabelsFontBrush, _actualDrawingSpaceAreaMarginLeft - yAxisLabelsWidth.Value - 3, point.Y); } // Draw the small line indicating where the string applies for. g.DrawLine(_actualDrawingSpaceAreaBorderPen, _actualDrawingSpaceAreaMarginLeft - 5, point.Y, _actualDrawingSpaceAreaMarginLeft, point.Y); } } } if (ShowSeriesLabels) { _actualDrawingSpaceAreaMarginTop = 30; } else { _actualDrawingSpaceAreaMarginTop = 5; } UpdateActualDrawingSpaceArea(); // Actual space, drawing area, grid. _actualSpaceGrid.Draw(g, _actualDrawingSpaceArea, _actualDrawingSpaceArea, 1); if (ShowSeriesLabels) { DrawGraphicSeriesLabels(g, _actualDrawingSpaceArea.Left); } // Show if (_customObjectsManager.IsBuildingObject) { g.DrawImageUnscaledAndClipped(_customObjectDrawingImage, new Rectangle(4, (int)LabelsTopMargin, _customObjectDrawingImage.Width, _customObjectDrawingImage.Height)); } }