Jack.Peng
2021-03-12 175c9b9969c1d1fbb21d052ea133717b50dae3cf
新增设备输出OK也输出白点信息。
15个文件已添加
2192 ■■■■■ 已修改文件
.gitignore 340 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
P066.Data.sln 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
P066.Data/App.config 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
P066.Data/Form1.Designer.cs 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
P066.Data/Form1.cs 1131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
P066.Data/Form1.resx 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
P066.Data/P066.Data.csproj 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
P066.Data/P066数据分析程序.csproj 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
P066.Data/Program.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
P066.Data/Properties/AssemblyInfo.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
P066.Data/Properties/Resources.Designer.cs 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
P066.Data/Properties/Resources.resx 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
P066.Data/Properties/Settings.Designer.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
P066.Data/Properties/Settings.settings 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
P066数据分析程序.sln 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
New file
@@ -0,0 +1,340 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- Backup*.rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
P066.Data.sln
New file
@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.1259
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "P066.Data", "P066.Data\P066.Data.csproj", "{8B8F7749-8823-48C6-B12A-54979E28C10C}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Release|Any CPU = Release|Any CPU
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {8B8F7749-8823-48C6-B12A-54979E28C10C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {8B8F7749-8823-48C6-B12A-54979E28C10C}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {8B8F7749-8823-48C6-B12A-54979E28C10C}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {8B8F7749-8823-48C6-B12A-54979E28C10C}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {9015AB30-DC50-4705-A9A7-45C14C06313E}
    EndGlobalSection
EndGlobal
P066.Data/App.config
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
</configuration>
P066.Data/Form1.Designer.cs
New file
@@ -0,0 +1,93 @@
namespace P066.Data
{
    partial class Form1
    {
        /// <summary>
        /// å¿…需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;
        /// <summary>
        /// æ¸…理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        #region Windows çª—体设计器生成的代码
        /// <summary>
        /// è®¾è®¡å™¨æ”¯æŒæ‰€éœ€çš„æ–¹æ³• - ä¸è¦ä¿®æ”¹
        /// ä½¿ç”¨ä»£ç ç¼–辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.btnLoadData1 = new System.Windows.Forms.Button();
            this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog();
            this.btnAnalyze = new System.Windows.Forms.Button();
            this.btnLoadData2 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            //
            // btnLoadData1
            //
            this.btnLoadData1.Location = new System.Drawing.Point(16, 15);
            this.btnLoadData1.Margin = new System.Windows.Forms.Padding(4);
            this.btnLoadData1.Name = "btnLoadData1";
            this.btnLoadData1.Size = new System.Drawing.Size(176, 29);
            this.btnLoadData1.TabIndex = 0;
            this.btnLoadData1.Text = "加载文件夹1";
            this.btnLoadData1.UseVisualStyleBackColor = true;
            this.btnLoadData1.Click += new System.EventHandler(this.btnLoadData1_Click);
            //
            // btnAnalyze
            //
            this.btnAnalyze.Location = new System.Drawing.Point(16, 88);
            this.btnAnalyze.Margin = new System.Windows.Forms.Padding(4);
            this.btnAnalyze.Name = "btnAnalyze";
            this.btnAnalyze.Size = new System.Drawing.Size(176, 29);
            this.btnAnalyze.TabIndex = 1;
            this.btnAnalyze.Text = "开始分析";
            this.btnAnalyze.UseVisualStyleBackColor = true;
            this.btnAnalyze.Click += new System.EventHandler(this.btnAnalyze_Click);
            //
            // btnLoadData2
            //
            this.btnLoadData2.Location = new System.Drawing.Point(16, 51);
            this.btnLoadData2.Margin = new System.Windows.Forms.Padding(4);
            this.btnLoadData2.Name = "btnLoadData2";
            this.btnLoadData2.Size = new System.Drawing.Size(176, 29);
            this.btnLoadData2.TabIndex = 1;
            this.btnLoadData2.Text = "加载文件夹2";
            this.btnLoadData2.UseVisualStyleBackColor = true;
            this.btnLoadData2.Click += new System.EventHandler(this.btnLoadData2_Click);
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(1067, 562);
            this.Controls.Add(this.btnAnalyze);
            this.Controls.Add(this.btnLoadData2);
            this.Controls.Add(this.btnLoadData1);
            this.Margin = new System.Windows.Forms.Padding(4);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
        }
        #endregion
        private System.Windows.Forms.Button btnLoadData1;
        private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1;
        private System.Windows.Forms.Button btnAnalyze;
        private System.Windows.Forms.Button btnLoadData2;
    }
}
P066.Data/Form1.cs
New file
@@ -0,0 +1,1131 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace P066.Data
{
    public partial class Form1 : Form
    {
        DirectoryInfo directoryInfo1;
        DirectoryInfo directoryInfo2;
        public Form1()
        {
            InitializeComponent();
        }
        private void btnLoadData1_Click(object sender, EventArgs e)
        {
            if (folderBrowserDialog1.ShowDialog() != DialogResult.OK)
                return;
            directoryInfo1 = new DirectoryInfo(folderBrowserDialog1.SelectedPath);
        }
        private void btnLoadData2_Click(object sender, EventArgs e)
        {
            if (folderBrowserDialog1.ShowDialog() != DialogResult.OK)
                return;
            directoryInfo2 = new DirectoryInfo(folderBrowserDialog1.SelectedPath);
        }
        private void btnAnalyze_Click(object sender, EventArgs e)
        {
            var fileinfos1 = directoryInfo1.GetFiles();
            var fileinfos2 = directoryInfo2.GetFiles();
            var listSum = new List<ResultData>();
            var JudgeListSum = new List<ResultData>();
            string filename = "";
            int WhiteI = 0;
            int WhiteningI = 0;
            for (int i = 0; i < fileinfos1.Length; i++)
            {
                var list = CompareFile(fileinfos1[i], fileinfos2[i]);
                var judgeList = JudgeCompareFile(fileinfos1[i], fileinfos2[i]);
                if (fileinfos1[i].Name.Contains("白点"))
                {
                    WhiteI++;
                    list.ForEach(a => a.Lensnumber = WhiteI);
                    listSum.AddRange(list);
                    judgeList.ForEach(a => a.Lensnumber = WhiteI);
                    JudgeListSum.AddRange(judgeList);
                }
                if (fileinfos1[i].Name.Contains("刮白"))
                {
                    WhiteningI++;
                    list.ForEach(a => a.Lensnumber = WhiteningI);
                    listSum.AddRange(list);
                    judgeList.ForEach(a => a.Lensnumber = WhiteningI);
                    JudgeListSum.AddRange(judgeList);
                }
                var group = judgeList.GroupBy(a => a.TimeTip);
                foreach (var item in group)
                {
                    //计算镜头1缺陷位置及角度
                    var listLensnumber1 = judgeList.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 1);
                    for (int k = 0; k < listLensnumber1.Count; k++)
                    {
                        var lenAngle = GetAngle(listLensnumber1[k].X, listLensnumber1[k].Y);
                        if (lenAngle < 0)
                        {
                            lenAngle = 360 + lenAngle;
                        }
                        listLensnumber1[k].angle = lenAngle;
                        var distance = GetDistance(1050, 1050, listLensnumber1[k].X, listLensnumber1[k].Y);
                        if (distance <= 539.87)
                        {
                            listLensnumber1[k].location = "镜头";
                            listLensnumber1[k].R = distance;
                        }
                        else if (539.87 < distance && distance <= 777.11)
                        {
                            listLensnumber1[k].location = "斜面";
                            listLensnumber1[k].R = distance;
                        }
                        else if (777.11 < distance && distance <= 919.88)
                        {
                            listLensnumber1[k].location = "平面";
                            listLensnumber1[k].R = distance;
                        }
                        else
                        {
                            listLensnumber1[k].location = "区域外";
                            listLensnumber1[k].R = distance;
                        }
                    }
                    //计算镜头2位置及角度
                    var listLensnumber2 = judgeList.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 2);
                    for (int k = 0; k < listLensnumber2.Count; k++)
                    {
                        var lenAngle = GetAngle(listLensnumber2[k].X, listLensnumber2[k].Y);
                        if (lenAngle < 0)
                        {
                            lenAngle = 360 + lenAngle;
                        }
                        listLensnumber2[k].angle = lenAngle;
                        var distance = GetDistance(1050, 1050, listLensnumber2[k].X, listLensnumber2[k].Y);
                        if (distance <= 400)
                        {
                            listLensnumber2[k].location = "镜头";
                            listLensnumber2[k].R = distance;
                        }
                        else if (400 < distance && distance <= 772.18)
                        {
                            listLensnumber2[k].location = "斜面";
                            listLensnumber2[k].R = distance;
                        }
                        else if (772.18 < distance && distance <= 873.38)
                        {
                            listLensnumber2[k].location = "平面";
                            listLensnumber2[k].R = distance;
                        }
                        else
                        {
                            listLensnumber2[k].location = "区域外";
                            listLensnumber2[k].R = distance;
                        }
                    }
                    //计算镜头3位置及角度
                    var listLensnumber3 = judgeList.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 3);
                    for (int k = 0; k < listLensnumber3.Count; k++)
                    {
                        var lenAngle = GetAngle(listLensnumber3[k].X, listLensnumber3[k].Y);
                        if (lenAngle < 0)
                        {
                            lenAngle = 360 + lenAngle;
                        }
                        listLensnumber3[k].angle = lenAngle;
                        var distance = GetDistance(1050, 1050, listLensnumber3[k].X, listLensnumber3[k].Y);
                        if (distance <= 105.63)
                        {
                            listLensnumber3[k].location = "镜头";
                            listLensnumber3[k].R = distance;
                        }
                        else
                        {
                            listLensnumber3[k].location = "斜面";
                            listLensnumber3[k].R = distance;
                        }
                    }
                    //计算镜头4位置及角度
                    var listLensnumber4 = judgeList.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 4);
                    for (int k = 0; k < listLensnumber4.Count; k++)
                    {
                        var lenAngle = GetAngle(listLensnumber4[k].X, listLensnumber4[k].Y);
                        if (lenAngle < 0)
                        {
                            lenAngle = 360 + lenAngle;
                        }
                        listLensnumber4[k].angle = lenAngle;
                        var distance = GetDistance(1050, 1050, listLensnumber4[k].X, listLensnumber4[k].Y);
                        if (distance <= 339.88)
                        {
                            listLensnumber4[k].location = "镜头";
                            listLensnumber4[k].R = distance;
                        }
                        else if (339.88 < distance && distance <= 547.02)
                        {
                            listLensnumber4[k].location = "斜面";
                            listLensnumber4[k].R = distance;
                        }
                        else if (547.02 < distance && distance <= 614.73)
                        {
                            listLensnumber4[k].location = "平面";
                            listLensnumber4[k].R = distance;
                        }
                        else
                        {
                            listLensnumber4[k].location = "区域外";
                            listLensnumber4[k].R = distance;
                        }
                    }
                }
                #region//给镜头区分位置及角度
                var group11 = list.GroupBy(a => a.TimeTip);
                string currPath = "";
                foreach (var item in group11)
                {
                    //计算镜头1缺陷位置及角度
                    var listLensnumber1 = list.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 1);
                    for (int k = 0; k < listLensnumber1.Count; k++)
                    {
                        var lenAngle = GetAngle(listLensnumber1[k].X, listLensnumber1[k].Y);
                        if (lenAngle<0)
                        {
                            lenAngle = 360 + lenAngle;
                        }
                        listLensnumber1[k].angle = lenAngle;
                        var distance = GetDistance(1050, 1050, listLensnumber1[k].X, listLensnumber1[k].Y);
                        if (distance <= 539.87)
                        {
                            listLensnumber1[k].location = "镜头";
                            listLensnumber1[k].R = distance;
                        }
                        else if (539.87 < distance && distance <= 777.11)
                        {
                            listLensnumber1[k].location = "斜面";
                            listLensnumber1[k].R = distance;
                        }
                        else if (777.11 < distance && distance <= 919.88)
                        {
                            listLensnumber1[k].location = "平面";
                            listLensnumber1[k].R = distance;
                        }
                        else
                        {
                            listLensnumber1[k].location = "区域外";
                            listLensnumber1[k].R = distance;
                        }
                    }
                    //计算镜头2位置及角度
                    var listLensnumber2 = list.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 2);
                    for (int k = 0; k < listLensnumber2.Count; k++)
                    {
                        var lenAngle = GetAngle(listLensnumber2[k].X, listLensnumber2[k].Y);
                        if (lenAngle < 0)
                        {
                            lenAngle = 360 + lenAngle;
                        }
                        listLensnumber2[k].angle = lenAngle;
                        var distance = GetDistance(1050, 1050, listLensnumber2[k].X, listLensnumber2[k].Y);
                        if (distance <= 400)
                        {
                            listLensnumber2[k].location = "镜头";
                            listLensnumber2[k].R = distance;
                        }
                        else if (400 < distance && distance <= 772.18)
                        {
                            listLensnumber2[k].location = "斜面";
                            listLensnumber2[k].R = distance;
                        }
                        else if (772.18 < distance && distance <= 873.38)
                        {
                            listLensnumber2[k].location = "平面";
                            listLensnumber2[k].R = distance;
                        }
                        else
                        {
                            listLensnumber2[k].location = "区域外";
                            listLensnumber2[k].R = distance;
                        }
                    }
                    //计算镜头3位置及角度
                    var listLensnumber3 = list.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 3);
                    for (int k = 0; k < listLensnumber3.Count; k++)
                    {
                        var lenAngle = GetAngle(listLensnumber3[k].X, listLensnumber3[k].Y);
                        if (lenAngle < 0)
                        {
                            lenAngle = 360 + lenAngle;
                        }
                        listLensnumber3[k].angle = lenAngle;
                        var distance = GetDistance(1050, 1050, listLensnumber3[k].X, listLensnumber3[k].Y);
                        if (distance <= 105.63)
                        {
                            listLensnumber3[k].location = "镜头";
                            listLensnumber3[k].R = distance;
                        }
                        else
                        {
                            listLensnumber3[k].location = "斜面";
                            listLensnumber3[k].R = distance;
                        }
                    }
                    //计算镜头4位置及角度
                    var listLensnumber4 = list.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 4);
                    for (int k = 0; k < listLensnumber4.Count; k++)
                    {
                        var lenAngle = GetAngle(listLensnumber4[k].X, listLensnumber4[k].Y);
                        if (lenAngle < 0)
                        {
                            lenAngle = 360 + lenAngle;
                        }
                        listLensnumber4[k].angle = lenAngle;
                        var distance = GetDistance(1050, 1050, listLensnumber4[k].X, listLensnumber4[k].Y);
                        if (distance <= 339.88)
                        {
                            listLensnumber4[k].location = "镜头";
                            listLensnumber4[k].R = distance;
                        }
                        else if (339.88 < distance && distance <= 547.02)
                        {
                            listLensnumber4[k].location = "斜面";
                            listLensnumber4[k].R = distance;
                        }
                        else if (547.02 < distance && distance <= 614.73)
                        {
                            listLensnumber4[k].location = "平面";
                            listLensnumber4[k].R = distance;
                        }
                        else
                        {
                            listLensnumber4[k].location = "区域外";
                            listLensnumber4[k].R = distance;
                        }
                    }
                }
                #endregion
                #region//判断是初检文件夹还是复检文件夹
                if (fileinfos1[i].Name.Contains("初检"))
                {
                    filename = "初检";
                }
                if (fileinfos1[i].Name.Contains("复检"))
                {
                    filename = "复检";
                }
                if (fileinfos1[i].Name.Contains("刮白"))
                {
                    filename = "刮白";
                }
                currPath = directoryInfo1.Parent.Parent.FullName;
                string subPath = currPath + "/" + filename + "合并后" + "/";
                if (false==Directory.Exists(subPath))
                {
                    Directory.CreateDirectory(subPath);
                }
                #endregion
                #region//测试输出设备判断结果
                //var title12 = $"时间戳,设备判断结果";
                //var file12 = $"{directoryInfo1.Parent.FullName}\\{filename + (i + 111)}.csv";
                //File.AppendAllText(file12, title12, Encoding.UTF8);
                //File.AppendAllText(file12, "\r\n");
                //foreach (var item in JudgeListSum)
                //{
                //    var conrent12 = $"{item.TimeTip},{item.JudgmentResult}";
                //    File.AppendAllText(file12, conrent12, Encoding.UTF8);
                //    File.AppendAllText(file12, "\r\n");
                //}
                #endregion
                var title1 = $"时间戳,文件名,判断,可能性,不确定性,高,宽,X,Y,最大尺寸,位置,R,角度,缺陷类型";
                var file1 = $"{subPath}\\{filename + (i+1)}.csv";
                File.AppendAllText(file1, title1, Encoding.UTF8);
                File.AppendAllText(file1, "\r\n");
                #region//计算总数
                //var group1 = list.GroupBy(a => a.TimeTip);
                //var title2 = $"时间戳,总数";
                //var file2 = $"{directoryInfo1.Parent.FullName}\\{ "总数" +( i+1)}.csv";
                //File.AppendAllText(file2, title2, Encoding.UTF8);
                //File.AppendAllText(file2, "\r\n");
                //foreach (var item in group1)
                //{
                //    var content = $"{item.Key},{item.ToList().Count}";
                //    File.AppendAllText(file2, content, Encoding.UTF8);
                //    File.AppendAllText(file2, "\r\n");
                //}
                #endregion
                foreach (var item in list)
                {
                    string result = item.Result ? "OK" : "NG";
                    var content = $"{item.TimeTip},{item.ImageFileName},{result},{item.Probability},{item.Uncertainty},{item.Height},{item.Width},{item.X},{item.Y},{item.ex},{item.location},{ Convert.ToInt32(item.R)},{ Convert.ToInt32(item.angle)},{item.DefectType}";
                    File.AppendAllText(file1, content, Encoding.UTF8);
                    File.AppendAllText(file1, "\r\n");
                }
            }
            var dataGroup1 = listSum.GroupBy(a => a.TimeTip);
            var dataListSum = new List<string>();
            foreach (var item in dataGroup1)
            {
                dataListSum.Add(item.Key);
            }
            dataListSum = dataListSum.Distinct().ToList();
            dataListSum.Sort();
            var dataList = new List<ResultData>();
            var title12 = $"时间戳,相机序号,设备判断结果,缺陷类型,X,Y,最大尺寸,R,位置,角度";
            var file12 = $"{directoryInfo1.Parent.FullName}\\{filename+"设备判断结果"}.csv";
            File.AppendAllText(file12, title12, Encoding.UTF8);
            File.AppendAllText(file12, "\r\n");
            foreach (var item in dataListSum)
            {
                var test11 = JudgeListSum.FindAll(a => a.TimeTip == item&&a.Lensnumber==1);
                if (test11.Count==0)
                {
                    var content11 = $"{item},{1},{"OK"}";
                    File.AppendAllText(file12, content11, Encoding.UTF8);
                    File.AppendAllText(file12, "\r\n");
                }
                else
                {
                    if (test11[0].DefectType=="刮白")
                    {
                        var content11 = $"{item},{1},{test11[0].JudgmentResult},{test11[0].DefectType}";
                        File.AppendAllText(file12, content11, Encoding.UTF8);
                        File.AppendAllText(file12, "\r\n");
                        for (int i = 0; i < test11.Count; i++)
                        {
                            if (test11[i].DefectType=="刮白")
                            {
                                var content111 = $"{""},{""},{""},{""},{test11[i].X},{test11[i].Y},{test11[i].ex},{(int)(test11[i].R)},{test11[i].location},{(int)(test11[i].angle)}";
                                File.AppendAllText(file12, content111, Encoding.UTF8);
                                File.AppendAllText(file12, "\r\n");
                            }
                            else
                            {
                                var content111 = $"{""},{""},{""},{test11[i].DefectType},{test11[i].X},{test11[i].Y},{test11[i].ex},{(int)(test11[i].R)},{test11[i].location},{(int)(test11[i].angle)}";
                                File.AppendAllText(file12, content111, Encoding.UTF8);
                                File.AppendAllText(file12, "\r\n");
                            }
                        }
                    }
                    else
                    {
                        var content11 = $"{item},{1},{test11[0].JudgmentResult},{test11[0].DefectType}";
                        File.AppendAllText(file12, content11, Encoding.UTF8);
                        File.AppendAllText(file12, "\r\n");
                        for (int i = 0; i < test11.Count; i++)
                        {
                            var content111 = $"{""},{""},{""},{""},{test11[i].X},{test11[i].Y},{test11[i].ex},{(int)(test11[i].R)},{test11[i].location},{(int)(test11[i].angle)}";
                            File.AppendAllText(file12, content111, Encoding.UTF8);
                            File.AppendAllText(file12, "\r\n");
                        }
                    }
                }
                var test12 = JudgeListSum.FindAll(a => a.TimeTip == item && a.Lensnumber == 2);
                if (test12.Count == 0)
                {
                    var content11 = $"{""},{2},{"OK"}";
                    File.AppendAllText(file12, content11, Encoding.UTF8);
                    File.AppendAllText(file12, "\r\n");
                }
                else
                {
                    if (test12[0].DefectType == "刮白")
                    {
                        var content11 = $"{""},{2},{test12[0].JudgmentResult},{test12[0].DefectType}";
                        File.AppendAllText(file12, content11, Encoding.UTF8);
                        File.AppendAllText(file12, "\r\n");
                        for (int i = 0; i < test12.Count; i++)
                        {
                            if (test12[i].DefectType == "刮白")
                            {
                                var content111 = $"{""},{""},{""},{""},{test12[i].X},{test12[i].Y},{test12[i].ex},{(int)(test12[i].R)},{test12[i].location},{(int)(test12[i].angle)}";
                                File.AppendAllText(file12, content111, Encoding.UTF8);
                                File.AppendAllText(file12, "\r\n");
                            }
                            else
                            {
                                var content111 = $"{""},{""},{""},{test12[i].DefectType},{test12[i].X},{test12[i].Y},{test12[i].ex},{(int)(test12[i].R)},{test12[i].location},{(int)(test12[i].angle)}";
                                File.AppendAllText(file12, content111, Encoding.UTF8);
                                File.AppendAllText(file12, "\r\n");
                            }
                        }
                    }
                    else
                    {
                        var content11 = $"{""},{2},{test12[0].JudgmentResult},{test12[0].DefectType}";
                        File.AppendAllText(file12, content11, Encoding.UTF8);
                        File.AppendAllText(file12, "\r\n");
                        for (int i = 0; i < test12.Count; i++)
                        {
                            var content111 = $"{""},{""},{""},{""},{test12[i].X},{test12[i].Y},{test12[i].ex},{(int)(test12[i].R)},{test12[i].location},{(int)(test12[i].angle)}";
                            File.AppendAllText(file12, content111, Encoding.UTF8);
                            File.AppendAllText(file12, "\r\n");
                        }
                    }
                }
                var test13 = JudgeListSum.FindAll(a => a.TimeTip == item && a.Lensnumber == 3);
                if (test13.Count == 0)
                {
                    var content11 = $"{""},{3},{"OK"}";
                    File.AppendAllText(file12, content11, Encoding.UTF8);
                    File.AppendAllText(file12, "\r\n");
                }
                else
                {
                    if (test13[0].DefectType == "刮白")
                    {
                        var content11 = $"{""},{3},{test13[0].JudgmentResult},{test13[0].DefectType}";
                        File.AppendAllText(file12, content11, Encoding.UTF8);
                        File.AppendAllText(file12, "\r\n");
                        for (int i = 0; i < test13.Count; i++)
                        {
                            if (test13[i].DefectType == "刮白")
                            {
                                var content111 = $"{""},{""},{""},{""},{test13[i].X},{test13[i].Y},{test13[i].ex},{(int)(test13[i].R)},{test13[i].location},{(int)(test13[i].angle)}";
                                File.AppendAllText(file12, content111, Encoding.UTF8);
                                File.AppendAllText(file12, "\r\n");
                            }
                            else
                            {
                                var content111 = $"{""},{""},{""},{test13[i].DefectType},{test13[i].X},{test13[i].Y},{test13[i].ex},{(int)(test13[i].R)},{test13[i].location},{(int)(test13[i].angle)}";
                                File.AppendAllText(file12, content111, Encoding.UTF8);
                                File.AppendAllText(file12, "\r\n");
                            }
                        }
                        }
                    else
                    {
                        var content11 = $"{""},{3},{test13[0].JudgmentResult},{test13[0].DefectType}";
                        File.AppendAllText(file12, content11, Encoding.UTF8);
                        File.AppendAllText(file12, "\r\n");
                        for (int i = 0; i < test13.Count; i++)
                        {
                            var content111 = $"{""},{""},{""},{""},{test13[i].X},{test13[i].Y},{test13[i].ex},{(int)(test13[i].R)},{test13[i].location},{(int)(test13[i].angle)}";
                            File.AppendAllText(file12, content111, Encoding.UTF8);
                            File.AppendAllText(file12, "\r\n");
                        }
                    }
                }
                var test14 = JudgeListSum.FindAll(a => a.TimeTip == item && a.Lensnumber == 4);
                if (test14.Count == 0)
                {
                    var content11 = $"{""},{4},{"OK"}";
                    File.AppendAllText(file12, content11, Encoding.UTF8);
                    File.AppendAllText(file12, "\r\n");
                }
                else
                {
                    if (test14[0].DefectType == "刮白")
                    {
                        var content11 = $"{""},{4},{test14[0].JudgmentResult},{test14[0].DefectType}";
                        File.AppendAllText(file12, content11, Encoding.UTF8);
                        File.AppendAllText(file12, "\r\n");
                        for (int i = 0; i < test14.Count; i++)
                        {
                            if (test14[i].DefectType == "刮白")
                            {
                                var content111 = $"{""},{""},{""},{""},{test14[i].X},{test14[i].Y},{test14[i].ex},{(int)(test14[i].R)},{test14[i].location},{(int)(test14[i].angle)}";
                                File.AppendAllText(file12, content111, Encoding.UTF8);
                                File.AppendAllText(file12, "\r\n");
                            }
                            else
                            {
                                var content111 = $"{""},{""},{""},{test14[i].DefectType},{test14[i].X},{test14[i].Y},{test14[i].ex},{(int)(test14[i].R)},{test14[i].location},{(int)(test14[i].angle)}";
                                File.AppendAllText(file12, content111, Encoding.UTF8);
                                File.AppendAllText(file12, "\r\n");
                            }
                        }
                    }
                    else
                    {
                        var content11 = $"{""},{4},{test14[0].JudgmentResult},{test14[0].DefectType}";
                        File.AppendAllText(file12, content11, Encoding.UTF8);
                        File.AppendAllText(file12, "\r\n");
                        for (int i = 0; i < test14.Count; i++)
                        {
                            var content111 = $"{""},{""},{""},{""},{test14[i].X},{test14[i].Y},{test14[i].ex},{(int)(test14[i].R)},{test14[i].location},{(int)(test14[i].angle)}";
                            File.AppendAllText(file12, content111, Encoding.UTF8);
                            File.AppendAllText(file12, "\r\n");
                        }
                    }
                }
                //var conrent12 = $"{item},{item}";
                //File.AppendAllText(file12, conrent12, Encoding.UTF8);
                //File.AppendAllText(file12, "\r\n");
            }
            #region//根据产品编号输出总缺陷报表
            var title = $"产品编号,镜头编号,总缺陷数量";
            var file = $"{directoryInfo1.Parent.FullName}\\{filename+ "缺陷总数报表"}.csv";
            File.AppendAllText(file, title, Encoding.UTF8);
            File.AppendAllText(file, "\r\n");
            var listSumGroup = listSum.GroupBy(a => a.TimeTip);
            foreach (var item in listSumGroup)
            {
                var listLensnumber1 = listSum.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 1);
                var listLensnumberCount1 = listLensnumber1.Count;
                var listLensnumber2 = listSum.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 2);
                var listLensnumberCount2 = listLensnumber2.Count;
                var listLensnumber3 = listSum.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 3);
                var listLensnumberCount3 = listLensnumber3.Count;
                var listLensnumber4 = listSum.FindAll(a => a.TimeTip == item.Key && a.Lensnumber == 4);
                var listLensnumberCount4 = listLensnumber4.Count;
                //第一行
                var content1 = $"{item.Key},{1},{listLensnumberCount1}";
                File.AppendAllText(file, content1, Encoding.UTF8);
                File.AppendAllText(file, "\r\n");
                //第二行
                var content2 = $"{""},{2},{listLensnumberCount2}";
                File.AppendAllText(file, content2, Encoding.UTF8);
                File.AppendAllText(file, "\r\n");
                //第三行
                var content3 = $"{""},{3},{listLensnumberCount3}";
                File.AppendAllText(file, content3, Encoding.UTF8);
                File.AppendAllText(file, "\r\n");
                //第四行
                var content4 = $"{""},{4},{listLensnumberCount4}";
                File.AppendAllText(file, content4, Encoding.UTF8);
                File.AppendAllText(file, "\r\n");
            }
            #endregion
        }
        private List<ResultData> CompareFile(FileInfo fileInfo1, FileInfo fileInfo2)
        {
            var allLines1 = File.ReadAllLines(fileInfo1.FullName, Encoding.Default);
            var allLines2 = File.ReadAllLines(fileInfo2.FullName, Encoding.Default);
            List<ResultData> dataList1 = new List<ResultData>();
            List<ResultData> dataList2 = new List<ResultData>();
            if (allLines1.Length>1)
            {
                dataList1 = GetData(allLines1);
            }
            if (allLines2.Length > 1)
            {
                dataList2 = GetData(allLines2);
            }
            #region //将时间戳相同的分为一组并排序
            var dataGroup1 = dataList1.GroupBy(a => a.TimeTip);
            var dataGroup2 = dataList2.GroupBy(a => a.TimeTip);
            var dataListSum = new List<string>();
            foreach (var item in dataGroup1)
            {
                dataListSum.Add(item.Key);
            }
            foreach (var item in dataGroup2)
            {
                dataListSum.Add(item.Key);
            }
            dataListSum = dataListSum.Distinct().ToList();
            dataListSum.Sort();
            #endregion
            var dataList = new List<ResultData>();
            var dataList11 = new List<ResultData>();
            var dataList22 = new List<ResultData>();
            foreach (var item in dataListSum)
            {
                var list1 = dataList1.FindAll(a => a.TimeTip == item && !a.Result);
                var list2 = dataList2.FindAll(a => a.TimeTip == item && !a.Result);
                var itemToRemove = new List<ResultData>();
                #region//计算表格2最大尺寸
                for (int ii = 0; ii < list2.Count; ii++)
                {
                    if (list2[ii].Width > list2[ii].Height)
                    {
                        list2[ii].ex = list2[ii].Width * 0.0042;
                    }
                    else
                    {
                        list2[ii].ex = list2[ii].Height * 0.0042;
                    }
                    var distance = GetDistance(1050, 1050, list2[ii].X, list2[ii].Y);
                    list2[ii].R = distance;
                }
                #endregion
                for (int i = 0; i < list1.Count; i++)
                {
                    #region//计算表格1最大尺寸
                    if (list1[i].Width > list1[i].Height)
                    {
                        list1[i].ex = list1[i].Width * 0.0042;
                    }
                    else
                    {
                        list1[i].ex = list1[i].Height * 0.0042;
                    }
                    var distance1 = GetDistance(1050, 1050, list1[i].X, list1[i].Y);
                    list1[i].R = distance1;
                    #endregion
                    for (int j = 0; j < list2.Count; j++)
                    {
                        var distance = GetDistance(list1[i].X, list1[i].Y, list2[j].X, list2[j].Y);
                        if (distance < 20)
                        {
                            itemToRemove.Add(list2[j]);
                        }
                    }
                }
                for (int i = 0; i < itemToRemove.Count; i++)
                {
                    list2.Remove(itemToRemove[i]);
                }
                dataList11.AddRange(list1);
                dataList22.AddRange(list2);
            }
            dataList.AddRange(dataList1);
            dataList.AddRange(dataList2);
            return dataList;
        }
        //统计设备判断结果
        private List<ResultData> JudgeCompareFile(FileInfo fileInfo1, FileInfo fileInfo2)
        {
            #region  //屏蔽
            //var allLines1 = File.ReadAllLines(fileInfo1.FullName,Encoding.Default);
            //var allLines2 = File.ReadAllLines(fileInfo2.FullName, Encoding.Default);
            ////var dataJudgeList1 = GetJudgeData(allLines1);
            ////var dataJudgeList2 = GetJudgeData(allLines2);
            //List<ResultData> dataJudgeList1 = new List<ResultData>();
            //List<ResultData> dataJudgeList2 = new List<ResultData>();
            //if (allLines1.Length > 1)
            //{
            //    dataJudgeList1 = GetData(allLines1);
            //}
            //if (allLines2.Length > 1)
            //{
            //     dataJudgeList2 = GetData(allLines2);
            //}
            //var dataGroup1 = dataJudgeList1.GroupBy(a => a.TimeTip);
            //var dataGroup2 = dataJudgeList2.GroupBy(a => a.TimeTip);
            //var dataListSum = new List<string>();
            //foreach (var item in dataGroup1)
            //{
            //    dataListSum.Add(item.Key);
            //}
            //foreach (var item in dataGroup2)
            //{
            //    dataListSum.Add(item.Key);
            //}
            //dataListSum = dataListSum.Distinct().ToList();
            //dataListSum.Sort();
            //var dataList = new List<ResultData>();
            //var itemToRemove = new List<ResultData>();
            //foreach (var item in dataListSum)
            //{
            //        var list1 = dataJudgeList1.FindAll(a => a.TimeTip == item && a.JudgmentResult=="NG"&&!a.Result);
            //        var list2 = dataJudgeList2.FindAll(a => a.TimeTip == item && a.JudgmentResult == "NG"&&!a.Result);
            //    for (int i = 0; i < list1.Count; i++)
            //    {
            //        for (int j = 0; j < list2.Count; j++)
            //        {
            //            if (list1[i].JudgmentResult != list2[j].JudgmentResult)
            //            {
            //                list1[i].JudgmentResult = "NG";
            //                list2[j].JudgmentResult = "NG";
            //                itemToRemove.Add(list2[j]);
            //            }
            //            if (list1[i].JudgmentResult == list2[j].JudgmentResult)
            //            {
            //                itemToRemove.Add(list2[j]);
            //            }
            //        }
            //    }
            //    //if (list1.Count ==0&&list2.Count==0)
            //    //{
            //    //    dataList.Add(new ResultData()
            //    //    {
            //    //        TimeTip = item,
            //    //        JudgmentResult = "OK",
            //    //         }); ; ;
            //    //}
            //    dataList.AddRange(list1);
            //    dataList.AddRange(list2);
            //}
            //for (int i = 0; i < itemToRemove.Count; i++)
            //{
            //    dataList.Remove(itemToRemove[i]);
            //}
            #endregion
            var allLines1 = File.ReadAllLines(fileInfo1.FullName, Encoding.Default);
            var allLines2 = File.ReadAllLines(fileInfo2.FullName, Encoding.Default);
            List<ResultData> dataList1 = new List<ResultData>();
            List<ResultData> dataList2 = new List<ResultData>();
            if (allLines1.Length > 1)
            {
                dataList1 = GetData(allLines1);
            }
            if (allLines2.Length > 1)
            {
                dataList2 = GetData(allLines2);
            }
            #region //将时间戳相同的分为一组并排序
            var dataGroup1 = dataList1.GroupBy(a => a.TimeTip);
            var dataGroup2 = dataList2.GroupBy(a => a.TimeTip);
            var dataListSum = new List<string>();
            foreach (var item in dataGroup1)
            {
                dataListSum.Add(item.Key);
            }
            foreach (var item in dataGroup2)
            {
                dataListSum.Add(item.Key);
            }
            dataListSum = dataListSum.Distinct().ToList();
            dataListSum.Sort();
            #endregion
            var dataList = new List<ResultData>();
            var dataList11 = new List<ResultData>();
            var dataList22 = new List<ResultData>();
            foreach (var item in dataListSum)
            {
                var list1 = dataList1.FindAll(a => a.TimeTip == item && !a.Result);
                var list2 = dataList2.FindAll(a => a.TimeTip == item && !a.Result);
                var itemToRemove1 = new List<ResultData>();
                #region//计算表格2最大尺寸
                for (int ii = 0; ii < list2.Count; ii++)
                {
                    if (list2[ii].Width > list2[ii].Height)
                    {
                        list2[ii].ex = list2[ii].Width * 0.0042;
                    }
                    else
                    {
                        list2[ii].ex = list2[ii].Height * 0.0042;
                    }
                    var distance = GetDistance(1050, 1050, list2[ii].X, list2[ii].Y);
                    list2[ii].R = distance;
                }
                #endregion
                for (int i = 0; i < list1.Count; i++)
                {
                    #region//计算表格1最大尺寸
                    if (list1[i].Width > list1[i].Height)
                    {
                        list1[i].ex = list1[i].Width * 0.0042;
                    }
                    else
                    {
                        list1[i].ex = list1[i].Height * 0.0042;
                    }
                    var distance1 = GetDistance(1050, 1050, list1[i].X, list1[i].Y);
                    list1[i].R = distance1;
                    #endregion
                    for (int j = 0; j < list2.Count; j++)
                    {
                        var distance = GetDistance(list1[i].X, list1[i].Y, list2[j].X, list2[j].Y);
                        if (distance < 20)
                        {
                            itemToRemove1.Add(list2[j]);
                            if (list1[i].JudgmentResult!=list2[j].JudgmentResult)
                            {
                                list1[i].JudgmentResult = "NG";
                                list2[j].JudgmentResult = "NG";
                            }
                        }
                    }
                }
                for (int i = 0; i < itemToRemove1.Count; i++)
                {
                    list2.Remove(itemToRemove1[i]);
                }
                dataList11.AddRange(list1);
                dataList22.AddRange(list2);
            }
            //var itemToRemove = new List<ResultData>();
            foreach (var item in dataListSum)
            {
                var list1 = dataList11.FindAll(a => a.TimeTip == item/* && a.JudgmentResult == "NG"*/ );        //不管OK、NG都要输出
                var list2 = dataList22.FindAll(a => a.TimeTip == item /*&& a.JudgmentResult == "NG"*/);         //不管OK、NG都要输出
                //for (int i = 0; i < list1.Count; i++)
                //{
                //    for (int j = 0; j < list2.Count; j++)
                //    {
                //        if (list1[i].JudgmentResult != list2[j].JudgmentResult)
                //        {
                //            list1[i].JudgmentResult = "NG";
                //            list2[j].JudgmentResult = "NG";
                //            itemToRemove.Add(list2[j]);
                //        }
                //        if (list1[i].JudgmentResult == list2[j].JudgmentResult)
                //        {
                //            itemToRemove.Add(list2[j]);
                //        }
                //    }
                //}
                dataList.AddRange(list1);
                dataList.AddRange(list2);
            }
            //for (int i = 0; i < itemToRemove.Count; i++)
            //{
            //    dataList.Remove(itemToRemove[i]);
            //}
            return dataList;
        }
        private List<ResultData> GetData(string[] allLines)
        {
            var dataList = new List<ResultData>();
            var nametemp = allLines[1].Split(',')[0];
            var resulttemp = allLines[1].Split(',')[1];
            //var Ptr = allLines[1].Split(',')[10];
            for (int i = 1; i < allLines.Length; i++)
            {
                var data = allLines[i].Split(',');
                if (data[6]=="-")
                {
                    continue;
                }
                string defectType = "";
                string bbb = "";
                string Ptr = "";
                if (data[0] == "")
                {
                    data[0] = nametemp;
                    data[1] = resulttemp;
                    //data[10] = Ptr;
                }
                if (data[1]== "刮白")
                {
                    defectType = "刮白";
                    bbb = "NG";
                    Ptr = "";
                }
                else
                {
                    defectType = "白点";
                    bbb = data[1];
                    if (data.Length>10)
                    {
                        Ptr = data[10];
                    }
                }
                var data6 = data[6].Split('#').ToList();
                data6.Remove("");
                var temp6 = Convert.ToInt32(data6[0]);
                for (int a6 = 0; a6 < data6.Count; a6++)
                {
                    if (Convert.ToInt32(data6[a6]) > temp6)
                    {
                        temp6 = Convert.ToInt32(data6[a6]);
                    }
                }
                data[6] = Convert.ToString(temp6);
                var data7 = data[7].Split('#').ToList();
                data7.Remove("");
                var temp7 = Convert.ToInt32(data7[0]);
                for (int a7 = 0; a7 < data7.Count; a7++)
                {
                    if (Convert.ToInt32(data7[a7]) > temp7)
                    {
                        temp7 = Convert.ToInt32(data7[a7]);
                    }
                }
                data[7] = Convert.ToString(temp7);
                dataList.Add(new ResultData()
                {
                    TimeTip = data[0].Split('-')[0],
                    ImageFileName = data[0],
                    JudgmentResult = bbb,
                    Result = data[3] == "OK",
                    Probability = Convert.ToDouble(data[4]),
                    Uncertainty = Convert.ToDouble(data[5]),
                    //Height = Convert.ToDouble(data[6].Replace("#", "").Replace("-", "")),
                    //Width = Convert.ToDouble(data[7].Replace("#", "").Replace("-", "")),
                    Height = Convert.ToDouble(data[6]),
                    Width = Convert.ToDouble(data[7]),
                    X = Convert.ToDouble(data[8].Replace("#", "").Replace("-", "")),
                    Y = Convert.ToDouble(data[9].Replace("#", "").Replace("-", "")),
                    DefectType = defectType,
                    PostTreatmentResults = Ptr,
                }) ; ; ;
                nametemp = data[0];
                resulttemp= data[1];
            }
            return dataList;
        }
        //private List<ResultData> GetJudgeData(string[] allLines)
        //{
        //    var dataList = new List<ResultData>();
        //    for (int i = 1; i < allLines.Length; i++)
        //    {
        //        var data = allLines[i].Split(',');
        //        string defectType = "";
        //        string aaa = "";
        //        if (data[0] != "")
        //        {
        //            try
        //            {
        //                defectType = data[10];
        //            }
        //            catch (Exception)
        //            {
        //                defectType = "刮白";
        //                aaa = "NG";
        //            }
        //            dataList.Add(new ResultData()
        //            {
        //                TimeTip = data[0].Split('-')[0],
        //                JudgmentResult = aaa,
        //                DefectType= defectType,
        //            }); ; ;
        //        }
        //    }
        //    return dataList;
        //}
        private double GetDistance(double x1, double y1, double x2, double y2)
        {
            return Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2));
        }
        private double GetAngle(double x1, double y1)
        {
            return Math.Atan2((y1 - 1050), (x1 - 1050)) * (180 / Math.PI);
        }
    }
    public class ResultData
    {
        public string TimeTip = "";
        public string JudgmentResult = "";
        public string ImageFileName = "";
        public bool Result = true;
        public int Lensnumber = 0;
        public double Probability = 0;
        public double Uncertainty = 0;
        public double Height = 0;
        public double Width = 0;
        public double X = 0;
        public double Y = 0;
        public double ex = 0;
        public string location = "";
        public double angle = 0;
        public double R = 0;
        public string DefectType = "";
        public string PostTreatmentResults = "";
    }
}
P066.Data/Form1.resx
New file
@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Version 2.0
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    associated with the data types.
    Example:
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
    There are any number of "resheader" rows that contain simple
    name/value pairs.
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    mimetype set.
    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    extensible. For a given mimetype the value must be set accordingly:
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    read any of the formats listed below.
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <metadata name="folderBrowserDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>17, 17</value>
  </metadata>
</root>
P066.Data/P066.Data.csproj
New file
@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{8B8F7749-8823-48C6-B12A-54979E28C10C}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <RootNamespace>P066.Data</RootNamespace>
    <AssemblyName>P066.Data</AssemblyName>
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <Deterministic>true</Deterministic>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Deployment" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Form1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="Form1.Designer.cs">
      <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
    <Compile Include="Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <EmbeddedResource Include="Form1.resx">
      <DependentUpon>Form1.cs</DependentUpon>
    </EmbeddedResource>
    <EmbeddedResource Include="Properties\Resources.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <Compile Include="Properties\Resources.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Resources.resx</DependentUpon>
    </Compile>
    <None Include="Properties\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
    </None>
    <Compile Include="Properties\Settings.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <DesignTimeSharedInput>True</DesignTimeSharedInput>
    </Compile>
  </ItemGroup>
  <ItemGroup>
    <None Include="App.config" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
P066.Data/P066Êý¾Ý·ÖÎö³ÌÐò.csproj
New file
@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{8B8F7749-8823-48C6-B12A-54979E28C10C}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <RootNamespace>P066.Data</RootNamespace>
    <AssemblyName>P066.Data</AssemblyName>
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <Deterministic>true</Deterministic>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Deployment" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Form1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="Form1.Designer.cs">
      <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
    <Compile Include="Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <EmbeddedResource Include="Form1.resx">
      <DependentUpon>Form1.cs</DependentUpon>
    </EmbeddedResource>
    <EmbeddedResource Include="Properties\Resources.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
      <SubType>Designer</SubType>
    </EmbeddedResource>
    <Compile Include="Properties\Resources.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Resources.resx</DependentUpon>
    </Compile>
    <None Include="Properties\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
    </None>
    <Compile Include="Properties\Settings.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <DesignTimeSharedInput>True</DesignTimeSharedInput>
    </Compile>
  </ItemGroup>
  <ItemGroup>
    <None Include="App.config" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
P066.Data/Program.cs
New file
@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace P066.Data
{
    static class Program
    {
        /// <summary>
        /// åº”用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
P066.Data/Properties/AssemblyInfo.cs
New file
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// æœ‰å…³ç¨‹åºé›†çš„一般信息由以下
// æŽ§åˆ¶ã€‚更改这些特性值可修改
// ä¸Žç¨‹åºé›†å…³è”的信息。
[assembly: AssemblyTitle("P066.Data")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("P066.Data")]
[assembly: AssemblyCopyright("Copyright Â©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// å°† ComVisible è®¾ç½®ä¸º false ä¼šä½¿æ­¤ç¨‹åºé›†ä¸­çš„类型
//对 COM ç»„件不可见。如果需要从 COM è®¿é—®æ­¤ç¨‹åºé›†ä¸­çš„类型
//请将此类型的 ComVisible ç‰¹æ€§è®¾ç½®ä¸º true。
[assembly: ComVisible(false)]
// å¦‚果此项目向 COM å…¬å¼€ï¼Œåˆ™ä¸‹åˆ— GUID ç”¨äºŽç±»åž‹åº“çš„ ID
[assembly: Guid("8b8f7749-8823-48c6-b12a-54979e28c10c")]
// ç¨‹åºé›†çš„版本信息由下列四个值组成:
//
//      ä¸»ç‰ˆæœ¬
//      æ¬¡ç‰ˆæœ¬
//      ç”Ÿæˆå·
//      ä¿®è®¢å·
//
// å¯ä»¥æŒ‡å®šæ‰€æœ‰å€¼ï¼Œä¹Ÿå¯ä»¥ä½¿ç”¨ä»¥ä¸‹æ‰€ç¤ºçš„ "*" é¢„置版本号和修订号
// æ–¹æ³•是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
P066.Data/Properties/Resources.Designer.cs
New file
@@ -0,0 +1,71 @@
//------------------------------------------------------------------------------
// <auto-generated>
//     æ­¤ä»£ç ç”±å·¥å…·ç”Ÿæˆã€‚
//     è¿è¡Œæ—¶ç‰ˆæœ¬: 4.0.30319.42000
//
//     å¯¹æ­¤æ–‡ä»¶çš„æ›´æ”¹å¯èƒ½å¯¼è‡´ä¸æ­£ç¡®çš„行为,如果
//     é‡æ–°ç”Ÿæˆä»£ç ï¼Œåˆ™æ‰€åšæ›´æ”¹å°†ä¸¢å¤±ã€‚
// </auto-generated>
//------------------------------------------------------------------------------
namespace P066.Data.Properties
{
    /// <summary>
    ///   å¼ºç±»åž‹èµ„源类,用于查找本地化字符串等。
    /// </summary>
    // æ­¤ç±»æ˜¯ç”± StronglyTypedResourceBuilder
    // ç±»é€šè¿‡ç±»ä¼¼äºŽ ResGen æˆ– Visual Studio çš„工具自动生成的。
    // è‹¥è¦æ·»åŠ æˆ–åˆ é™¤æˆå‘˜ï¼Œè¯·ç¼–è¾‘ .ResX æ–‡ä»¶ï¼Œç„¶åŽé‡æ–°è¿è¡Œ ResGen
    // (以 /str ä½œä¸ºå‘½ä»¤é€‰é¡¹),或重新生成 VS é¡¹ç›®ã€‚
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    internal class Resources
    {
        private static global::System.Resources.ResourceManager resourceMan;
        private static global::System.Globalization.CultureInfo resourceCulture;
        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
        internal Resources()
        {
        }
        /// <summary>
        ///   è¿”回此类使用的缓存 ResourceManager å®žä¾‹ã€‚
        /// </summary>
        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
        internal static global::System.Resources.ResourceManager ResourceManager
        {
            get
            {
                if ((resourceMan == null))
                {
                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("P066.Data.Properties.Resources", typeof(Resources).Assembly);
                    resourceMan = temp;
                }
                return resourceMan;
            }
        }
        /// <summary>
        ///   è¦†ç›–当前线程的 CurrentUICulture å±žæ€§
        ///   ä½¿ç”¨æ­¤å¼ºç±»åž‹çš„资源类的资源查找。
        /// </summary>
        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
        internal static global::System.Globalization.CultureInfo Culture
        {
            get
            {
                return resourceCulture;
            }
            set
            {
                resourceCulture = value;
            }
        }
    }
}
P066.Data/Properties/Resources.resx
New file
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Version 2.0
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    associated with the data types.
    Example:
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
    There are any number of "resheader" rows that contain simple
    name/value pairs.
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    mimetype set.
    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    extensible. For a given mimetype the value must be set accordingly:
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    read any of the formats listed below.
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with
            : System.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
</root>
P066.Data/Properties/Settings.Designer.cs
New file
@@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.42000
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace P066.Data.Properties
{
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
    {
        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
        public static Settings Default
        {
            get
            {
                return defaultInstance;
            }
        }
    }
}
P066.Data/Properties/Settings.settings
New file
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
  <Profiles>
    <Profile Name="(Default)" />
  </Profiles>
  <Settings />
</SettingsFile>
P066Êý¾Ý·ÖÎö³ÌÐò.sln
New file
@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30225.117
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "P066数据分析程序", "P066.Data\P066数据分析程序.csproj", "{8B8F7749-8823-48C6-B12A-54979E28C10C}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Release|Any CPU = Release|Any CPU
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {8B8F7749-8823-48C6-B12A-54979E28C10C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {8B8F7749-8823-48C6-B12A-54979E28C10C}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {8B8F7749-8823-48C6-B12A-54979E28C10C}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {8B8F7749-8823-48C6-B12A-54979E28C10C}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {9015AB30-DC50-4705-A9A7-45C14C06313E}
    EndGlobalSection
EndGlobal