From 262711208aac63909cf76dfeaa3af2793533ba1c Mon Sep 17 00:00:00 2001 From: haru-s Date: Sun, 7 Apr 2024 00:32:59 +0900 Subject: [PATCH] Add dfl.chart.LineGraphRenderer Update TableRenderer --- README.md | 7 +- examples/linegraphrenderer/.gitignore | 16 + .../linegraphrenderer/.vscode/launch.json | 13 + examples/linegraphrenderer/.vscode/tasks.json | 20 + examples/linegraphrenderer/README.md | 2 + examples/linegraphrenderer/dub.json | 16 + .../linegraphrenderer/image/screenshot.png | Bin 0 -> 125663 bytes .../linegraphrenderer.code-workspace | 12 + examples/linegraphrenderer/shell.bat | 3 + .../source/linegraphrenderer_sample.d | 111 +++ examples/tablerenderer/image/screenshot.png | Bin 17742 -> 16691 bytes .../source/tablerenderer_sample.d | 18 +- source/dfl/chart.d | 647 +++++++++++++++++- 13 files changed, 829 insertions(+), 36 deletions(-) create mode 100644 examples/linegraphrenderer/.gitignore create mode 100644 examples/linegraphrenderer/.vscode/launch.json create mode 100644 examples/linegraphrenderer/.vscode/tasks.json create mode 100644 examples/linegraphrenderer/README.md create mode 100644 examples/linegraphrenderer/dub.json create mode 100644 examples/linegraphrenderer/image/screenshot.png create mode 100644 examples/linegraphrenderer/linegraphrenderer.code-workspace create mode 100644 examples/linegraphrenderer/shell.bat create mode 100644 examples/linegraphrenderer/source/linegraphrenderer_sample.d diff --git a/README.md b/README.md index 98c8f43..ec481fa 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,10 @@ DFL is a Win32 windowing library for the D language. ## Recent major features - **Module "dfl.chart" is now comming.** - - **TableRenderer (with example)** - - ~LineGraphRenderer~ + - TableRenderer (with example) + - **LineGraphRenderer (with example)** - ~TimeChartRenderer~ -- **Add simple clock "Dclock" as an example of DFL application.** +- Add simple clock "Dclock" as an example of DFL application. - Module "dfl.printing" is now comming. - PrintDialog - PrintSetupDialog @@ -40,6 +40,7 @@ DFL is a Win32 windowing library for the D language. ![screen shot](./examples/richtextbox/image/screenshot.png "screen shot") ![screen shot](./examples/dclock/image/screenshot.png "screen shot") ![screen shot](./examples/tablerenderer/image/screenshot.png "screen shot") +![screen shot](./examples/linegraphrenderer/image/screenshot.png "screen shot") ## Build and Install (dfl.lib and dfl_debug.lib) ### 1. Set environment variables diff --git a/examples/linegraphrenderer/.gitignore b/examples/linegraphrenderer/.gitignore new file mode 100644 index 0000000..60a5f2a --- /dev/null +++ b/examples/linegraphrenderer/.gitignore @@ -0,0 +1,16 @@ +.dub +docs.json +__dummy.html +docs/ +/hello_dfl +hello_dfl.so +hello_dfl.dylib +hello_dfl.dll +hello_dfl.a +hello_dfl.lib +hello_dfl-test-* +*.exe +*.pdb +*.o +*.obj +*.lst diff --git a/examples/linegraphrenderer/.vscode/launch.json b/examples/linegraphrenderer/.vscode/launch.json new file mode 100644 index 0000000..e6e878e --- /dev/null +++ b/examples/linegraphrenderer/.vscode/launch.json @@ -0,0 +1,13 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "C++ Launch (Windows) linegraphrenderer", + "type": "cppvsdbg", + "request": "launch", + "cwd": "${workspaceRoot}", + "program": "./bin/linegraphrenderer.exe", + "console": "internalConsole" + } + ] +} \ No newline at end of file diff --git a/examples/linegraphrenderer/.vscode/tasks.json b/examples/linegraphrenderer/.vscode/tasks.json new file mode 100644 index 0000000..d571fe2 --- /dev/null +++ b/examples/linegraphrenderer/.vscode/tasks.json @@ -0,0 +1,20 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "dub", + "run": false, + "cwd": ".", + "compiler": "$current", + "archType": "$current", + "buildType": "$current", + "configuration": "$current", + "problemMatcher": [ + "$dmd" + ], + "group": "build", + "label": "dub: Build linegraphrenderer_sample", + "detail": "dub build --compiler=dmd.EXE -a=x86_64 -b=debug -c=application" + } + ] +} \ No newline at end of file diff --git a/examples/linegraphrenderer/README.md b/examples/linegraphrenderer/README.md new file mode 100644 index 0000000..b1a86ca --- /dev/null +++ b/examples/linegraphrenderer/README.md @@ -0,0 +1,2 @@ +# Screen Shot +![screen shot](./image/screenshot.png "screen shot") diff --git a/examples/linegraphrenderer/dub.json b/examples/linegraphrenderer/dub.json new file mode 100644 index 0000000..b09eec4 --- /dev/null +++ b/examples/linegraphrenderer/dub.json @@ -0,0 +1,16 @@ +{ + "authors": ["haru-s"], + "copyright": "Copyright (C) 2024 haru-s", + "description": "DFL sample code.", + "name": "linegraphrenderer", + "targetType": "executable", + "targetPath": "bin", + "dependencies": { + "dfl": { + "path": "../../../dfl" + } + }, + "lflags-windows-x86_omf-dmd": ["/exet:nt/su:windows:6.0"], + "lflags-windows-x86_mscoff-dmd": ["/SUBSYSTEM:WINDOWS", "/ENTRY:mainCRTStartup"], + "lflags-windows-x86_64-dmd": ["/SUBSYSTEM:WINDOWS", "/ENTRY:mainCRTStartup"] +} \ No newline at end of file diff --git a/examples/linegraphrenderer/image/screenshot.png b/examples/linegraphrenderer/image/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4852ed9f7aac5d320b74f59b3981a01b120703 GIT binary patch literal 125663 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 G5C0AEC^7W_ literal 0 HcmV?d00001 diff --git a/examples/linegraphrenderer/linegraphrenderer.code-workspace b/examples/linegraphrenderer/linegraphrenderer.code-workspace new file mode 100644 index 0000000..7e696bc --- /dev/null +++ b/examples/linegraphrenderer/linegraphrenderer.code-workspace @@ -0,0 +1,12 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": { + "d.projectImportPaths": [ + "..\\..\\..\\dfl\\source" + ] + } +} \ No newline at end of file diff --git a/examples/linegraphrenderer/shell.bat b/examples/linegraphrenderer/shell.bat new file mode 100644 index 0000000..49ab56b --- /dev/null +++ b/examples/linegraphrenderer/shell.bat @@ -0,0 +1,3 @@ +set dmd_path=c:\d\dmd2\windows +set dmc_path=c:\dmc\dm +cmd diff --git a/examples/linegraphrenderer/source/linegraphrenderer_sample.d b/examples/linegraphrenderer/source/linegraphrenderer_sample.d new file mode 100644 index 0000000..6f0073c --- /dev/null +++ b/examples/linegraphrenderer/source/linegraphrenderer_sample.d @@ -0,0 +1,111 @@ +import dfl; + +version(Have_dfl) // For DUB. +{ +} +else +{ + pragma(lib, "dfl.lib"); +} + +class MainForm : Form +{ + alias CustomLineGraphRenderer = LineGraphRenderer!(string,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int); + CustomLineGraphRenderer _graph; + + alias CustomLineGraphRenderer2 = LineGraphRenderer!(int,int,int); + CustomLineGraphRenderer2 _graph2; + + // alias CustomTableRenderer = TableRenderer!(string,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int); + // CustomTableRenderer _table; + + // alias CustomTableRenderer2 = TableRenderer!(int,int,int); + // CustomTableRenderer2 _table2; + + public this() + { + this.text = "LineGraphRenderer example"; + this.size = Size(1000, 800); + string csv = + "教科,山田,佐藤,井上,田中,木下,藤原,山本,大森,伊藤,高橋,鈴木,中村,小林,松井,木村,近藤\n" ~ + "国語,70,80,80,75,68,65,55,48,45,38,35,25,20,10,5,1\n" ~ + "算数,60,90,80,75,68,65,55,48,45,38,35,25,20,10,5,1\n" ~ + "理科,80,70,80,75,68,65,55,48,45,38,35,25,20,10,5,1\n" ~ + "社会,90,60,80,75,68,65,55,48,45,38,35,25,20,10,5,1\n"; + _graph = new CustomLineGraphRenderer(csv, 4); + _graph.showLegend = true; + _graph.legendLineHeight = 18; + _graph.chartMargins = ChartMargins(50, 50, 50, 50); + _graph.plotPointSize = 10; + _graph.verticalZeroPosition = VerticalZeroPosition.BOTTOM; + _graph.plotAreaAndLegendSpanX = 50; + _graph.plotAreaAndHorizontalScaleSpanY = 10; + _graph.plotAreaLeftPadding = 20; + _graph.plotAreaRightPadding = 20; + _graph.plotAreaHeightOnDisplay = 300; + _graph.hasHorizontalScale = true; + _graph.horizontalScaleSpan = 100; + _graph.horizonScaleLineInnerSide = 0; + _graph.horizonScaleLineOuterSide = 5; + _graph.horizontalScaleHeight = 12; + _graph.hasVerticalScale = true; + _graph.verticalMaxScale = 110; + _graph.verticalScaleLineOuterSide = 5; + _graph.verticalScaleLineInnerSide = 0; + _graph.verticalScaleSpan = 20; + _graph.verticalScaleWidth = 40; + _graph.backColor = Color.white; + _graph.plotAreaBoundsColor = Color.black; + _graph.plotLineColorPalette[0] = Color.black; + _graph.plotPointFormList[4..8] = PlotPointForm.CROSS; + _graph.plotPointFormList[8..12] = PlotPointForm.RECTANGLE; + _graph.plotPointFormList[12..16] = PlotPointForm.TRIANGLE; + _graph.relocate = Point(50, 50); // Relocate origin point based on top-left margins. + + string csv2 = + "A,B,C\n" ~ + "70,80,80\n" ~ + "60,90,80\n" ~ + "80,70,80\n" ~ + "90,60,80\n"; + _graph2 = new CustomLineGraphRenderer2(csv2, 4); + _graph2.chartMargins = ChartMargins(10, 10, 10, 10); + _graph2.relocate = Point(600, 50); + + // _table = new CustomTableRenderer(csv, 4); + // _table.location = Point(50, 500); + // _table.hasHeader = true; + // _table.showHeader = true; + // _table.headerLine = true; + // _table.width[] = 40; + + // _table2 = new CustomTableRenderer2(csv2, 4); + // _table2.hasHeader = true; + // _table2.showHeader = true; + // _table2.headerLine = true; + // _table2.width[] = 40; + // _table2.location = Point(680, 200); + } + + protected override void onPaint(PaintEventArgs e) + { + if (_graph) + _graph.draw(e.graphics); + if (_graph2) + _graph2.draw(e.graphics); + // if (_table) + // _table.draw(e.graphics); + // if (_table2) + // _table2.draw(e.graphics); + } +} + +static this() +{ + Application.enableVisualStyles(); +} + +void main() +{ + Application.run(new MainForm()); +} diff --git a/examples/tablerenderer/image/screenshot.png b/examples/tablerenderer/image/screenshot.png index e1bdb7a07bbee4e9628b01613b6a73d42598d228..a978a2be854d851c3fa90be48a03559212bd181a 100644 GIT binary patch literal 16691 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 R??8bV=$L31UAy)0{{j3iA+P`d diff --git a/examples/tablerenderer/source/tablerenderer_sample.d b/examples/tablerenderer/source/tablerenderer_sample.d index fd9fe0e..4e54cbf 100644 --- a/examples/tablerenderer/source/tablerenderer_sample.d +++ b/examples/tablerenderer/source/tablerenderer_sample.d @@ -10,7 +10,7 @@ else class MainForm : Form { - alias CustomTableRenderer = TableRenderer!(string, string, string); + alias CustomTableRenderer = TableRenderer!(string, int, int); CustomTableRenderer _table; public this() @@ -18,19 +18,17 @@ class MainForm : Form this.text = "TableRenderer example"; this.size = Size(450, 450); string csv = - "ID,Name,Value\n" ~ - "1,Kyoto,100\n" ~ - "2,Osaka,50\n" ~ - "3,Tokyo,20\n" ~ - "4,Aomori,10\n"; + "教科,大森,山田\n" ~ + "国語,95,98\n" ~ + "理科,75,80\n" ~ + "算数,90,78\n" ~ + "社会,80,76\n"; _table = new CustomTableRenderer(csv); _table.height = 40; - _table.width[0] = 50; - _table.width[1] = 80; - _table.width[2] = 150; + _table.width[] = 80; _table.paddingX = 10; _table.paddingY = 12; - _table.margin = Point(20, 20); + _table.location = Point(20, 20); _table.hasHeader = true; // true : 1st line is header. _table.showHeader = true; _table.firstRecord = 0; diff --git a/source/dfl/chart.d b/source/dfl/chart.d index bad57b7..746b68c 100644 --- a/source/dfl/chart.d +++ b/source/dfl/chart.d @@ -12,6 +12,7 @@ private import std.csv; private import std.typecons; private import std.conv; private import std.algorithm; +private import std.range; /// class TableRenderer(T...) @@ -22,7 +23,14 @@ class TableRenderer(T...) enum DEFAULT_PADDING_Y = 5; /// /// - this(string csv) + this(string csv, int numRecords) + { + this(csv); + _firstRecord = 0; + _lastRecord = numRecords - 1; + } + /// ditto + this(string csv) // deprecated { _csv = csv; _columns = T.length; @@ -47,10 +55,10 @@ class TableRenderer(T...) g.fillRectangle(new SolidBrush(_backColor), bounds); // Draw top side line. if (_topSideLine) - g.drawLine(new Pen(_lineColor), Point(margin.x, margin.y), Point(bounds.right, margin.y)); + g.drawLine(new Pen(_lineColor), Point(location.x, location.y), Point(bounds.right, location.y)); // Draw header line. if (_showHeader && _hasHeader && _headerLine) - g.drawLine(new Pen(_lineColor), Point(margin.x, margin.y + height), Point(bounds.right, margin.y + height)); + g.drawLine(new Pen(_lineColor), Point(location.x, location.y + height), Point(bounds.right, location.y + height)); // Draw header. int row; // -row- is line number in CSV. int viewLine; // -viewLine- is line number on display. @@ -58,10 +66,10 @@ class TableRenderer(T...) { if (_showHeader) { - int y = margin.y + viewLine * height + _paddingY; + int y = location.y + viewLine * height + _paddingY; foreach (col, value; csvReader!(Tuple!T)(_csv, null).header) { - int x = margin.x + sum(_width[0..col]) + _paddingX; + int x = location.x + sum(_width[0..col]) + _paddingX; g.drawText(to!string(value), _headerFont, _textColor, Rect(x, y, _width[col] - _paddingX, _height - _paddingY), _headerTextFormat); } row++; @@ -79,17 +87,17 @@ class TableRenderer(T...) int rows = (_hasHeader?1:0) + lastRecord - firstRecord + 1; if (firstRecord + (_hasHeader?1:0) <= row && row <= rows) { - int y = margin.y + viewLine * height + _paddingY; + int y = location.y + viewLine * height + _paddingY; foreach (int col, value; record) { - int x = margin.x + sum(_width[0..col]) + _paddingX; + int x = location.x + sum(_width[0..col]) + _paddingX; g.drawText(to!string(value), _recordFont, _textColor, Rect(x, y, _width[col] - _paddingX, _height - _paddingY), _recordTextFormat); } // Draw horizontal line. if (_horizontalLine && viewLine < lastRecord - firstRecord + (_showHeader?1:0)) { - int y2 = margin.y + height * (viewLine + 1); - g.drawLine(new Pen(_lineColor), Point(margin.x, y2), Point(bounds.right, y2)); + int y2 = location.y + height * (viewLine + 1); + g.drawLine(new Pen(_lineColor), Point(location.x, y2), Point(bounds.right, y2)); } row++; viewLine++; @@ -102,22 +110,22 @@ class TableRenderer(T...) } // Draw left side line. if (_leftSideLine) - g.drawLine(new Pen(_lineColor), Point(margin.x, margin.y), Point(margin.x, margin.y + height * viewLine)); + g.drawLine(new Pen(_lineColor), Point(location.x, location.y), Point(location.x, location.y + height * viewLine)); // Draw right side line. if (_rightSideLine) - g.drawLine(new Pen(_lineColor), Point(bounds.right, margin.y), Point(bounds.right, margin.y + height * viewLine)); + g.drawLine(new Pen(_lineColor), Point(bounds.right, location.y), Point(bounds.right, location.y + height * viewLine)); // Draw vertical line. if (_verticalLine) { for (int i; i < _columns - 1; i++) { int w = sum(_width[0..i+1]); - g.drawLine(new Pen(_lineColor), Point(margin.x + w, margin.y), Point(margin.x + w, margin.y + height * viewLine)); + g.drawLine(new Pen(_lineColor), Point(location.x + w, location.y), Point(location.x + w, location.y + height * viewLine)); } } // Draw bottom side line. if (_bottomSideLine) - g.drawLine(new Pen(_lineColor), Point(margin.x, margin.y + height * viewLine), Point(bounds.right, margin.y + height * viewLine)); + g.drawLine(new Pen(_lineColor), Point(location.x, location.y + height * viewLine), Point(bounds.right, location.y + height * viewLine)); } /// @@ -180,19 +188,28 @@ class TableRenderer(T...) Rect bounds() const { int rows = (_showHeader?1:0) + lastRecord - firstRecord + 1; - return Rect(_margin.x, _margin.y, sum(_width), height * rows); + return Rect(_location.x, _location.y, sum(_width), height * rows); } - /// Left and Top margins. - void margin(Point pt) + /// Left and Top point. + void location(Point pt) { - _margin.x = pt.x; - _margin.y = pt.y; + _location = pt; } /// ditto - Point margin() const + Point location() const { - return _margin; + return _location; + } + /// ditto + deprecated void margin(Point pt) + { + location = pt; + } + /// ditto + deprecated Point margin() + { + return location; } /// @@ -250,16 +267,26 @@ class TableRenderer(T...) struct WidthObject // Internal struct. { /// - this(ref int[] w) + this(int[] w) { _arr = w; } - /// + /// Assign operator forwarding. + void opIndexAssign(int value) + { + _arr[] = value; + } + /// ditto void opIndexAssign(int value, size_t i) { _arr[i] = value; } + /// ditto + void opSliceAssign(int value, size_t i, size_t j) + { + _arr[i..j] = value; + } /// int opIndex(size_t i) @@ -321,7 +348,7 @@ class TableRenderer(T...) private: string _csv; - Point _margin; + Point _location; int _paddingX; int _paddingY; int _columns; @@ -346,3 +373,577 @@ private: TextFormat _headerTextFormat; TextFormat _recordTextFormat; } + +/// +class LineGraphRenderer(T...) + if (is(T[0] == string) && T.length <= 17 || !is(T[0] == string) && T.length <= 16) // Supported number of colors is 16. +{ + /// + this(string csv, int numRecords) + { + this(csv); + _firstRecord = 0; + _lastRecord = numRecords - 1; + } + /// ditto + this(string csv) // deprecated + { + _csv = csv; + _vZeroPos = VerticalZeroPosition.BOTTOM; + _chartMargins = ChartMargins(50, 50, 50, 50); + _backColor = Color.white; + _plotAreaBoundsColor = Color.black; + _plotAreaHeightOnDisplay = 100; + _plotAreaLeftPadding = 20; + _plotAreaRightPadding = 20; + _plotAreaAndLegendSpanX = 50; + _plotAreaAndHorizontalScaleSpanY = 10; + _plotPointSize = 10; + _plotLineColorPalette = [ + Color.black, // 0 + Color.blue, // 1 + Color.red, // 2 + Color.purple, // 3 + Color.yellowGreen, // 4 + Color.lightBlue, // 5 + Color(0xFF,0xC2,0x0E), // 6: Use Himawari color as yellow. + Color.lightGray, // 7 + Color.black, // 8 + Color.darkBlue, // 9 + Color.darkRed, // 10 + Color.mediumPurple, // 11 + Color.darkGreen, // 12 + Color.darkSeaGreen, // 13 + Color.darkOrange, // 14 + Color.darkGray // 15 + ]; + for (int i; i < T.length; i++) + { + _plotPointFormList ~= PlotPointForm.CIRCLE; + } + _legendWidth = 100; + _legendLineHeight = 18; + _hasVerticalScale = false; + _verticalScaleWidth = 40; + _verticalMaxScale = 100; + _verticalScaleLineOuterSide = 5; + _verticalScaleLineInnerSide = 5; + _hasHorizontalScale = false; + _horizontalScaleSpan = 50; + _horizonScaleLineInnerSide = 5; + _horizonScaleLineOuterSide = 5; + _horizontalScaleHeight = 25; + } + + /// Draw records. + void draw(Graphics g) + { + // Draw background. + Rect backgroundRect = Rect( + plotAreaBounds.x - _chartMargins.left, + plotAreaBounds.y - _chartMargins.top, + plotAreaBounds.width + _chartMargins.left + _chartMargins.right, + plotAreaBounds.height + _chartMargins.top + _chartMargins.bottom + ); + if (_showLegend) + { + backgroundRect.width = plotAreaBounds.width + _chartMargins.left + _legendWidth + _chartMargins.right; + int legendBottom = _chartMargins.top + _legendLineHeight * (1 + cast(int)T.length) + _chartMargins.bottom; + if (legendBottom > backgroundRect.bottom) + backgroundRect.height = legendBottom; + } + if (_hasVerticalScale) + { + backgroundRect.x = plotAreaBounds.x - _chartMargins.left - _verticalScaleWidth, + backgroundRect.width = plotAreaBounds.width + _chartMargins.left + _legendWidth + _chartMargins.right + _verticalScaleWidth; + } + if (_hasHorizontalScale) + { + backgroundRect.height += _horizontalScaleHeight + _plotAreaAndHorizontalScaleSpanY; + } + g.fillRectangle(new SolidBrush(_backColor), backgroundRect); + // Draw bounds of plot area. + g.drawRectangle(new Pen(_plotAreaBoundsColor), plotAreaBounds); + // Draw vertical scale. + int baseY = (_vZeroPos == VerticalZeroPosition.BOTTOM ? 0: _plotAreaHeightOnDisplay); + double vRatio = cast(double)_plotAreaHeightOnDisplay / _verticalMaxScale; + if (_hasVerticalScale) + { + enum LINE_HEIGHT = 12f; + auto scaleList = iota(0, _verticalMaxScale, _verticalScaleSpan); + Font f = new Font("MS Gothic", LINE_HEIGHT); + int x = _originPoint.x - _verticalScaleWidth; + int index; + foreach (s; scaleList) + { + int y = cast(int)(baseY + _originPoint.y - LINE_HEIGHT / 2 + index * vRatio * _verticalScaleSpan * (_vZeroPos == VerticalZeroPosition.BOTTOM ? -1: 1)); + // Draw vertical scalse label. + g.drawText(to!string(index * _verticalScaleSpan), f, Color.black, Rect(x, y, 100, 100)); + // Draw vertical scalse line. + g.drawLine( + new Pen(_plotAreaBoundsColor), + _originPoint.x - _verticalScaleLineOuterSide, + cast(int)(y + LINE_HEIGHT / 2 + (_vZeroPos == VerticalZeroPosition.BOTTOM ? -1: 0)), + _originPoint.x + _verticalScaleLineInnerSide, + cast(int)(y + LINE_HEIGHT / 2 + (_vZeroPos == VerticalZeroPosition.BOTTOM ? -1: 0)) + ); + index++; + } + } + // Draw horizontal scale. + if (_hasHorizontalScale) + { + // Draw horizontal scale label. + static if (is(T[0] == string)) + {{ + int i; + foreach (label; csvReader!(Tuple!T)(_csv, null)) + { + int x = _originPoint.x + _plotAreaLeftPadding + i * _horizontalScaleSpan - cast(int)_horizontalScaleHeight; + int y = baseY + _originPoint.y + (_vZeroPos == VerticalZeroPosition.BOTTOM ? _plotAreaAndHorizontalScaleSpanY: -_plotAreaAndHorizontalScaleSpanY - _horizontalScaleHeight); + g.drawText( + label[0], + new Font("MS Gothic", 12f), + _plotAreaBoundsColor, + Rect(x, y, _horizontalScaleSpan, _horizontalScaleHeight) + ); + i++; + } + }} + // + for (int i; i < _lastRecord - _firstRecord + 1; i++) + { + int x = _originPoint.x + _plotAreaLeftPadding + i * _horizontalScaleSpan; + int y = baseY + _originPoint.y; + // Draw horizontal scale line. + g.drawLine( + new Pen(_plotAreaBoundsColor), + x, + y - _horizonScaleLineInnerSide * (_vZeroPos == VerticalZeroPosition.BOTTOM ? 1 : -1), + x, + y + _horizonScaleLineOuterSide * (_vZeroPos == VerticalZeroPosition.BOTTOM ? 1 : -1) + ); + } + } + // Draw legend. + if (_showLegend) + { + int legendLine; + foreach (i, value; csvReader!(Tuple!T)(_csv, null).header) + { + static if (is(T[0] == string)) + { + if (i == 0) continue; + } + int x = plotAreaBounds.right + _plotAreaAndLegendSpanX + _plotPointSize; + int y = plotAreaBounds.y + _legendLineHeight * cast(int)legendLine; + g.drawText(to!string(value), new Font("MS Gothic", 12f), Color.black, Rect(x, y, 100, 100)); + _drawPlotPoint( + g, + new Pen(_plotLineColorPalette[legendLine]), + _plotPointFormList[legendLine], + _plotPointSize, x - _plotPointSize * 2, // Center X. + y + _legendLineHeight / 2 // Center Y. + ); + legendLine++; + } + } + // Draw records. + Tuple!T prevRecord; + int x1 = _originPoint.x + _plotAreaLeftPadding; + int x2; + bool isFirstRecord = true; + auto csvRange = csvReader!(Tuple!T)(_csv, null).drop(_firstRecord); + foreach (currRecord; csvRange) + { + x2 = x1 + _horizontalScaleSpan; + bool isFirstColumn = true; + foreach (col, value; currRecord) + { + static if (!(is(T[0] == string) && col == 0)) + { + int y1 = cast(int)(baseY + _originPoint.y + vRatio * prevRecord[col] * (_vZeroPos == VerticalZeroPosition.BOTTOM ? -1: 1)); + int y2 = cast(int)(baseY + _originPoint.y + vRatio * value * (_vZeroPos == VerticalZeroPosition.BOTTOM ? -1: 1)); + int seriesIndex = col - (is(T[0] == string)?1:0); + if (!isFirstRecord) + { + g.drawLine( + new Pen(_plotLineColorPalette[seriesIndex]), + x1 - _horizontalScaleSpan, + y1, + x2 - _horizontalScaleSpan, + y2 + ); + } + _drawPlotPoint( + g, + new Pen(_plotLineColorPalette[seriesIndex]), + _plotPointFormList[seriesIndex], + _plotPointSize, + x2 - _horizontalScaleSpan, // Center X. + y2 // Center Y. + ); + } + isFirstColumn = false; + } + x1 = x1 + _horizontalScaleSpan; + prevRecord = currRecord; + isFirstRecord = false; + } + } + + /// + Rect plotAreaBounds() const + { + return Rect( + _originPoint.x, + _originPoint.y + _plotAreaHeightOnDisplay * (_vZeroPos == VerticalZeroPosition.BOTTOM ? -1 : 1), + cast(int)((_lastRecord - _firstRecord) * _horizontalScaleSpan) + _plotAreaLeftPadding + _plotAreaRightPadding, + _plotAreaHeightOnDisplay + ); + } + + /// + void originPoint(Point pt) + { + _originPoint = pt; + } + + /// + void relocate(Point pt) + { + final switch (_vZeroPos) + { + case VerticalZeroPosition.BOTTOM: + int x = _chartMargins.left + _verticalScaleWidth + pt.x; + int y = _chartMargins.top + _plotAreaHeightOnDisplay + pt.y; + originPoint = Point(x, y); + break; + case VerticalZeroPosition.TOP: + int x = _chartMargins.left + _verticalScaleWidth + pt.x; + int y = _chartMargins.top + pt.y - _plotAreaHeightOnDisplay; + originPoint = Point(x, y); + } + } + + /// + void verticalZeroPosition(VerticalZeroPosition vZeroPos) // setter + { + _vZeroPos = vZeroPos; + } + + /// + void chartMargins(ChartMargins m) + { + _chartMargins = m; + } + + /// + void plotPointSize(int size) + { + _plotPointSize = size; + } + + /// + void showLegend(bool byes) + { + _showLegend = byes; + } + + /// + void plotLineColorPalette(Color[] colors) + { + _plotLineColorPalette = colors; + } + /// ditto + Color[] plotLineColorPalette() + { + return _plotLineColorPalette; + } + + /// + void plotAreaAndLegendSpanX(int x) + { + _plotAreaAndLegendSpanX = x; + } + + /// + void plotAreaAndHorizontalScaleSpanY(int y) + { + _plotAreaAndHorizontalScaleSpanY = y; + } + + /// + void legendLineHeight(int h) + { + _legendLineHeight = h; + } + + /// + void legendWidth(int w) + { + _legendWidth = w; + } + + /// + void plotAreaRightPadding(int x) + { + _plotAreaRightPadding = x; + } + + /// + void plotAreaLeftPadding(int x) + { + _plotAreaLeftPadding = x; + } + + /// + void firstRecord(int i) + { + _firstRecord = i; + } + + /// + void lastRecord(int i) + { + _lastRecord = i; + } + + /// + void backColor(Color c) + { + _backColor = c; + } + + /// + void plotAreaBoundsColor(Color c) + { + _plotAreaBoundsColor = c; + } + + /// + void horizontalScaleSpan(int x) + { + _horizontalScaleSpan = x; + } + + /// + void verticalMaxScale(int m) + { + _verticalMaxScale = m; + } + + /// + void plotAreaHeightOnDisplay(int h) + { + _plotAreaHeightOnDisplay = h; + } + + /// + void hasVerticalScale(bool byes) + { + _hasVerticalScale = byes; + } + + /// + void hasHorizontalScale(bool byes) + { + _hasHorizontalScale = byes; + } + + /// + void verticalScaleSpan(int scale) + { + _verticalScaleSpan = scale; + } + + /// + void verticalScaleWidth(int w) + { + _verticalScaleWidth = w; + } + + /// + void verticalScaleLineOuterSide(int w) + { + _verticalScaleLineOuterSide = w; + } + + /// + void verticalScaleLineInnerSide(int w) + { + _verticalScaleLineInnerSide = w; + } + + /// + void horizonScaleLineInnerSide(int h) + { + _horizonScaleLineInnerSide = h; + } + + /// + void horizonScaleLineOuterSide(int h) + { + _horizonScaleLineOuterSide = h; + } + + /// + void horizontalScaleHeight(int h) + { + _horizontalScaleHeight = h; + } + + /// + void plotPointFormList(PlotPointForm[] forms) + { + _plotPointFormList = forms; + } + /// ditto + PlotPointForm[] plotPointFormList() + { + return _plotPointFormList; + } + +private: + string _csv; + int _firstRecord; + int _lastRecord; + VerticalZeroPosition _vZeroPos; + Point _originPoint; + ChartMargins _chartMargins; + bool _showLegend; + int _legendLineHeight; + int _legendWidth; + Color _backColor; + Color _plotAreaBoundsColor; + int _plotAreaLeftPadding; + int _plotAreaRightPadding; + int _plotAreaHeightOnDisplay; + int _plotAreaAndLegendSpanX; + int _plotAreaAndHorizontalScaleSpanY; + int _plotPointSize; + Color[] _plotLineColorPalette; + PlotPointForm[] _plotPointFormList; + bool _hasHorizontalScale; + int _horizontalScaleSpan; + int _horizontalScaleHeight; + int _horizonScaleLineInnerSide; + int _horizonScaleLineOuterSide; + bool _hasVerticalScale; + int _verticalMaxScale; + int _verticalScaleSpan; + int _verticalScaleWidth; + int _verticalScaleLineOuterSide; + int _verticalScaleLineInnerSide; + + /// + void _drawPlotPoint(Graphics g, Pen pen, PlotPointForm form, int plotPointSize, int centerX, int centerY) + { + final switch (form) + { + case PlotPointForm.CIRCLE: + g.drawEllipse( + pen, + centerX - _plotPointSize / 2, + centerY - _plotPointSize / 2, + plotPointSize, // width + plotPointSize // height + ); + break; + case PlotPointForm.RECTANGLE: + g.drawRectangle( + pen, + centerX - _plotPointSize / 2, + centerY - _plotPointSize / 2, + plotPointSize, // width + plotPointSize // height + ); + break; + case PlotPointForm.CROSS: + g.drawLine( + pen, + centerX - _plotPointSize / 2, + centerY - _plotPointSize / 2, + centerX + _plotPointSize / 2 + 1, + centerY + _plotPointSize / 2 + 1 + ); + g.drawLine( + pen, + centerX + _plotPointSize / 2, + centerY - _plotPointSize / 2, + centerX - _plotPointSize / 2 - 1, + centerY + _plotPointSize / 2 + 1 + ); + break; + case PlotPointForm.TRIANGLE: + g.drawLine( + pen, + centerX, + centerY - _plotPointSize * 2 / 3, + centerX + _plotPointSize / 2, + centerY + _plotPointSize / 3 + ); + g.drawLine( + pen, + centerX, + centerY - _plotPointSize * 2 / 3, + centerX - _plotPointSize / 2, + centerY + _plotPointSize / 3 + ); + g.drawLine( + pen, + centerX - _plotPointSize / 2, + centerY + _plotPointSize / 3, + centerX + _plotPointSize / 2, + centerY + _plotPointSize / 3 + ); + break; + } + } +} + +/// +struct ChartMargins +{ + int left; /// Left margin. + int top; /// Top margin. + int right; /// Right margin. + int bottom; /// Bottom margin. + + /// + this(int left, int top, int right, int bottom) + { + this.left = left; + this.top = top; + this.right = right; + this.bottom = bottom; + } + + /// + string toString() const + { + + string str = "["; + str ~= to!string(left) ~ " ,"; + str ~= to!string(top) ~ " ,"; + str ~= to!string(right) ~ " ,"; + str ~= to!string(bottom) ~ "]"; + return str; + } +} + +/// +enum VerticalZeroPosition +{ + TOP, + BOTTOM, +} + +/// +enum PlotPointForm +{ + CIRCLE, + RECTANGLE, + CROSS, + TRIANGLE, +} \ No newline at end of file