private void CreateChartEngine() { int iEngineIndex = GlobalSettings.ChartProfile.ChartEngineIndex; __cChart = new ZChart(this.chart, PaintManager.Manager.GetChartEngineInformations()[iEngineIndex]); __cChart.SetChartProperty(__cProfile.ChartProperty); }
public void Action(ChartParameter parameter) { InputDeviceStatus cStatus = parameter.Status; if (cStatus.Event == EInputDeviceEvent.MouseWheel) { MouseEventArgs e = cStatus.GetCurrentMouseArgs(); ZChart cChart = parameter.Chart; AxisX cAxisX = cChart.AxisX; int iCount = cAxisX.BarCount; if (e.Delta < 0) { iCount += ZOOM_SCALE_UNIT; } else { iCount -= ZOOM_SCALE_UNIT; } cAxisX.BarCount = iCount; if (cAxisX.Refresh) { cChart.Refresh(); } } }
internal static AbstractPlot Create(GdiEngine engine, ZChart chart, object source, ChartSetting chartSetting) { AbstractPlot cPlot = null; EChartType cChartType = chartSetting.ChartType; switch (cChartType) { case EChartType.Candlestick: cPlot = new PlotCandlestick(engine, source, chartSetting); break; case EChartType.HLC: cPlot = new PlotHlc(engine, source, chartSetting); break; case EChartType.OHLC: cPlot = new PlotOhlc(engine, source, chartSetting); break; case EChartType.ClosingLine: cPlot = new PlotClosingLine(engine, source, chartSetting); break; case EChartType.TextObject: cPlot = new PlotTextObject(engine, chart, source, chartSetting); break; case EChartType.TradeObject: cPlot = new PlotTradeObject(engine, source, chartSetting); break; } return(cPlot); }
public MeasuresChartPanel() { fChart = new ZChart(); fChart.Dock = DockStyle.Fill; Controls.Add(fChart); fSelectedAquarium = "*"; }
internal Behavior(ZChart chart, Control context, InputDeviceStatus status) { __cDrawContainer = new DrawContainer(); __cParameter = new ChartParameter(chart, context, this, status); __cActions = new List <IAction>(8); __cActions.Add(new Resize()); __cActions.Add(new Move()); __cActions.Add(new Zoom()); }
internal PlotTextObject(GdiEngine engine, ZChart chart, object source, ChartSetting chartSetting) : base(engine, chartSetting) { __cGDI = engine.GDI; __cTextObjects = source as TextContainer; __cTextObjects.SetChartProperty(chart.ChartProperty); __cLayers = new List <Layer>(8); __cObjects = new Dictionary <int, Queue <TextObject> >(8); __cLayers = chart.Layers; }
public void Action(ChartParameter parameter) { ZChart cChart = parameter.Chart; InputDeviceStatus cStatus = parameter.Status; MouseEventArgs e = cStatus.GetCurrentMouseArgs(); if (cStatus.Event == EInputDeviceEvent.MouseUp) { if (__cStart == Point.Empty) { List <Layer> cLayers = cChart.Layers; int iCount = cLayers.Count; for (int i = 0; i < iCount; i++) { Layer cLayer = cLayers[i]; if (cLayer.IsLayerScope(e.X, e.Y)) { __cLayer = cLayer; break; } } __cStart = e.Location; } else { Point cEnd = e.Location; Boundary.BoundFix(ref __cStart, ref cEnd, new Rectangle4(__cLayer.LayerRectangleWithoutAxisY)); //保存至使用者繪製容器內 parameter.Behavior.DrawContainer.AddDrawObject(__sName, __cLayer, new Point[] { __cStart, cEnd }, new PowerLanguage.PenStyle[] { parameter.CustomPen }); __cStart = Point.Empty; parameter.CustomPainter = null; //繪圖完畢需要設定為 null __cGDI.ClearRops(__cLineInfos, null, false); cChart.Refresh(); } } else if (__cStart != Point.Empty && cStatus.Event == EInputDeviceEvent.MouseMove) { __cGDI.SaveDC(); __cGDI.ClipRectangle(__cLayer.LayerRectangleWithoutAxisY); __cGDI.ClearRops(__cLineInfos, null, !parameter.Updated); ChartProperty cProperty = cChart.ChartProperty; IntPtr cPen = Gdi.CreatePen(new PowerLanguage.PenStyle(cProperty.DrawAideLineColor, 1)); __cLineInfos.Add(__cGDI.DrawRopLine(cPen, __cStart.X, __cStart.Y, e.X, e.Y)); __cGDI.RestoreDC(); } }
public void Action(ChartParameter parameter) { InputDeviceStatus cStatus = parameter.Status; if (cStatus.IsDrag && cStatus.Event == EInputDeviceEvent.MouseMove) { MouseEventArgs e = cStatus.GetCurrentMouseArgs(); if (e.Button == MouseButtons.Left) { ZChart cChart = parameter.Chart; AxisX cAxisX = cChart.AxisX; double dUnit = cAxisX.AxisRectangle.Width / (double)cAxisX.BarCount; int iOffset = (int)((__iMouseX - e.X) / dUnit); cAxisX.BarNumber = __iInitBarNumber + iOffset; if (cAxisX.Refresh) { cChart.Refresh(); } } } else if (!cStatus.IsDrag && cStatus.Event == EInputDeviceEvent.MouseDown) { MouseEventArgs e = cStatus.GetCurrentMouseArgs(); if (e.Button == MouseButtons.Left) { parameter.IsAction = true; parameter.Context.Cursor = Cursors.SizeWE; __iMouseX = cStatus.GetCurrentMouseArgs().X; __iInitBarNumber = parameter.Chart.AxisX.BarNumber; } } else if (cStatus.Event == EInputDeviceEvent.MouseUp) { parameter.IsAction = false; parameter.Context.Cursor = Cursors.Default; } }
internal void DrawObjects() { ZChart cChart = __cParameter.Chart; AxisX cAxisX = cChart.AxisX; int iEndNumber = cAxisX.BarNumber + cAxisX.BarCount - 1; HashSet <DrawObject> cObjects = __cDrawContainer.GetDrawObjects(cAxisX.BarNumber, iEndNumber); foreach (DrawObject cObject in cObjects) { if (cObject.Exist) { IDrawable cDrawable = GetCustomAction(cObject.Name) as IDrawable; if (cDrawable != null) { if (cObject.LayerIndex < cChart.Layers.Count) { cDrawable.DrawObject(cChart.Layers[cObject.LayerIndex], cObject); } } } } }
private IList <ChartPoint> GetChartData(BudgetChartType chartType, TransferType transferType = TransferType.Purchase) { Dictionary <string, ChartPoint> result = new Dictionary <string, ChartPoint>(); IList <Brand> brandRecords = null; if (chartType == BudgetChartType.Countries) { brandRecords = fModel.QueryBrands(); } var records = fModel.QueryTransferExpenses(); foreach (Transfer rec in records) { if (rec.Type != transferType) { continue; } int factor = +1; if (chartType == BudgetChartType.Monthes) { switch (rec.Type) { case TransferType.Purchase: factor = -1; break; case TransferType.Sale: factor = +1; break; } } double trnSum = (rec.Quantity * rec.UnitPrice) * factor; if (trnSum == 0.0d) { continue; } var itemRec = fModel.GetRecord(rec.ItemType, rec.ItemId); var ts = rec.Timestamp; string key; switch (chartType) { case BudgetChartType.ItemTypes: Inventory inventRec = itemRec as Inventory; ItemType itType = (inventRec != null) ? ALCore.GetItemType(inventRec.Type) : rec.ItemType; key = Localizer.LS(ALData.ItemTypes[(int)itType].Name); break; case BudgetChartType.Shops: key = rec.Shop; break; case BudgetChartType.Brands: var brandedItem = itemRec as IBrandedItem; key = (brandedItem == null) ? "-" : brandedItem.Brand; break; case BudgetChartType.Countries: var brandedItem2 = itemRec as IBrandedItem; var brand = (brandedItem2 == null) ? "-" : brandedItem2.Brand; var brandRec = brandRecords.FirstOrDefault(p => p.Name == brand); key = (brandRec == null) ? "-" : brandRec.Country; break; case BudgetChartType.Monthes: key = string.Format("{0}/{1}", ts.Month, ts.Year); break; default: key = ""; break; } if (string.IsNullOrEmpty(key)) { key = "-"; } ChartPoint chartPoint; if (result.TryGetValue(key, out chartPoint)) { chartPoint.Value += trnSum; result[key] = chartPoint; } else { chartPoint = new ChartPoint(key, trnSum); if (chartType == BudgetChartType.Monthes) { int days = DateHelper.DaysInMonth((short)ts.Year, (byte)ts.Month); chartPoint.Timestamp = new DateTime(ts.Year, ts.Month, days); } result.Add(key, chartPoint); } } List <ChartPoint> vals = result.Values.ToList(); if (chartType != BudgetChartType.Monthes) { vals = ZChart.Consolidation(vals, 0.5d); // prettification vals = ZChart.AlternateSort(vals); } return(vals); }
/// <summary> /// 取得 Plot 物件 /// </summary> /// <param name="chart">ZChart 圖表類別</param> /// <param name="source">資料來源</param> /// <param name="chartType">圖表類型</param> /// <returns>回傳值: AbstractPlot 抽象類別</returns> public override AbstractPlot GetPlot(ZChart chart, object source, ChartSetting chartSetting) { return(PlotEngine.Create(this, chart, source, chartSetting)); }
public ChartPanel() { fChart = new ZChart(); fChart.Dock = DockStyle.Fill; Controls.Add(fChart); }
public frmChart() { InitializeComponent(); __cChart = new ZChart(chart, PaintManager.Manager.GetChartEngineInformations()[0]); }
public void Action(ChartParameter parameter) { __cGDI.ClearRops(true); __cGDI.ClearRops(__cLineInfos, __cTextInfos, !parameter.Updated); InputDeviceStatus cStatus = parameter.Status; if (cStatus.Event == EInputDeviceEvent.MouseMove) { ZChart cChart = parameter.Chart; AxisX cAxisX = cChart.AxisX; ChartProperty cProperty = cChart.ChartProperty; MouseEventArgs e = cStatus.GetCurrentMouseArgs(); int iOldBKColor = __cGDI.SelectBackground(cProperty.BackgroundColor); IntPtr cOldFont = __cGDI.SelectFont(cProperty.AxisFont); IntPtr cPen = Gdi.CreatePen(new PowerLanguage.PenStyle(cProperty.ForeColor, 1)); int iBarNumber = cAxisX.ConvertBarNumberFromX(e.X); if (iBarNumber > cAxisX.DataCount) { return; } else { Rectangle cAxisXRect = cAxisX.AxisRectangle; AxisXUnit cUnit = cAxisX.ConvertBarNumberToWidth(iBarNumber); cAxisXRect.X = cUnit.CenterPoint; cAxisXRect.Width = cAxisX.FontMetrics.Width * 12; DateTime cDateTime = cAxisX.ConvertBarNumberToTime(iBarNumber); __cLineInfos.Add(__cGDI.DrawRopLine(cPen, cUnit.CenterPoint, 0, cUnit.CenterPoint, cAxisXRect.Y)); __cTextInfos.Add(__cGDI.DrawRopString(cDateTime.ToString("MM/dd HH:mm"), cProperty.BackgroundColor, cProperty.ForeColor, 2, 5, cAxisXRect)); } List <Layer> cLayers = cChart.Layers; int iCount = cLayers.Count; for (int i = 0; i < iCount; i++) { Layer cLayer = cLayers[i]; if (__cLineInfos.Count == 1 && cLayer.IsLayerScope(e.X, e.Y)) { AxisY cAxisY = cLayer.AxisY; Rectangle cAxisYRect = cAxisY.AxisRectangle; cAxisYRect.Y = e.Y; cAxisYRect.Height = cAxisY.FontMetrics.Height; __cLineInfos.Add(__cGDI.DrawRopLine(cPen, 0, e.Y, cAxisYRect.X, e.Y)); __cTextInfos.Add(__cGDI.DrawRopString(Math.Round(cAxisY.ConvertValueFromY(e.Y), cAxisY.Decimals).ToString(), cProperty.BackgroundColor, cProperty.ForeColor, 5, 0, cAxisYRect)); } cLayer.LegendIndex = iBarNumber; __cEngine.DrawLegend(cLayer, cProperty); } __cGDI.RemoveObject(__cGDI.SelectFont(cOldFont)); __cGDI.SelectBackground(iOldBKColor); } //如果使用者使用十字線功能, 如果有在選擇繪圖功能會在 CustomPainter 屬性儲存繪圖功能的類別名稱 //如果有繪圖類別名稱就取出使用 string sName = parameter.CustomPainter; if (__cCustomPainter == null && sName != null) { __cCustomPainter = parameter.Behavior.GetCustomAction(sName); if (__cCustomPainter == null || !(__cCustomPainter is IDrawable)) { parameter.CustomPainter = null; } } if (__cCustomPainter != null) { __cCustomPainter.Action(parameter); //如果繪圖類別名稱 == null 表示繪圖已經完畢 if (parameter.CustomPainter == null) { __cCustomPainter = null; } } }
public void Action(ChartParameter parameter) { InputDeviceStatus cStatus = parameter.Status; if (cStatus.Event == EInputDeviceEvent.MouseMove) { MouseEventArgs e = cStatus.GetCurrentMouseArgs(); if (cStatus.IsDrag && e.Button == MouseButtons.Left) { int iOffset = e.Y - __iMouseY; ZChart cChart = parameter.Chart; List <Layer> cLayers = cChart.Layers; Layer cLayer = cLayers[__iLayerIndex]; //如果 Layers 只有一個就不需要計算鄰近的 Layer 的相對高度 if (cLayers.Count > 1) { double dScale = (__dLayerHeight + iOffset) / cChart.ChartRectangle.Height; cLayers[__iLayerIndex + 1].HeightScale += cLayer.HeightScale - dScale; cLayer.HeightScale = dScale; cChart.Resize(); cChart.Refresh(); } } else { ZChart cChart = parameter.Chart; List <Layer> cLayers = cChart.Layers; int iCount = cLayers.Count - 1; for (int i = 0; i < iCount; i++) { Layer cLayer = cLayers[i]; if (cLayer.IsLayerScope(e.X, e.Y)) { Rectangle cRect = cLayer.LayerRectangle; int iMaxBottom = cRect.Y + cRect.Height; int iMinBottom = iMaxBottom - 5; if (e.Y >= iMinBottom && e.Y <= iMaxBottom) { __bResize = true; __iLayerIndex = i; __dLayerHeight = cRect.Height; parameter.Context.Cursor = Cursors.SizeNS; return; } } } __bResize = false; parameter.Context.Cursor = Cursors.Default; } } else if (__bResize && !cStatus.IsDrag && cStatus.Event == EInputDeviceEvent.MouseDown) { parameter.IsAction = true; __iMouseY = cStatus.GetCurrentMouseArgs().Y; } else if (cStatus.Event == EInputDeviceEvent.MouseUp) { __bResize = false; parameter.IsAction = false; parameter.Context.Cursor = Cursors.Default; } }