├── .github
└── workflows
│ └── ci.yaml
├── .gitignore
├── LICENSE
├── README.md
└── src
├── SeriPlot.Core
├── Class1.cs
└── SeriPlot.Core.csproj
├── SeriPlot.Gui
├── Form1.Designer.cs
├── Form1.cs
├── Form1.resx
├── Program.cs
└── SeriPlot.Gui.csproj
└── SeriPlot.sln
/.github/workflows/ci.yaml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | workflow_dispatch:
5 | push:
6 | branches:
7 | - main
8 | pull_request:
9 | types: [opened, synchronize, reopened]
10 |
11 | jobs:
12 | test:
13 | name: Build
14 | runs-on: windows-latest
15 | steps:
16 | - name: 🛒 Checkout
17 | uses: actions/checkout@v2
18 | - name: ✨ Setup .NET 6
19 | uses: actions/setup-dotnet@v1
20 | with:
21 | dotnet-version: 6.0.x
22 | - name: 🚚 Restore
23 | run: dotnet restore src
24 | - name: 🛠️ Build
25 | run: dotnet build src --no-restore
26 | - name: 🧪 Test
27 | run: dotnet test src --no-build
28 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | dev/SeriPlot/**
2 | dev/*.zip
3 |
4 | ## Ignore Visual Studio temporary files, build results, and
5 | ## files generated by popular Visual Studio add-ons.
6 | ##
7 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
8 |
9 | # User-specific files
10 | *.rsuser
11 | *.suo
12 | *.user
13 | *.userosscache
14 | *.sln.docstates
15 |
16 | # User-specific files (MonoDevelop/Xamarin Studio)
17 | *.userprefs
18 |
19 | # Mono auto generated files
20 | mono_crash.*
21 |
22 | # Build results
23 | [Dd]ebug/
24 | [Dd]ebugPublic/
25 | [Rr]elease/
26 | [Rr]eleases/
27 | x64/
28 | x86/
29 | [Aa][Rr][Mm]/
30 | [Aa][Rr][Mm]64/
31 | bld/
32 | [Bb]in/
33 | [Oo]bj/
34 | [Ll]og/
35 | [Ll]ogs/
36 |
37 | # Visual Studio 2015/2017 cache/options directory
38 | .vs/
39 | # Uncomment if you have tasks that create the project's static files in wwwroot
40 | #wwwroot/
41 |
42 | # Visual Studio 2017 auto generated files
43 | Generated\ Files/
44 |
45 | # MSTest test Results
46 | [Tt]est[Rr]esult*/
47 | [Bb]uild[Ll]og.*
48 |
49 | # NUnit
50 | *.VisualState.xml
51 | TestResult.xml
52 | nunit-*.xml
53 |
54 | # Build Results of an ATL Project
55 | [Dd]ebugPS/
56 | [Rr]eleasePS/
57 | dlldata.c
58 |
59 | # Benchmark Results
60 | BenchmarkDotNet.Artifacts/
61 |
62 | # .NET Core
63 | project.lock.json
64 | project.fragment.lock.json
65 | artifacts/
66 |
67 | # StyleCop
68 | StyleCopReport.xml
69 |
70 | # Files built by Visual Studio
71 | *_i.c
72 | *_p.c
73 | *_h.h
74 | *.ilk
75 | *.meta
76 | *.obj
77 | *.iobj
78 | *.pch
79 | *.pdb
80 | *.ipdb
81 | *.pgc
82 | *.pgd
83 | *.rsp
84 | *.sbr
85 | *.tlb
86 | *.tli
87 | *.tlh
88 | *.tmp
89 | *.tmp_proj
90 | *_wpftmp.csproj
91 | *.log
92 | *.vspscc
93 | *.vssscc
94 | .builds
95 | *.pidb
96 | *.svclog
97 | *.scc
98 |
99 | # Chutzpah Test files
100 | _Chutzpah*
101 |
102 | # Visual C++ cache files
103 | ipch/
104 | *.aps
105 | *.ncb
106 | *.opendb
107 | *.opensdf
108 | *.sdf
109 | *.cachefile
110 | *.VC.db
111 | *.VC.VC.opendb
112 |
113 | # Visual Studio profiler
114 | *.psess
115 | *.vsp
116 | *.vspx
117 | *.sap
118 |
119 | # Visual Studio Trace Files
120 | *.e2e
121 |
122 | # TFS 2012 Local Workspace
123 | $tf/
124 |
125 | # Guidance Automation Toolkit
126 | *.gpState
127 |
128 | # ReSharper is a .NET coding add-in
129 | _ReSharper*/
130 | *.[Rr]e[Ss]harper
131 | *.DotSettings.user
132 |
133 | # TeamCity is a build add-in
134 | _TeamCity*
135 |
136 | # DotCover is a Code Coverage Tool
137 | *.dotCover
138 |
139 | # AxoCover is a Code Coverage Tool
140 | .axoCover/*
141 | !.axoCover/settings.json
142 |
143 | # Visual Studio code coverage results
144 | *.coverage
145 | *.coveragexml
146 |
147 | # NCrunch
148 | _NCrunch_*
149 | .*crunch*.local.xml
150 | nCrunchTemp_*
151 |
152 | # MightyMoose
153 | *.mm.*
154 | AutoTest.Net/
155 |
156 | # Web workbench (sass)
157 | .sass-cache/
158 |
159 | # Installshield output folder
160 | [Ee]xpress/
161 |
162 | # DocProject is a documentation generator add-in
163 | DocProject/buildhelp/
164 | DocProject/Help/*.HxT
165 | DocProject/Help/*.HxC
166 | DocProject/Help/*.hhc
167 | DocProject/Help/*.hhk
168 | DocProject/Help/*.hhp
169 | DocProject/Help/Html2
170 | DocProject/Help/html
171 |
172 | # Click-Once directory
173 | publish/
174 |
175 | # Publish Web Output
176 | *.[Pp]ublish.xml
177 | *.azurePubxml
178 | # Note: Comment the next line if you want to checkin your web deploy settings,
179 | # but database connection strings (with potential passwords) will be unencrypted
180 | *.pubxml
181 | *.publishproj
182 |
183 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
184 | # checkin your Azure Web App publish settings, but sensitive information contained
185 | # in these scripts will be unencrypted
186 | PublishScripts/
187 |
188 | # NuGet Packages
189 | *.nupkg
190 | # NuGet Symbol Packages
191 | *.snupkg
192 | # The packages folder can be ignored because of Package Restore
193 | **/[Pp]ackages/*
194 | # except build/, which is used as an MSBuild target.
195 | !**/[Pp]ackages/build/
196 | # Uncomment if necessary however generally it will be regenerated when needed
197 | #!**/[Pp]ackages/repositories.config
198 | # NuGet v3's project.json files produces more ignorable files
199 | *.nuget.props
200 | *.nuget.targets
201 |
202 | # Microsoft Azure Build Output
203 | csx/
204 | *.build.csdef
205 |
206 | # Microsoft Azure Emulator
207 | ecf/
208 | rcf/
209 |
210 | # Windows Store app package directories and files
211 | AppPackages/
212 | BundleArtifacts/
213 | Package.StoreAssociation.xml
214 | _pkginfo.txt
215 | *.appx
216 | *.appxbundle
217 | *.appxupload
218 |
219 | # Visual Studio cache files
220 | # files ending in .cache can be ignored
221 | *.[Cc]ache
222 | # but keep track of directories ending in .cache
223 | !?*.[Cc]ache/
224 |
225 | # Others
226 | ClientBin/
227 | ~$*
228 | *~
229 | *.dbmdl
230 | *.dbproj.schemaview
231 | *.jfm
232 | *.pfx
233 | *.publishsettings
234 | orleans.codegen.cs
235 |
236 | # Including strong name files can present a security risk
237 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
238 | #*.snk
239 |
240 | # Since there are multiple workflows, uncomment next line to ignore bower_components
241 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
242 | #bower_components/
243 |
244 | # RIA/Silverlight projects
245 | Generated_Code/
246 |
247 | # Backup & report files from converting an old project file
248 | # to a newer Visual Studio version. Backup files are not needed,
249 | # because we have git ;-)
250 | _UpgradeReport_Files/
251 | Backup*/
252 | UpgradeLog*.XML
253 | UpgradeLog*.htm
254 | ServiceFabricBackup/
255 | *.rptproj.bak
256 |
257 | # SQL Server files
258 | *.mdf
259 | *.ldf
260 | *.ndf
261 |
262 | # Business Intelligence projects
263 | *.rdl.data
264 | *.bim.layout
265 | *.bim_*.settings
266 | *.rptproj.rsuser
267 | *- [Bb]ackup.rdl
268 | *- [Bb]ackup ([0-9]).rdl
269 | *- [Bb]ackup ([0-9][0-9]).rdl
270 |
271 | # Microsoft Fakes
272 | FakesAssemblies/
273 |
274 | # GhostDoc plugin setting file
275 | *.GhostDoc.xml
276 |
277 | # Node.js Tools for Visual Studio
278 | .ntvs_analysis.dat
279 | node_modules/
280 |
281 | # Visual Studio 6 build log
282 | *.plg
283 |
284 | # Visual Studio 6 workspace options file
285 | *.opt
286 |
287 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
288 | *.vbw
289 |
290 | # Visual Studio LightSwitch build output
291 | **/*.HTMLClient/GeneratedArtifacts
292 | **/*.DesktopClient/GeneratedArtifacts
293 | **/*.DesktopClient/ModelManifest.xml
294 | **/*.Server/GeneratedArtifacts
295 | **/*.Server/ModelManifest.xml
296 | _Pvt_Extensions
297 |
298 | # Paket dependency manager
299 | .paket/paket.exe
300 | paket-files/
301 |
302 | # FAKE - F# Make
303 | .fake/
304 |
305 | # CodeRush personal settings
306 | .cr/personal
307 |
308 | # Python Tools for Visual Studio (PTVS)
309 | __pycache__/
310 | *.pyc
311 |
312 | # Cake - Uncomment if you are using it
313 | # tools/**
314 | # !tools/packages.config
315 |
316 | # Tabs Studio
317 | *.tss
318 |
319 | # Telerik's JustMock configuration file
320 | *.jmconfig
321 |
322 | # BizTalk build output
323 | *.btp.cs
324 | *.btm.cs
325 | *.odx.cs
326 | *.xsd.cs
327 |
328 | # OpenCover UI analysis results
329 | OpenCover/
330 |
331 | # Azure Stream Analytics local run output
332 | ASALocalRun/
333 |
334 | # MSBuild Binary and Structured Log
335 | *.binlog
336 |
337 | # NVidia Nsight GPU debugger configuration file
338 | *.nvuser
339 |
340 | # MFractors (Xamarin productivity tool) working folder
341 | .mfractor/
342 |
343 | # Local History for Visual Studio
344 | .localhistory/
345 |
346 | # BeatPulse healthcheck temp database
347 | healthchecksdb
348 |
349 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
350 | MigrationBackup/
351 |
352 | # Ionide (cross platform F# VS Code tools) working folder
353 | .ionide/
354 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Scott W Harden
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SeriPlot
2 |
3 | **SeriPlot is a Windows application that plots serial port data in real time.** By default SeriPlot is configured to chart data compatible with the Arduino serial plotter (comma separated, line-delimited ASCII text), but it can be easy modified to support custom data formats.
4 |
5 | ## Resources
6 |
7 | * Arduino Docs: [Using the Serial Plotter Tool](https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-serial-plotter) (IDE v2)
8 |
9 | * The [ADC-10-F103C serial plotter](https://github.com/swharden/ADC-10-F103C) source code has been moved to its own repository. A click-to-run EXE can be downloaded from its [releases page](https://github.com/swharden/ADC-10-F103C/releases/).
--------------------------------------------------------------------------------
/src/SeriPlot.Core/Class1.cs:
--------------------------------------------------------------------------------
1 | namespace SeriPlot.Core;
2 | public class Class1
3 | {
4 |
5 | }
6 |
--------------------------------------------------------------------------------
/src/SeriPlot.Core/SeriPlot.Core.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 | enable
6 | enable
7 | latest
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/SeriPlot.Gui/Form1.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace SeriPlot.Gui;
2 |
3 | partial class Form1
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.components = new System.ComponentModel.Container();
32 | this.cbPort = new System.Windows.Forms.ComboBox();
33 | this.button1 = new System.Windows.Forms.Button();
34 | this.cbOpen = new System.Windows.Forms.CheckBox();
35 | this.cbBaud = new System.Windows.Forms.ComboBox();
36 | this.formsPlot1 = new ScottPlot.FormsPlot();
37 | this.label1 = new System.Windows.Forms.Label();
38 | this.label2 = new System.Windows.Forms.Label();
39 | this.lblLastLine = new System.Windows.Forms.Label();
40 | this.timer1 = new System.Windows.Forms.Timer(this.components);
41 | this.SuspendLayout();
42 | //
43 | // cbPort
44 | //
45 | this.cbPort.FormattingEnabled = true;
46 | this.cbPort.Location = new System.Drawing.Point(12, 40);
47 | this.cbPort.Name = "cbPort";
48 | this.cbPort.Size = new System.Drawing.Size(93, 23);
49 | this.cbPort.TabIndex = 0;
50 | this.cbPort.Text = "COM42";
51 | //
52 | // button1
53 | //
54 | this.button1.Location = new System.Drawing.Point(111, 40);
55 | this.button1.Name = "button1";
56 | this.button1.Size = new System.Drawing.Size(56, 23);
57 | this.button1.TabIndex = 2;
58 | this.button1.Text = "Scan";
59 | this.button1.UseVisualStyleBackColor = true;
60 | //
61 | // cbOpen
62 | //
63 | this.cbOpen.AutoSize = true;
64 | this.cbOpen.Location = new System.Drawing.Point(240, 42);
65 | this.cbOpen.Name = "cbOpen";
66 | this.cbOpen.Size = new System.Drawing.Size(55, 19);
67 | this.cbOpen.TabIndex = 3;
68 | this.cbOpen.Text = "Open";
69 | this.cbOpen.UseVisualStyleBackColor = true;
70 | this.cbOpen.CheckedChanged += new System.EventHandler(this.cbOpen_CheckedChanged);
71 | //
72 | // cbBaud
73 | //
74 | this.cbBaud.FormattingEnabled = true;
75 | this.cbBaud.Location = new System.Drawing.Point(173, 40);
76 | this.cbBaud.Name = "cbBaud";
77 | this.cbBaud.Size = new System.Drawing.Size(61, 23);
78 | this.cbBaud.TabIndex = 4;
79 | this.cbBaud.Text = "115200";
80 | //
81 | // formsPlot1
82 | //
83 | this.formsPlot1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
84 | | System.Windows.Forms.AnchorStyles.Left)
85 | | System.Windows.Forms.AnchorStyles.Right)));
86 | this.formsPlot1.Location = new System.Drawing.Point(13, 69);
87 | this.formsPlot1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
88 | this.formsPlot1.Name = "formsPlot1";
89 | this.formsPlot1.Size = new System.Drawing.Size(774, 445);
90 | this.formsPlot1.TabIndex = 5;
91 | //
92 | // label1
93 | //
94 | this.label1.AutoSize = true;
95 | this.label1.Location = new System.Drawing.Point(12, 22);
96 | this.label1.Name = "label1";
97 | this.label1.Size = new System.Drawing.Size(29, 15);
98 | this.label1.TabIndex = 6;
99 | this.label1.Text = "Port";
100 | //
101 | // label2
102 | //
103 | this.label2.AutoSize = true;
104 | this.label2.Location = new System.Drawing.Point(173, 22);
105 | this.label2.Name = "label2";
106 | this.label2.Size = new System.Drawing.Size(34, 15);
107 | this.label2.TabIndex = 7;
108 | this.label2.Text = "Baud";
109 | //
110 | // lblLastLine
111 | //
112 | this.lblLastLine.AutoSize = true;
113 | this.lblLastLine.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
114 | this.lblLastLine.Location = new System.Drawing.Point(326, 44);
115 | this.lblLastLine.Name = "lblLastLine";
116 | this.lblLastLine.Size = new System.Drawing.Size(77, 14);
117 | this.lblLastLine.TabIndex = 8;
118 | this.lblLastLine.Text = "no data...";
119 | //
120 | // timer1
121 | //
122 | this.timer1.Enabled = true;
123 | this.timer1.Interval = 10;
124 | this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
125 | //
126 | // Form1
127 | //
128 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
129 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
130 | this.ClientSize = new System.Drawing.Size(800, 526);
131 | this.Controls.Add(this.lblLastLine);
132 | this.Controls.Add(this.label2);
133 | this.Controls.Add(this.label1);
134 | this.Controls.Add(this.cbOpen);
135 | this.Controls.Add(this.cbBaud);
136 | this.Controls.Add(this.formsPlot1);
137 | this.Controls.Add(this.cbPort);
138 | this.Controls.Add(this.button1);
139 | this.Name = "Form1";
140 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
141 | this.Text = "SeriPlot";
142 | this.Load += new System.EventHandler(this.Form1_Load);
143 | this.ResumeLayout(false);
144 | this.PerformLayout();
145 |
146 | }
147 |
148 | #endregion
149 |
150 | private ComboBox cbPort;
151 | private Button button1;
152 | private CheckBox cbOpen;
153 | private ScottPlot.FormsPlot formsPlot1;
154 | private ComboBox cbBaud;
155 | private Label label1;
156 | private Label label2;
157 | private Label lblLastLine;
158 | private System.Windows.Forms.Timer timer1;
159 | }
160 |
--------------------------------------------------------------------------------
/src/SeriPlot.Gui/Form1.cs:
--------------------------------------------------------------------------------
1 | using ScottPlot.Plottable;
2 | using System.IO.Ports;
3 |
4 | namespace SeriPlot.Gui;
5 |
6 | public partial class Form1 : Form
7 | {
8 | SerialPort? Ser = null;
9 | static string LastLine = string.Empty;
10 | static readonly double[] Data = new double[2_000];
11 | readonly ScottPlot.Plottable.VLine VLine;
12 | static int NextDataIndex = 0;
13 |
14 | public Form1()
15 | {
16 | InitializeComponent();
17 |
18 | cbBaud.Items.Add(115200);
19 | cbBaud.SelectedIndex = 0;
20 |
21 | formsPlot1.Plot.AddSignal(Data);
22 | VLine = formsPlot1.Plot.AddVerticalLine(0, Color.Red, width: 2);
23 | }
24 |
25 | private void Form1_Load(object sender, EventArgs e)
26 | {
27 | ReScan();
28 | }
29 |
30 | private void ReScan()
31 | {
32 | cbPort.Items.Clear();
33 | cbPort.Items.AddRange(SerialPort.GetPortNames());
34 |
35 | if (cbPort.Items.Count > 0)
36 | cbPort.SelectedIndex = cbPort.Items.Count - 1;
37 | }
38 |
39 | private void CloseSerialPort()
40 | {
41 | if (Ser is not null)
42 | {
43 | Ser.Close();
44 | Ser.Dispose();
45 | LastLine = "Disconnected";
46 | }
47 | }
48 |
49 | private void OpenSerialPort()
50 | {
51 | LastLine = "Connecting...";
52 | Application.DoEvents();
53 | Ser = new SerialPort(cbPort.Text, int.Parse(cbBaud.Text));
54 | Ser.Open();
55 | Ser.ReadLine();
56 | Ser.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
57 | }
58 |
59 | private void cbOpen_CheckedChanged(object sender, EventArgs e)
60 | {
61 | if (cbOpen.Checked)
62 | OpenSerialPort();
63 | else
64 | CloseSerialPort();
65 | }
66 |
67 | private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
68 | {
69 | SerialPort sp = (SerialPort)sender;
70 | string lastLine = sp.ReadLine().Trim();
71 | LastLine = lastLine;
72 | string[] parts = lastLine.Split(',');
73 | try
74 | {
75 | Data[NextDataIndex % Data.Length] = double.Parse(parts[0]);
76 | NextDataIndex += 1;
77 | }
78 | catch
79 | {
80 | System.Diagnostics.Debug.WriteLine($"PARSING ERROR: {LastLine}");
81 | }
82 | }
83 |
84 | private void timer1_Tick(object sender, EventArgs e)
85 | {
86 | lblLastLine.Text = LastLine;
87 | VLine.X = NextDataIndex % Data.Length;
88 | formsPlot1.Refresh();
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/src/SeriPlot.Gui/Form1.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | text/microsoft-resx
50 |
51 |
52 | 2.0
53 |
54 |
55 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
56 |
57 |
58 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
59 |
60 |
61 | 17, 17
62 |
63 |
--------------------------------------------------------------------------------
/src/SeriPlot.Gui/Program.cs:
--------------------------------------------------------------------------------
1 | namespace SeriPlot.Gui;
2 |
3 | static class Program
4 | {
5 | ///
6 | /// The main entry point for the application.
7 | ///
8 | [STAThread]
9 | static void Main()
10 | {
11 | // To customize application configuration such as set high DPI settings or default font,
12 | // see https://aka.ms/applicationconfiguration.
13 | #if !NETFRAMEWORK
14 | ApplicationConfiguration.Initialize();
15 | #endif
16 | Application.Run(new Form1());
17 | }
18 | }
--------------------------------------------------------------------------------
/src/SeriPlot.Gui/SeriPlot.Gui.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | WinExe
5 | net6.0-windows
6 | enable
7 | true
8 | enable
9 | latest
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/SeriPlot.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.4.33103.184
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SeriPlot.Gui", "SeriPlot.Gui\SeriPlot.Gui.csproj", "{364A3A9C-88B4-4DD0-8E90-F73E2F1537B3}"
7 | EndProject
8 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SeriPlot.Core", "SeriPlot.Core\SeriPlot.Core.csproj", "{8E7E61F3-70EF-4647-B3CF-8714EE8330E1}"
9 | EndProject
10 | Global
11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
12 | Debug|Any CPU = Debug|Any CPU
13 | Release|Any CPU = Release|Any CPU
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {364A3A9C-88B4-4DD0-8E90-F73E2F1537B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17 | {364A3A9C-88B4-4DD0-8E90-F73E2F1537B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
18 | {364A3A9C-88B4-4DD0-8E90-F73E2F1537B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
19 | {364A3A9C-88B4-4DD0-8E90-F73E2F1537B3}.Release|Any CPU.Build.0 = Release|Any CPU
20 | {8E7E61F3-70EF-4647-B3CF-8714EE8330E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21 | {8E7E61F3-70EF-4647-B3CF-8714EE8330E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
22 | {8E7E61F3-70EF-4647-B3CF-8714EE8330E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
23 | {8E7E61F3-70EF-4647-B3CF-8714EE8330E1}.Release|Any CPU.Build.0 = Release|Any CPU
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | GlobalSection(ExtensibilityGlobals) = postSolution
29 | SolutionGuid = {AC353E11-817D-45EE-B082-6356BEEE3AB6}
30 | EndGlobalSection
31 | EndGlobal
32 |
--------------------------------------------------------------------------------