ResultsView.cs 175 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915
  1. using Microsoft.Office.Core;
  2. using OpenCvSharp;
  3. using Resources;
  4. using SmartCoalApplication.Annotation;
  5. using SmartCoalApplication.Annotation.Enum;
  6. using SmartCoalApplication.Annotation.Measure;
  7. using SmartCoalApplication.AutomaticMeasurement.Model;
  8. using SmartCoalApplication.Base;
  9. using SmartCoalApplication.Base.AutoMeasure;
  10. using SmartCoalApplication.Base.CommTool;
  11. using SmartCoalApplication.Base.FunctionModel;
  12. using SmartCoalApplication.Base.MeasureModel;
  13. using SmartCoalApplication.Core;
  14. using SmartCoalApplication.Core.CustomControl;
  15. using SmartCoalApplication.Core.DbOpreate.DbModel;
  16. using SmartCoalApplication.PluginAssemblys;
  17. using SmartCoalApplication.Resources;
  18. using SPCwebServiceDll;
  19. using System;
  20. using System.Collections.Generic;
  21. using System.Data;
  22. using System.Drawing;
  23. using System.Drawing.Drawing2D;
  24. using System.Drawing.Imaging;
  25. using System.Dynamic;
  26. using System.IO;
  27. using System.Linq;
  28. using System.Reflection;
  29. using System.Text.RegularExpressions;
  30. using System.Windows.Forms;
  31. using static SmartCoalApplication.AutomaticMeasurement.Model.SpcApiSchemesModel;
  32. using Excel = Microsoft.Office.Interop.Excel;
  33. namespace SmartCoalApplication.AutomaticMeasurement
  34. {
  35. public partial class ResultsView : PdnBaseForm
  36. {
  37. /// <summary>
  38. /// 分析结果图集合
  39. /// </summary>
  40. private List<MeasureInfoResultModel> resultMatList = new List<MeasureInfoResultModel>();
  41. /// <summary>
  42. /// 分析结果图集合
  43. /// </summary>
  44. private List<MeasureInfoResultModel> realResultMatList = new List<MeasureInfoResultModel>();
  45. private MeasureInfoModel infoModel = new MeasureInfoModel();
  46. /// <summary>
  47. /// 图像面板
  48. /// </summary>
  49. private DocumentWorkspaceWindow documentWorkspace;
  50. private Bitmap bitmap;
  51. private AppWorkspace appWorkspace;
  52. private CommonControlButtons commonControlButtons;
  53. private int selectedNum = 0;
  54. private MeasureMaintenanceType measureMaintenanceType;
  55. private MeasureMaintenanceTreeData measureMaintenanceTypeList;
  56. private Dictionary<string, Dictionary<string, double>> pidRuleDic;
  57. private Dictionary<string, List<string>> LineShowDic = new Dictionary<string, List<string>>();
  58. private int successNum = 0;
  59. private int failNum = 0;
  60. private string filePath;
  61. private Dictionary<int, GraphicsList> graphicsListDic = new Dictionary<int, GraphicsList>();
  62. //像素跟踪窗口
  63. private PixelTrackingDialog pixelTrackingDialog;
  64. private bool pixelTrackingEnabled = false;
  65. /// <summary>
  66. /// hint 提示信息
  67. /// </summary>
  68. private ToolTip toolTip;
  69. /// <summary>
  70. /// SPC接口 字段配置方案
  71. /// </summary>
  72. private SpcApiSchemesModel spcApiSchemesModel = new SpcApiSchemesModel();
  73. /// <summary>
  74. /// 公式符号
  75. /// </summary>
  76. private string[] symbolArray = new string[] { "+", "-", "*", "/" };
  77. private Dictionary<string, string> _listHoleType;
  78. private NameRuleListDetails thisNameRuleListDetails;
  79. private bool isSPCItemNull = false;
  80. private List<MeasureInfoResultModel> hasDelResultMatList = new List<MeasureInfoResultModel>();
  81. /// <summary>
  82. /// 辅助线的横线和竖线
  83. /// </summary>
  84. private GraphicsPath path, path1;
  85. internal ResultsView(MeasureInfoModel infoModel, List<MeasureInfoResultModel> measureInfoResultModels, AppWorkspace appWorkspace, BeingExecuted beingExecuted, Dictionary<string, string> _listHoleType)
  86. {
  87. this.resultMatList.AddRange(measureInfoResultModels);
  88. this.realResultMatList.AddRange(measureInfoResultModels);
  89. this.infoModel = infoModel;
  90. InitializeComponent();
  91. InitializeComponent2();
  92. this._listHoleType = _listHoleType;
  93. this.FormClosing += new FormClosingEventHandler(ResultsViewClosing);
  94. this.comboStatus.Items.AddRange(new object[] {
  95. PdnResources.GetString("NewWhole"),
  96. PdnResources.GetString("NewNormal"),
  97. PdnResources.GetString("NewAbnormal")});
  98. InitializeCombo();
  99. this.Icon = PdnInfo.AppIcon;
  100. this.filePath = beingExecuted.filePath;
  101. this.measureMaintenanceType = beingExecuted.measureMaintenanceType;
  102. this.pidRuleDic = beingExecuted.pidRuleDic;
  103. #region [组织应该展示的线 去除不应该展示的线]
  104. foreach (var item in this.measureMaintenanceType.MeasureMaintenanceTreeFourthDataList)
  105. {
  106. if (this.LineShowDic.ContainsKey(item.HoleTypeId))
  107. {
  108. foreach (var item2 in item.FormulaExpressionLineID)
  109. {
  110. if (!this.LineShowDic[item.HoleTypeId].Contains(item2))
  111. {
  112. this.LineShowDic[item.HoleTypeId].Add(item2);
  113. }
  114. }
  115. }
  116. else
  117. {
  118. List<string> list = new List<string>();
  119. foreach (var item2 in item.FormulaExpressionLineID)
  120. {
  121. if (!list.Contains(item2))
  122. {
  123. list.Add(item2);
  124. }
  125. }
  126. this.LineShowDic.Add(item.HoleTypeId, list);
  127. }
  128. }
  129. foreach (var item in resultMatList)
  130. {
  131. List<DataInfor> removeList = new List<DataInfor>();
  132. if (this.LineShowDic.ContainsKey(item.parentId))
  133. {
  134. foreach (var item2 in item.dataInforList)
  135. {
  136. if (!this.LineShowDic[item.parentId].Contains(item2.ID))
  137. {
  138. removeList.Add(item2);
  139. }
  140. }
  141. foreach (var item2 in removeList)
  142. {
  143. item.dataInforList.Remove(item2);
  144. }
  145. }
  146. }
  147. #endregion [组织应该展示的线 去除不应该展示的线]
  148. measureInfoResultModels.Clear();
  149. beingExecuted.Close();
  150. beingExecuted.Dispose();
  151. infoModel = null;
  152. GC.Collect();
  153. this.appWorkspace = appWorkspace;
  154. #region [搜索项下拉选]
  155. string filePath;
  156. if (Program.instance.configModel.Language == 1)
  157. {
  158. filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\basicTreeDataSimple.xml";
  159. }
  160. else
  161. {
  162. filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\basicTreeDataTraditional.xml";
  163. }
  164. if (System.IO.File.Exists(filePath))
  165. {
  166. MeasureMaintenanceTreeSpecificData measureMaintenanceTreeSpecificData = new MeasureMaintenanceTreeSpecificData();
  167. measureMaintenanceTreeSpecificData.MeasureMaintenanceTreeSpecificDataId = "0";
  168. measureMaintenanceTreeSpecificData.MeasureMaintenanceTreeSpecificName = "全部";
  169. List<MeasureMaintenanceTreeSpecificData> measureMaintenanceTypes = new List<MeasureMaintenanceTreeSpecificData>() { measureMaintenanceTreeSpecificData };
  170. measureMaintenanceTypeList = XmlSerializeHelper.DESerializer<MeasureMaintenanceTreeData>(FileOperationHelper.ReadStringFromFile(filePath, FileMode.Open));
  171. var selectedList = resultMatList.GroupBy(m => m.parentId);
  172. foreach (var item in selectedList)
  173. {
  174. MeasureMaintenanceTreeSpecificData sonData;
  175. this.appWorkspace.RecursionGetData(item.Key, measureMaintenanceTypeList.MeasureMaintenanceTreeDataList, out sonData);
  176. if (sonData != null)
  177. {
  178. measureMaintenanceTypes.Add(sonData);
  179. }
  180. }
  181. this.comboClassification.SelectedIndexChanged -= new System.EventHandler(this.comboClassification_SelectedIndexChanged);
  182. comboClassification.DataSource = measureMaintenanceTypes;
  183. comboClassification.DisplayMember = "MeasureMaintenanceTreeSpecificName";
  184. this.comboClassification.SelectedIndexChanged += new System.EventHandler(this.comboClassification_SelectedIndexChanged);
  185. }
  186. #endregion [搜索项下拉选]
  187. #region [图片集合初始化]
  188. InitPicList();
  189. #endregion [图片集合初始化]
  190. #region [图像面板相关]
  191. //
  192. //初始化图像控件
  193. //
  194. this.documentWorkspace = new DocumentWorkspaceWindow(this.appWorkspace, 1);
  195. this.documentWorkspace.Cursor = Cursors.Default;
  196. this.documentWorkspace.Dock = DockStyle.Fill;
  197. //this.documentWorkspace.HookMouseEvents();
  198. this.documentWorkspace.Visible = true;
  199. //this.documentWorkspace.panel.Click += new EventHandler(this.documentWorkspace_panel_Click);
  200. //this.documentWorkspace.panel.MouseDown += new MouseEventHandler(this.documentWorkspace_panel_MouseDown);
  201. //this.documentWorkspace.panel.Paint += new PaintEventHandler(this.panelPaint);
  202. this.documentWorkspace.panel.MouseMove += new MouseEventHandler(this.documentWorkspace_panel_MouseMove);
  203. this.documentWorkspace.panel.MouseWheel += new MouseEventHandler(this.documentWorkspace_panel_MouseWheel);
  204. this.documentWorkspace.panel.MouseUp += new MouseEventHandler(this.documentWorkspace_panel_MouseUp);
  205. this.groupBox4.Controls.Add(this.documentWorkspace);
  206. PdnBaseForm.RegisterFormHotKey(Keys.Delete, OnDeleteHotKeyPressed);
  207. #endregion [图像面板相关]
  208. this.commonControlButtons = new CommonControlButtons(this.documentWorkspace.Width - 25);
  209. this.commonControlButtons.Dock = DockStyle.Top;
  210. this.commonControlButtons.Height = 30;
  211. this.commonControlButtons.HideZoomToWindowAndActualSize();
  212. this.commonControlButtons.ShowRight();
  213. this.groupBox4.Controls.Add(commonControlButtons);
  214. InitCommonButtonEvent();
  215. label3.Visible = false;
  216. label4.Visible = false;
  217. label5.Visible = false;
  218. this.Resize += new EventHandler(DialogResize);
  219. this.Shown += new EventHandler(shownMethod);
  220. this.toolTip = new ToolTip();
  221. var oldNameRuleListDetails = Program.instance.fileNameRule.NameRuleList.Where(m => m.ID == this.measureMaintenanceType.NameRuleID).FirstOrDefault();
  222. this.yuLan(oldNameRuleListDetails);
  223. }
  224. public void yuLan(NameRuleListDetails nameRuleListDetails)
  225. {
  226. if (nameRuleListDetails == null)
  227. {
  228. this.textBox5.Text = DateTime.Now.ToString("yyyyMMddhhmmss") + "切片报告.xls";
  229. return;
  230. }
  231. string ruleName = string.Empty;
  232. string ruleGain = string.Empty;
  233. if (this.measureMaintenanceType.ruleMessage != null)
  234. {
  235. ruleName = this.measureMaintenanceType.ruleMessage.ruleName;
  236. ruleGain = this.measureMaintenanceType.ruleMessage.ruleGain.ToString();
  237. }
  238. else
  239. {
  240. List<mic_rulers> list = Program.instance.mic_rulersAll;
  241. var ruler = list.Where(m => m.id.Equals(Program.instance.configModel.RulerId)).FirstOrDefault();
  242. if (ruler != null)
  243. {
  244. ruleName = ruler.ruler_name;
  245. ruleGain = ruler.gain_multiple.ToString();
  246. }
  247. }
  248. NamingRuleHelper namingRuleHelper = new NamingRuleHelper();
  249. this.textBox5.Text = namingRuleHelper.GetNameFromXml(nameRuleListDetails, ruleName, ruleGain, this.measureMaintenanceType, "") + ".xls";
  250. }
  251. private void ResultsViewClosing(object sender, FormClosingEventArgs e)
  252. {
  253. this.realResultMatList.Clear();
  254. this.resultMatList.Clear();
  255. this.hasDelResultMatList.Clear();
  256. GC.Collect();
  257. }
  258. private void InitializeComponent2()
  259. {
  260. this.Text = PdnResources.GetString("NewResultsView");
  261. this.groupBox1.Text = PdnResources.GetString("NewOperation");
  262. this.checkBox2.Text = PdnResources.GetString("NewDisplayDrawingRange");
  263. this.checkBox1.Text = PdnResources.GetString("NewOpenReport");
  264. this.checkBox3.Text = PdnResources.GetString("ResultView.checkBox3"); // 开启像素追踪
  265. this.button1.Text = PdnResources.GetString("ResultView.button1"); // 再次分析
  266. this.button2.Text = PdnResources.GetString("ResultView.button2"); // 绘制范围
  267. this.button3.Text = PdnResources.GetString("ResultView.button3"); // 全选
  268. this.button4.Text = PdnResources.GetString("ResultView.button4"); // 全不选
  269. this.button5.Text = PdnResources.GetString("ResultView.button5"); // 反选
  270. this.button6.Text = PdnResources.GetString("ResultView.button6"); // 命名规则
  271. this.buttonGenerateReport.Text = PdnResources.GetString("NewGenerateReport"); // 生成报告
  272. this.label2.Text = PdnResources.GetString("NewStatus") + ":";
  273. this.label1.Text = PdnResources.GetString("NewClassification") + ":";
  274. this.groupBox2.Text = PdnResources.GetString("Newlist");
  275. this.groupBox3.Text = PdnResources.GetString("NewAddSketchLine");
  276. this.groupBox4.Text = PdnResources.GetString("NewPicture");
  277. this.checkBox4.Text = PdnResources.GetString("ResultView.checkBox4");
  278. this.button7.Text = PdnResources.GetString("NewSelectTemplate");
  279. }
  280. private void documentWorkspace_panel_MouseWheel(object sender, MouseEventArgs e)
  281. {
  282. }
  283. private void shownMethod(object sender, EventArgs e)
  284. {
  285. #region [默认选中]
  286. int choose = 0;
  287. foreach (var item in this.resultMatList)
  288. {
  289. if (item.dataInforList.Where(m => m.value == 0).ToList().Count() > 0)
  290. {
  291. choose = this.resultMatList.IndexOf(item);
  292. break;
  293. }
  294. }
  295. if (this.listView1.Items.Count > 0)
  296. {
  297. this.listView1.Focus();
  298. //滚动到指定的行位置
  299. this.listView1.EnsureVisible(choose);
  300. this.listView1.Items[choose].Focused = true;
  301. this.listView1.Items[choose].Selected = true;
  302. if (choose == 0)
  303. {
  304. listView1_SelectedIndexChanged(null, null);
  305. }
  306. }
  307. #endregion [默认选中]
  308. }
  309. private void DialogResize(object sender, EventArgs e)
  310. {
  311. this.commonControlButtons.reset(this.documentWorkspace.Width - 25);
  312. }
  313. private bool OnDeleteHotKeyPressed(Keys keys)
  314. {
  315. if (this.listView1.SelectedItems == null || this.listView1.SelectedItems.Count == 0)
  316. {
  317. return false;
  318. }
  319. if (this.listView1.SelectedItems.Count > 1) {
  320. var index = this.listView1.SelectedItems[0].Index;
  321. this.listView1.Items[index].Focused = true;
  322. }
  323. if (this.listView1.FocusedItem != null && this.listView1.FocusedItem.Selected)
  324. {
  325. string id = this.listView1.FocusedItem.Tag.ToString();
  326. var result = this.resultMatList.Where(m => m.ID == id).FirstOrDefault();
  327. int index = 0;
  328. if (result != null)
  329. {
  330. index = this.resultMatList.IndexOf(result);
  331. }
  332. if (this.documentWorkspace.GraphicsList != null && this.documentWorkspace.GraphicsList.Count > 0)
  333. {
  334. var list = this.resultMatList[index].dataInforList.Where(m => m.deleteFlag == 2).ToList();
  335. for (int i = this.documentWorkspace.GraphicsList.Count - 1; i >= 0; i--)
  336. {
  337. if (this.documentWorkspace.GraphicsList[i].objectType != DrawClass.Measure)
  338. {
  339. continue;
  340. }
  341. if (this.documentWorkspace.GraphicsList[i].Selected == true)
  342. {
  343. var data = list.Where(m => m.aliasName == ((MeasureDrawObject)this.documentWorkspace.GraphicsList[i]).aliasName).FirstOrDefault();
  344. if (data != null)
  345. {
  346. int dataIndex = list.IndexOf(data);
  347. list[dataIndex].value = 0;
  348. list[dataIndex].deleteFlag = 1;
  349. list[dataIndex].point1 = new System.Drawing.Point(0, 0);
  350. list[dataIndex].point2 = new System.Drawing.Point(0, 0);
  351. this.documentWorkspace.GraphicsList.RemoveObj(this.documentWorkspace.GraphicsList[i]);
  352. }
  353. }
  354. }
  355. InitButtonList();
  356. }
  357. this.successNum = this.resultMatList[index].dataInforList.Where(m => m.value != 0).Count();
  358. this.failNum = this.resultMatList[index].dataInforList.Where(m => m.value == 0).Count();
  359. label4.Text = $"已绘制{this.successNum}条";
  360. label5.Text = $"剩余{this.failNum}条";
  361. #region [重置列表]
  362. //this.imageList1.Images.Clear();
  363. //this.listView1.Items.Clear();
  364. //InitPicList();
  365. //this.listView1.Focus();
  366. ////滚动到指定的行位置
  367. //this.listView1.EnsureVisible(index);
  368. //this.listView1.Items[index].Focused = true;
  369. //this.listView1.Items[index].Selected = true;
  370. this.listView1.Items[index].BackColor = this.resultMatList[index].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
  371. this.listView1.Refresh();
  372. #endregion [重置列表]
  373. this.documentWorkspace.Refresh();
  374. }
  375. return true;
  376. }
  377. #region 公共按钮
  378. private void InitCommonButtonEvent()
  379. {
  380. this.commonControlButtons.zoomInButton.Click += new EventHandler(zoomInButton_Click);
  381. this.commonControlButtons.zoomOutButton.Click += new EventHandler(zoomOutButton_Click);
  382. this.commonControlButtons.zoomToWindowButton.Click += new EventHandler(zoomToWindowButton_Click);
  383. this.commonControlButtons.actualSizeButton.Click += new EventHandler(actualSizeButton_Click);
  384. this.commonControlButtons.pointerButton.Click += new EventHandler(pointerButton_Click);
  385. this.commonControlButtons.mobileModeButton.Click += new EventHandler(mobileModeButton_Click);
  386. this.commonControlButtons.zoomInFirst.Click += new EventHandler(zoomInFirst_Click);
  387. this.commonControlButtons.zoomInLast.Click += new EventHandler(zoomInLast_Click);
  388. this.commonControlButtons.zoomInNext.Click += new EventHandler(zoomInNext_Click);
  389. this.commonControlButtons.zoomInZuihou.Click += new EventHandler(zoomInZuihou_Click);
  390. }
  391. private void zoomInFirst_Click(object sender, EventArgs e)
  392. {
  393. if (listView1.Items.Count > 0)
  394. {
  395. listView1.Focus();
  396. listView1.SelectedItems.Clear();
  397. //滚动到指定的行位置
  398. this.listView1.EnsureVisible(0);
  399. this.listView1.Items[0].Focused = true;
  400. this.listView1.Items[0].Selected = true;
  401. }
  402. }
  403. private void zoomInLast_Click(object sender, EventArgs e)
  404. {
  405. if (this.listView1.SelectedItems == null || this.listView1.SelectedItems.Count == 0)
  406. {
  407. return;
  408. }
  409. if (this.listView1.SelectedItems.Count > 1)
  410. {
  411. var index = this.listView1.SelectedItems[0].Index;
  412. this.listView1.SelectedItems.Clear();
  413. this.listView1.Items[index].Focused = true;
  414. this.listView1.Items[index].Selected = true;
  415. }
  416. if (this.listView1.FocusedItem != null && this.listView1.FocusedItem.Selected)
  417. {
  418. int index = this.listView1.FocusedItem.Index;
  419. if (index != 0)
  420. {
  421. listView1.Focus();
  422. listView1.SelectedItems.Clear();
  423. //滚动到指定的行位置
  424. this.listView1.EnsureVisible(index - 1);
  425. this.listView1.Items[index - 1].Focused = true;
  426. this.listView1.Items[index - 1].Selected = true;
  427. }
  428. }
  429. }
  430. private void zoomInNext_Click(object sender, EventArgs e)
  431. {
  432. if (this.listView1.SelectedItems == null || this.listView1.SelectedItems.Count == 0)
  433. {
  434. return;
  435. }
  436. if (this.listView1.SelectedItems.Count > 1)
  437. {
  438. var index = this.listView1.SelectedItems[this.listView1.SelectedItems.Count - 1].Index;
  439. this.listView1.SelectedItems.Clear();
  440. this.listView1.Items[index].Focused = true;
  441. this.listView1.Items[index].Selected = true;
  442. }
  443. if (this.listView1.FocusedItem != null && this.listView1.FocusedItem.Selected)
  444. {
  445. if (this.listView1.FocusedItem != null && this.listView1.FocusedItem.Selected)
  446. {
  447. int index = this.listView1.FocusedItem.Index;
  448. if (index != this.listView1.Items.Count - 1)
  449. {
  450. listView1.Focus();
  451. listView1.SelectedItems.Clear();
  452. //滚动到指定的行位置
  453. this.listView1.EnsureVisible(index + 1);
  454. this.listView1.Items[index + 1].Focused = true;
  455. this.listView1.Items[index + 1].Selected = true;
  456. }
  457. }
  458. }
  459. }
  460. private void zoomInZuihou_Click(object sender, EventArgs e)
  461. {
  462. if (listView1.Items.Count > 0)
  463. {
  464. listView1.Focus();
  465. listView1.SelectedItems.Clear();
  466. //滚动到指定的行位置
  467. this.listView1.EnsureVisible(this.listView1.Items.Count - 1);
  468. this.listView1.Items[this.listView1.Items.Count - 1].Focused = true;
  469. this.listView1.Items[this.listView1.Items.Count - 1].Selected = true;
  470. }
  471. }
  472. private void zoomInButton_Click(object sender, EventArgs e)
  473. {
  474. if (this.bitmap != null)
  475. this.documentWorkspace.ZoomIn();
  476. }
  477. private void zoomOutButton_Click(object sender, EventArgs e)
  478. {
  479. if (this.bitmap != null)
  480. this.documentWorkspace.ZoomOut();
  481. }
  482. private void zoomToWindowButton_Click(object sender, EventArgs e)
  483. {
  484. this.documentWorkspace.ZoomBasis = ZoomBasis.FitToWindow;
  485. }
  486. private void actualSizeButton_Click(object sender, EventArgs e)
  487. {
  488. this.documentWorkspace.ZoomBasis = ZoomBasis.ScaleFactor;
  489. this.documentWorkspace.ScaleFactor = ScaleFactor.OneToOne;
  490. }
  491. private void pointerButton_Click(object sender, EventArgs e)
  492. {
  493. this.documentWorkspace.ActiveTool = Annotation.Enum.DrawToolType.Pointer;
  494. }
  495. private void mobileModeButton_Click(object sender, EventArgs e)
  496. {
  497. this.documentWorkspace.ActiveTool = Annotation.Enum.DrawToolType.MoveMode;
  498. }
  499. #endregion 公共按钮
  500. //下拉列表初始化
  501. private void InitializeCombo()
  502. {
  503. this.comboStatus.SelectedIndexChanged -= new System.EventHandler(this.comboStatus_SelectedIndexChanged);
  504. comboStatus.SelectedIndex = 0;
  505. this.comboStatus.SelectedIndexChanged += new System.EventHandler(this.comboStatus_SelectedIndexChanged);
  506. }
  507. public void InitPicList()
  508. {
  509. //初始化图片列表
  510. for (int i = 0; i < this.resultMatList.Count; i++)
  511. {
  512. Mat mat = new Mat();
  513. Cv2.CvtColor(this.resultMatList[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
  514. this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
  515. this.listView1.Items.Add("", i);
  516. this.listView1.Items[i].ImageIndex = i;
  517. this.listView1.Items[i].Tag = this.resultMatList[i].ID;
  518. this.listView1.Items[i].Text = this.resultMatList[i].fileName;
  519. this.listView1.Items[i].BackColor = this.resultMatList[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
  520. mat.Dispose();
  521. }
  522. }
  523. /// <summary>
  524. /// 创建缩略图
  525. /// </summary>
  526. public Bitmap CreateThumbnail(Mat mat)
  527. {
  528. Bitmap origin = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
  529. Bitmap bitmap;
  530. if (origin.Width > origin.Height)
  531. {
  532. bitmap = MakeThumbnail(origin, 90, 90, "W");
  533. }
  534. else if (origin.Height > origin.Width)
  535. {
  536. bitmap = MakeThumbnail(origin, 90, 90, "H");
  537. }
  538. else
  539. {
  540. bitmap = MakeThumbnail(origin, 90, 90, "W");
  541. }
  542. return bitmap;
  543. }
  544. ///<summary>
  545. /// 生成缩略图
  546. /// </summary>
  547. /// <param name="originalImage">源图片</param>
  548. /// <param name="width">缩略图宽度</param>
  549. /// <param name="height">缩略图高度</param>
  550. /// <param name="mode">生成缩略图的方式</param>
  551. public static Bitmap MakeThumbnail(Image originalImage, int width, int height, string mode)
  552. {
  553. int towidth = width;
  554. int toheight = height;
  555. int x = 0;
  556. int y = 0;
  557. int ow = originalImage.Width;
  558. int oh = originalImage.Height;
  559. switch (mode)
  560. {
  561. case "HW"://指定高宽缩放(可能变形)
  562. break;
  563. case "W"://指定宽,高按比例
  564. toheight = originalImage.Height * width / originalImage.Width;
  565. break;
  566. case "H"://指定高,宽按比例
  567. towidth = originalImage.Width * height / originalImage.Height;
  568. break;
  569. case "Cut"://指定高宽裁减(不变形)
  570. if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
  571. {
  572. oh = originalImage.Height;
  573. ow = originalImage.Height * towidth / toheight;
  574. y = 0;
  575. x = (originalImage.Width - ow) / 2;
  576. }
  577. else
  578. {
  579. ow = originalImage.Width;
  580. oh = originalImage.Width * height / towidth;
  581. x = 0;
  582. y = (originalImage.Height - oh) / 2;
  583. }
  584. break;
  585. default:
  586. break;
  587. }
  588. //新建一个bmp图片
  589. Bitmap bitmap = new System.Drawing.Bitmap(towidth, toheight);
  590. //新建一个画板
  591. Graphics g = System.Drawing.Graphics.FromImage(bitmap);
  592. //设置高质量插值法
  593. g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
  594. //设置高质量,低速度呈现平滑程度
  595. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
  596. //清空画布并以透明背景色填充
  597. g.Clear(Color.Transparent);
  598. //在指定位置并且按指定大小绘制原图片的指定部分
  599. g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
  600. new Rectangle(x, y, ow, oh),
  601. GraphicsUnit.Pixel);
  602. return bitmap;
  603. }
  604. /// <summary>
  605. /// 改变图片选择
  606. /// </summary>
  607. /// <param name="sender"></param>
  608. /// <param name="e"></param>
  609. private void listView1_SelectedIndexChanged(object sender, EventArgs e)
  610. {
  611. if (this.listView1.FocusedItem != null && this.listView1.FocusedItem.Selected)
  612. {
  613. string id = this.listView1.FocusedItem.Tag.ToString();
  614. var result = this.resultMatList.Where(m => m.ID == id).FirstOrDefault();
  615. int index = 0;
  616. if (result != null)
  617. {
  618. index = this.resultMatList.IndexOf(result);
  619. }
  620. label3.Visible = true;
  621. label4.Visible = true;
  622. label5.Visible = true;
  623. Mat mat = new Mat();
  624. Cv2.CvtColor(this.resultMatList[index].resultMat, mat, ColorConversionCodes.BGRA2BGR);
  625. if (pixelTrackingDialog != null)
  626. {
  627. pixelTrackingDialog.Mat = mat;
  628. }
  629. this.bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
  630. Document document = Document.FromMat(mat);
  631. this.documentWorkspace.Document = document;
  632. this.documentWorkspace.Visible = true;
  633. label3.Text = $"共{this.resultMatList[index].allLineNum}条输出线";
  634. this.successNum = this.resultMatList[index].dataInforList.Where(m => m.value != 0).Count();
  635. this.failNum = this.resultMatList[index].dataInforList.Where(m => m.value == 0).Count();
  636. label4.Text = $"已绘制{this.successNum}条";
  637. label5.Text = $"剩余{this.failNum}条";
  638. InitButtonList();
  639. #region [往面板上绘制测量线]
  640. this.documentWorkspace.GraphicsList.Clear();
  641. DrawLine(index);
  642. if (checkBox2.Checked)
  643. {
  644. if (this.resultMatList[index].GraphicsListList.Count > 0)
  645. {
  646. this.resultMatList[index].GraphicsListList[0].canMove = false;
  647. GraphicsList graphicsList = new GraphicsList();
  648. graphicsList.Add(this.resultMatList[index].GraphicsListList[0].Clone(this.documentWorkspace));
  649. graphicsList[0].Selected = false;
  650. this.documentWorkspace.GraphicsList.Add(graphicsList[0]);
  651. }
  652. this.documentWorkspace.Refresh();
  653. }
  654. #endregion [往面板上绘制测量线]
  655. }
  656. else
  657. {
  658. label3.Visible = false;
  659. label4.Visible = false;
  660. label5.Visible = false;
  661. }
  662. }
  663. private void DrawLine(int index)
  664. {
  665. var list = this.resultMatList[index].dataInforList;
  666. this.documentWorkspace.GraphicsList.Clear();
  667. List<DrawObject> lines = new List<DrawObject>();
  668. foreach (var item in list)
  669. {
  670. if (item.value == 0)
  671. {
  672. continue;
  673. }
  674. double unit = 1;
  675. if (this.pidRuleDic.ContainsKey(this.resultMatList[index].parentId))
  676. {
  677. if (this.pidRuleDic[this.resultMatList[index].parentId].ContainsKey(this.resultMatList[index].fileName))
  678. {
  679. unit = this.pidRuleDic[this.resultMatList[index].parentId][this.resultMatList[index].fileName];
  680. }
  681. }
  682. this.appWorkspace.setUnitNum(unit);
  683. var point1 = item.point1;
  684. var point2 = item.point2;
  685. switch (item.drawType)
  686. {
  687. case "MeasureLine":
  688. MeasureLine line = new MeasureLine(this.documentWorkspace, point1, point2, item.aliasName, unit);
  689. line.moved = true;
  690. line.ISurfaceBox = this.documentWorkspace;
  691. lines.Add(line);
  692. break;
  693. case "MeasureVLine":
  694. MeasureVLine vline = new MeasureVLine(this.documentWorkspace, point1, point2, item.aliasName, unit);
  695. vline.moved = true;
  696. vline.ISurfaceBox = this.documentWorkspace;
  697. lines.Add(vline);
  698. break;
  699. case "MeasureHLine":
  700. MeasureHLine hline = new MeasureHLine(this.documentWorkspace, point1, point2, item.aliasName, unit);
  701. hline.moved = true;
  702. hline.ISurfaceBox = this.documentWorkspace;
  703. lines.Add(hline);
  704. break;
  705. }
  706. }
  707. this.documentWorkspace.GraphicsList.AddRange(lines);
  708. this.documentWorkspace.GraphicsList.UnselectAll();
  709. this.documentWorkspace.Refresh();
  710. }
  711. /// <summary>
  712. /// 生成失败线的按钮
  713. /// </summary>
  714. private void InitButtonList()
  715. {
  716. this.panel2.Controls.Clear();
  717. string id = this.listView1.FocusedItem.Tag.ToString();
  718. var result = this.resultMatList.Where(m => m.ID == id).FirstOrDefault();
  719. int dataIndex = 0;
  720. if (result != null)
  721. {
  722. dataIndex = this.resultMatList.IndexOf(result);
  723. }
  724. var list = this.resultMatList[dataIndex].dataInforList.Where(m => m.value.Equals(0)).ToList();
  725. //var list = this.resultMatList[dataIndex].dataInforList;
  726. int index = 0;
  727. foreach (var item in list)
  728. //for (int i = list.Count - 1; i >= 0; i--)
  729. {
  730. if (item.value.Equals(0))
  731. {
  732. //int index = list.IndexOf(item);
  733. Button button = new Button();
  734. if (index == 0)
  735. {
  736. button.Location = new System.Drawing.Point(17, 35);
  737. }
  738. else
  739. {
  740. button.Location = new System.Drawing.Point(17, 35 + 23 * index + 10 * index);
  741. }
  742. button.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
  743. button.Name = item.drawType + (index + 1).ToString();
  744. button.Size = new System.Drawing.Size(75, 23);
  745. button.TabIndex = 0;
  746. button.Tag = item.aliasName;
  747. if (this.resultMatList[dataIndex].parentId.Equals("100209"))
  748. {
  749. button.Text = "曡構";
  750. }
  751. else
  752. {
  753. button.Text = item.name;
  754. }
  755. button.UseVisualStyleBackColor = true;
  756. button.Click += new System.EventHandler(this.buttonShanchu_Click);
  757. panel2.Controls.Add(button);
  758. index++;
  759. }
  760. //var item = list[i];
  761. }
  762. }
  763. private bool checkIsNum(string num)
  764. {
  765. try
  766. {
  767. int strNum = Convert.ToInt32(num);
  768. return true;
  769. }
  770. catch (Exception)
  771. {
  772. return false;
  773. }
  774. }
  775. private void buttonShanchu_Click(object sender, EventArgs e)
  776. {
  777. Button button = (Button)sender;
  778. this.selectedNum = Convert.ToInt32(button.Name.Substring(button.Name.Length - 1, 1));
  779. var drawTypeName = button.Name.Substring(0, button.Name.Length - 1);
  780. if(checkIsNum(drawTypeName.Substring(drawTypeName.Length - 1, 1)))
  781. {
  782. drawTypeName = drawTypeName.Substring(0, drawTypeName.Length - 1);
  783. this.selectedNum = Convert.ToInt32(button.Name.Substring(button.Name.Length - 2, 2));
  784. }
  785. //this.pixelTrackingEnabled = false;
  786. this.appWorkspace.setAliasName(button.Tag.ToString());
  787. switch (drawTypeName)
  788. {
  789. case "MeasureLine":
  790. this.documentWorkspace.activeTool = DrawToolType.MeasureLine;
  791. break;
  792. case "MeasureVLine":
  793. this.documentWorkspace.activeTool = DrawToolType.MeasureVLine;
  794. break;
  795. case "MeasureHLine":
  796. this.documentWorkspace.activeTool = DrawToolType.MeasureHLine;
  797. break;
  798. }
  799. }
  800. private void documentWorkspace_panel_MouseUp(object sender, MouseEventArgs e)
  801. {
  802. if (this.listView1.SelectedItems == null || this.listView1.SelectedItems.Count == 0)
  803. {
  804. return;
  805. }
  806. if (this.listView1.SelectedItems.Count > 1)
  807. {
  808. var index = this.listView1.SelectedItems[0].Index;
  809. this.listView1.Items[index].Focused = true;
  810. }
  811. if (this.selectedNum == 0)
  812. {
  813. string id = this.listView1.FocusedItem.Tag.ToString();
  814. var result = this.resultMatList.Where(m => m.ID == id).FirstOrDefault();
  815. int index = 0;
  816. if (result != null)
  817. {
  818. index = this.resultMatList.IndexOf(result);
  819. }
  820. if (this.documentWorkspace.GraphicsList != null && this.documentWorkspace.GraphicsList.Count > 0)
  821. {
  822. var list = this.resultMatList[index].dataInforList.Where(m => m.deleteFlag == 2).ToList();
  823. for (int i = this.documentWorkspace.GraphicsList.Count - 1; i >= 0; i--)
  824. {
  825. if (this.documentWorkspace.GraphicsList[i].objectType != DrawClass.Measure)
  826. {
  827. continue;
  828. }
  829. var data = list.Where(m => m.aliasName == ((MeasureDrawObject)this.documentWorkspace.GraphicsList[i]).aliasName).FirstOrDefault();
  830. if (data != null)
  831. {
  832. MeasureDrawObject measureDrawObject = (MeasureDrawObject)this.documentWorkspace.GraphicsList[i];
  833. int dataIndex = list.IndexOf(data);
  834. list[dataIndex].value = measureDrawObject.length;
  835. list[dataIndex].point1 = new System.Drawing.Point(Convert.ToInt32(measureDrawObject.startPoint.X), Convert.ToInt32(measureDrawObject.startPoint.Y));
  836. list[dataIndex].point2 = new System.Drawing.Point(Convert.ToInt32(measureDrawObject.endPoint.X), Convert.ToInt32(measureDrawObject.endPoint.Y));
  837. }
  838. }
  839. }
  840. }
  841. else
  842. {
  843. string id = this.listView1.FocusedItem.Tag.ToString();
  844. var result = this.resultMatList.Where(m => m.ID == id).FirstOrDefault();
  845. int dataIndex = 0;
  846. if (result != null)
  847. {
  848. dataIndex = this.resultMatList.IndexOf(result);
  849. }
  850. var list = this.resultMatList[dataIndex].dataInforList.Where(m => m.value.Equals(0)).ToList();
  851. //var list = this.resultMatList[dataIndex].dataInforList;
  852. if (this.documentWorkspace.GraphicsList.Count == 0)
  853. {
  854. return;
  855. }
  856. if(list == null || list.Count == 0)
  857. {
  858. return;
  859. }
  860. var gra = (DrawObject)this.documentWorkspace.GraphicsList[0];
  861. DataInfor data = new DataInfor();
  862. data.name = list[this.selectedNum - 1].name;
  863. data.aliasName = list[this.selectedNum - 1].aliasName;
  864. data.point1 = new System.Drawing.Point((int)gra.startPoint.X, (int)gra.startPoint.Y);
  865. data.point2 = new System.Drawing.Point((int)gra.endPoint.X, (int)gra.endPoint.Y);
  866. data.value = gra.length;
  867. data.drawType = list[this.selectedNum - 1].drawType;
  868. data.ID = list[this.selectedNum - 1].ID;
  869. int index = this.resultMatList[dataIndex].dataInforList.IndexOf(list[this.selectedNum - 1]);
  870. this.resultMatList[dataIndex].dataInforList.RemoveAt(index);
  871. this.resultMatList[dataIndex].dataInforList.Insert(index, data);
  872. if (data.value != 0)
  873. {
  874. this.selectedNum = 0;
  875. }
  876. this.successNum = this.resultMatList[dataIndex].dataInforList.Where(m => m.value != 0).Count();
  877. this.failNum = this.resultMatList[dataIndex].dataInforList.Where(m => m.value == 0).Count();
  878. label4.Text = $"已绘制{this.successNum}条";
  879. label5.Text = $"剩余{this.failNum}条";
  880. InitButtonList();
  881. //this.imageList1.Images.Clear();
  882. //this.listView1.Items.Clear();
  883. //InitPicList();
  884. //this.listView1.Focus();
  885. ////滚动到指定的行位置
  886. //this.listView1.EnsureVisible(dataIndex);
  887. //this.listView1.Items[dataIndex].Focused = true;
  888. //this.listView1.Items[dataIndex].Selected = true;
  889. this.listView1.Items[dataIndex].BackColor = this.resultMatList[dataIndex].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
  890. this.listView1.Refresh();
  891. }
  892. }
  893. /// <summary>
  894. /// 不可点击空白区域
  895. /// </summary>
  896. /// <param name="sender"></param>
  897. /// <param name="e"></param>
  898. private void listView1_MouseUp(object sender, MouseEventArgs e)
  899. {
  900. if (e.Button == MouseButtons.Left)
  901. {
  902. if (listView1.SelectedItems.Count > 0)
  903. {
  904. }
  905. else if (listView1.SelectedItems.Count <= 0)//点击空白区
  906. {
  907. if (this.listView1.FocusedItem != null)
  908. {
  909. ListViewItem item = this.listView1.GetItemAt(e.X, e.Y);
  910. if (item == null)
  911. {
  912. this.listView1.FocusedItem.Selected = true;
  913. }
  914. }
  915. }
  916. }
  917. }
  918. /// <summary>
  919. /// 分类选择
  920. /// </summary>
  921. /// <param name="sender"></param>
  922. /// <param name="e"></param>
  923. // TODO:筛选bug
  924. private void comboClassification_SelectedIndexChanged(object sender, EventArgs e)
  925. {
  926. MeasureMaintenanceTreeSpecificData data = (MeasureMaintenanceTreeSpecificData)comboClassification.SelectedItem;
  927. this.listView1.Items.Clear();
  928. this.imageList1.Images.Clear();
  929. this.documentWorkspace.Visible = false;
  930. int index = comboStatus.SelectedIndex;
  931. this.resultMatList.Clear();
  932. if (data.MeasureMaintenanceTreeSpecificDataId.Equals("0"))
  933. {
  934. switch (index)
  935. {
  936. case 0:
  937. this.resultMatList.AddRange(this.realResultMatList);
  938. InitPicList();
  939. break;
  940. case 1:
  941. List<MeasureInfoResultModel> list = this.realResultMatList.Where(m => m.dataInforList.Where(n => n.value == 0).Count() == 0).ToList();
  942. //初始化图片列表
  943. for (int i = 0; i < list.Count; i++)
  944. {
  945. MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
  946. measureInfoResultModel.ID = list[i].ID;
  947. measureInfoResultModel.allLineNum = list[i].allLineNum;
  948. measureInfoResultModel.dataInforList = list[i].dataInforList;
  949. measureInfoResultModel.failNum = list[i].failNum;
  950. measureInfoResultModel.fileName = list[i].fileName;
  951. measureInfoResultModel.GraphicsListList = list[i].GraphicsListList;
  952. measureInfoResultModel.imgStatus = list[i].imgStatus;
  953. measureInfoResultModel.isConductive = list[i].isConductive;
  954. measureInfoResultModel.isFanweibuchang = list[i].isFanweibuchang;
  955. measureInfoResultModel.isErzhichuli = list[i].isErzhichuli;
  956. measureInfoResultModel.OriginalImage = list[i].OriginalImage;
  957. measureInfoResultModel.parentId = list[i].parentId;
  958. measureInfoResultModel.resultMat = list[i].resultMat;
  959. measureInfoResultModel.successNum = list[i].successNum;
  960. this.resultMatList.Add(measureInfoResultModel);
  961. Mat mat = new Mat();
  962. Cv2.CvtColor(list[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
  963. this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
  964. this.listView1.Items.Add("", i);
  965. this.listView1.Items[i].Tag = list[i].ID;
  966. this.listView1.Items[i].ImageIndex = i;
  967. this.listView1.Items[i].Text = list[i].fileName;
  968. this.listView1.Items[i].BackColor = list[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
  969. }
  970. break;
  971. case 2:
  972. List<MeasureInfoResultModel> list1 = this.realResultMatList.Where(m => m.dataInforList.Where(n => n.value == 0).Count() != 0).ToList(); ;
  973. //初始化图片列表
  974. for (int i = 0; i < list1.Count; i++)
  975. {
  976. MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
  977. measureInfoResultModel.ID = list1[i].ID;
  978. measureInfoResultModel.allLineNum = list1[i].allLineNum;
  979. measureInfoResultModel.dataInforList = list1[i].dataInforList;
  980. measureInfoResultModel.failNum = list1[i].failNum;
  981. measureInfoResultModel.fileName = list1[i].fileName;
  982. measureInfoResultModel.GraphicsListList = list1[i].GraphicsListList;
  983. measureInfoResultModel.imgStatus = list1[i].imgStatus;
  984. measureInfoResultModel.isConductive = list1[i].isConductive;
  985. measureInfoResultModel.isFanweibuchang = list1[i].isFanweibuchang;
  986. measureInfoResultModel.isErzhichuli = list1[i].isErzhichuli;
  987. measureInfoResultModel.OriginalImage = list1[i].OriginalImage;
  988. measureInfoResultModel.parentId = list1[i].parentId;
  989. measureInfoResultModel.resultMat = list1[i].resultMat;
  990. measureInfoResultModel.successNum = list1[i].successNum;
  991. this.resultMatList.Add(measureInfoResultModel);
  992. Mat mat = new Mat();
  993. Cv2.CvtColor(list1[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
  994. this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
  995. this.listView1.Items.Add("", i);
  996. this.listView1.Items[i].Tag = list1[i].ID;
  997. this.listView1.Items[i].ImageIndex = i;
  998. this.listView1.Items[i].Text = list1[i].fileName;
  999. this.listView1.Items[i].BackColor = list1[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
  1000. }
  1001. break;
  1002. }
  1003. }
  1004. else
  1005. {
  1006. switch (index)
  1007. {
  1008. case 0:
  1009. List<MeasureInfoResultModel> list2 = this.realResultMatList.Where(m => m.parentId.Equals(data.MeasureMaintenanceTreeSpecificDataId)).ToList(); ;
  1010. //初始化图片列表
  1011. for (int i = 0; i < list2.Count; i++)
  1012. {
  1013. MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
  1014. measureInfoResultModel.ID = list2[i].ID;
  1015. measureInfoResultModel.allLineNum = list2[i].allLineNum;
  1016. measureInfoResultModel.dataInforList = list2[i].dataInforList;
  1017. measureInfoResultModel.failNum = list2[i].failNum;
  1018. measureInfoResultModel.fileName = list2[i].fileName;
  1019. measureInfoResultModel.GraphicsListList = list2[i].GraphicsListList;
  1020. measureInfoResultModel.imgStatus = list2[i].imgStatus;
  1021. measureInfoResultModel.isConductive = list2[i].isConductive;
  1022. measureInfoResultModel.isFanweibuchang = list2[i].isFanweibuchang;
  1023. measureInfoResultModel.isErzhichuli = list2[i].isErzhichuli;
  1024. measureInfoResultModel.OriginalImage = list2[i].OriginalImage;
  1025. measureInfoResultModel.parentId = list2[i].parentId;
  1026. measureInfoResultModel.resultMat = list2[i].resultMat;
  1027. measureInfoResultModel.successNum = list2[i].successNum;
  1028. this.resultMatList.Add(measureInfoResultModel);
  1029. Mat mat = new Mat();
  1030. Cv2.CvtColor(list2[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
  1031. this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
  1032. this.listView1.Items.Add("", i);
  1033. this.listView1.Items[i].Tag = list2[i].ID;
  1034. this.listView1.Items[i].ImageIndex = i;
  1035. this.listView1.Items[i].Text = list2[i].fileName;
  1036. this.listView1.Items[i].BackColor = list2[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
  1037. }
  1038. break;
  1039. case 1:
  1040. List<MeasureInfoResultModel> list = this.realResultMatList.Where(m => m.parentId.Equals(data.MeasureMaintenanceTreeSpecificDataId) && m.dataInforList.Where(n => n.value == 0).Count() == 0).ToList(); ;
  1041. //初始化图片列表
  1042. for (int i = 0; i < list.Count; i++)
  1043. {
  1044. MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
  1045. measureInfoResultModel.ID = list[i].ID;
  1046. measureInfoResultModel.allLineNum = list[i].allLineNum;
  1047. measureInfoResultModel.dataInforList = list[i].dataInforList;
  1048. measureInfoResultModel.failNum = list[i].failNum;
  1049. measureInfoResultModel.fileName = list[i].fileName;
  1050. measureInfoResultModel.GraphicsListList = list[i].GraphicsListList;
  1051. measureInfoResultModel.imgStatus = list[i].imgStatus;
  1052. measureInfoResultModel.isConductive = list[i].isConductive;
  1053. measureInfoResultModel.isFanweibuchang = list[i].isFanweibuchang;
  1054. measureInfoResultModel.isErzhichuli = list[i].isErzhichuli;
  1055. measureInfoResultModel.OriginalImage = list[i].OriginalImage;
  1056. measureInfoResultModel.parentId = list[i].parentId;
  1057. measureInfoResultModel.resultMat = list[i].resultMat;
  1058. measureInfoResultModel.successNum = list[i].successNum;
  1059. this.resultMatList.Add(measureInfoResultModel);
  1060. Mat mat = new Mat();
  1061. Cv2.CvtColor(list[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
  1062. this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
  1063. this.listView1.Items.Add("", i);
  1064. this.listView1.Items[i].Tag = list[i].ID;
  1065. this.listView1.Items[i].ImageIndex = i;
  1066. this.listView1.Items[i].Text = list[i].fileName;
  1067. this.listView1.Items[i].BackColor = list[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
  1068. }
  1069. break;
  1070. case 2:
  1071. List<MeasureInfoResultModel> list1 = this.realResultMatList.Where(m => m.parentId.Equals(data.MeasureMaintenanceTreeSpecificDataId) && m.dataInforList.Where(n => n.value == 0).Count() != 0).ToList();
  1072. //初始化图片列表
  1073. for (int i = 0; i < list1.Count; i++)
  1074. {
  1075. MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
  1076. measureInfoResultModel.ID = list1[i].ID;
  1077. measureInfoResultModel.allLineNum = list1[i].allLineNum;
  1078. measureInfoResultModel.dataInforList = list1[i].dataInforList;
  1079. measureInfoResultModel.failNum = list1[i].failNum;
  1080. measureInfoResultModel.fileName = list1[i].fileName;
  1081. measureInfoResultModel.GraphicsListList = list1[i].GraphicsListList;
  1082. measureInfoResultModel.imgStatus = list1[i].imgStatus;
  1083. measureInfoResultModel.isConductive = list1[i].isConductive;
  1084. measureInfoResultModel.isFanweibuchang = list1[i].isFanweibuchang;
  1085. measureInfoResultModel.isErzhichuli = list1[i].isErzhichuli;
  1086. measureInfoResultModel.OriginalImage = list1[i].OriginalImage;
  1087. measureInfoResultModel.parentId = list1[i].parentId;
  1088. measureInfoResultModel.resultMat = list1[i].resultMat;
  1089. measureInfoResultModel.successNum = list1[i].successNum;
  1090. this.resultMatList.Add(measureInfoResultModel);
  1091. Mat mat = new Mat();
  1092. Cv2.CvtColor(list1[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
  1093. this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
  1094. this.listView1.Items.Add("", i);
  1095. this.listView1.Items[i].Tag = list1[i].ID;
  1096. this.listView1.Items[i].ImageIndex = i;
  1097. this.listView1.Items[i].Text = list1[i].fileName;
  1098. this.listView1.Items[i].BackColor = list1[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
  1099. }
  1100. break;
  1101. }
  1102. }
  1103. this.bitmap = null;
  1104. }
  1105. /// <summary>
  1106. /// 状态选择
  1107. /// </summary>
  1108. /// <param name="sender"></param>
  1109. /// <param name="e"></param>
  1110. private void comboStatus_SelectedIndexChanged(object sender, EventArgs e)
  1111. {
  1112. int index = comboStatus.SelectedIndex;
  1113. this.listView1.Items.Clear();
  1114. this.imageList1.Images.Clear();
  1115. this.documentWorkspace.Visible = false;
  1116. this.resultMatList.Clear();
  1117. MeasureMaintenanceTreeSpecificData data = (MeasureMaintenanceTreeSpecificData)comboClassification.SelectedItem;
  1118. switch (index)
  1119. {
  1120. case 0:
  1121. List<MeasureInfoResultModel> list2;
  1122. if (data.MeasureMaintenanceTreeSpecificDataId.Equals("0"))
  1123. {
  1124. list2 = this.realResultMatList;
  1125. }
  1126. else
  1127. {
  1128. list2 = this.realResultMatList.Where(m => m.parentId.Equals(data.MeasureMaintenanceTreeSpecificDataId)).ToList();
  1129. }
  1130. //初始化图片列表
  1131. for (int i = 0; i < list2.Count; i++)
  1132. {
  1133. MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
  1134. measureInfoResultModel.ID = list2[i].ID;
  1135. measureInfoResultModel.allLineNum = list2[i].allLineNum;
  1136. measureInfoResultModel.dataInforList = list2[i].dataInforList;
  1137. measureInfoResultModel.failNum = list2[i].failNum;
  1138. measureInfoResultModel.fileName = list2[i].fileName;
  1139. measureInfoResultModel.GraphicsListList = list2[i].GraphicsListList;
  1140. measureInfoResultModel.imgStatus = list2[i].imgStatus;
  1141. measureInfoResultModel.isConductive = list2[i].isConductive;
  1142. measureInfoResultModel.isFanweibuchang = list2[i].isFanweibuchang;
  1143. measureInfoResultModel.isErzhichuli = list2[i].isErzhichuli;
  1144. measureInfoResultModel.OriginalImage = list2[i].OriginalImage;
  1145. measureInfoResultModel.parentId = list2[i].parentId;
  1146. measureInfoResultModel.resultMat = list2[i].resultMat;
  1147. measureInfoResultModel.successNum = list2[i].successNum;
  1148. this.resultMatList.Add(measureInfoResultModel);
  1149. Mat mat = new Mat();
  1150. Cv2.CvtColor(list2[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
  1151. this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
  1152. this.listView1.Items.Add("", i);
  1153. this.listView1.Items[i].Tag = list2[i].ID;
  1154. this.listView1.Items[i].ImageIndex = i;
  1155. this.listView1.Items[i].Text = list2[i].fileName;
  1156. this.listView1.Items[i].BackColor = list2[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
  1157. }
  1158. break;
  1159. case 1:
  1160. List<MeasureInfoResultModel> list;
  1161. if (data.MeasureMaintenanceTreeSpecificDataId.Equals("0"))
  1162. {
  1163. list = this.realResultMatList.Where(m => m.dataInforList.Where(n => n.value == 0).Count() == 0).ToList();
  1164. }
  1165. else
  1166. {
  1167. list = this.realResultMatList.Where(m => m.parentId.Equals(data.MeasureMaintenanceTreeSpecificDataId) && m.dataInforList.Where(n => n.value == 0).Count() == 0).ToList();
  1168. }
  1169. //初始化图片列表
  1170. for (int i = 0; i < list.Count; i++)
  1171. {
  1172. MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
  1173. measureInfoResultModel.ID = list[i].ID;
  1174. measureInfoResultModel.allLineNum = list[i].allLineNum;
  1175. measureInfoResultModel.dataInforList = list[i].dataInforList;
  1176. measureInfoResultModel.failNum = list[i].failNum;
  1177. measureInfoResultModel.fileName = list[i].fileName;
  1178. measureInfoResultModel.GraphicsListList = list[i].GraphicsListList;
  1179. measureInfoResultModel.imgStatus = list[i].imgStatus;
  1180. measureInfoResultModel.isConductive = list[i].isConductive;
  1181. measureInfoResultModel.isFanweibuchang = list[i].isFanweibuchang;
  1182. measureInfoResultModel.isErzhichuli = list[i].isErzhichuli;
  1183. measureInfoResultModel.OriginalImage = list[i].OriginalImage;
  1184. measureInfoResultModel.parentId = list[i].parentId;
  1185. measureInfoResultModel.resultMat = list[i].resultMat;
  1186. measureInfoResultModel.successNum = list[i].successNum;
  1187. this.resultMatList.Add(measureInfoResultModel);
  1188. Mat mat = new Mat();
  1189. Cv2.CvtColor(list[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
  1190. this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
  1191. this.listView1.Items.Add("", i);
  1192. this.listView1.Items[i].Tag = list[i].ID;
  1193. this.listView1.Items[i].ImageIndex = i;
  1194. this.listView1.Items[i].Text = list[i].fileName;
  1195. this.listView1.Items[i].BackColor = list[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
  1196. }
  1197. break;
  1198. case 2:
  1199. List<MeasureInfoResultModel> list1;
  1200. if (data.MeasureMaintenanceTreeSpecificDataId.Equals("0"))
  1201. {
  1202. list1 = this.realResultMatList.Where(m => m.dataInforList.Where(n => n.value == 0).Count() != 0).ToList();
  1203. }
  1204. else
  1205. {
  1206. list1 = this.realResultMatList.Where(m => m.parentId.Equals(data.MeasureMaintenanceTreeSpecificDataId) && m.dataInforList.Where(n => n.value == 0).Count() != 0).ToList();
  1207. }
  1208. //初始化图片列表
  1209. for (int i = 0; i < list1.Count; i++)
  1210. {
  1211. MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
  1212. measureInfoResultModel.ID = list1[i].ID;
  1213. measureInfoResultModel.allLineNum = list1[i].allLineNum;
  1214. measureInfoResultModel.dataInforList = list1[i].dataInforList;
  1215. measureInfoResultModel.failNum = list1[i].failNum;
  1216. measureInfoResultModel.fileName = list1[i].fileName;
  1217. measureInfoResultModel.GraphicsListList = list1[i].GraphicsListList;
  1218. measureInfoResultModel.imgStatus = list1[i].imgStatus;
  1219. measureInfoResultModel.isConductive = list1[i].isConductive;
  1220. measureInfoResultModel.isFanweibuchang = list1[i].isFanweibuchang;
  1221. measureInfoResultModel.isErzhichuli = list1[i].isErzhichuli;
  1222. measureInfoResultModel.OriginalImage = list1[i].OriginalImage;
  1223. measureInfoResultModel.parentId = list1[i].parentId;
  1224. measureInfoResultModel.resultMat = list1[i].resultMat;
  1225. measureInfoResultModel.successNum = list1[i].successNum;
  1226. this.resultMatList.Add(measureInfoResultModel);
  1227. Mat mat = new Mat();
  1228. Cv2.CvtColor(list1[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
  1229. this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
  1230. this.listView1.Items.Add("", i);
  1231. this.listView1.Items[i].Tag = list1[i].ID;
  1232. this.listView1.Items[i].ImageIndex = i;
  1233. this.listView1.Items[i].Text = list1[i].fileName;
  1234. this.listView1.Items[i].BackColor = list1[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
  1235. }
  1236. break;
  1237. }
  1238. this.bitmap = null;
  1239. }
  1240. /// <summary>
  1241. /// 生成报告
  1242. /// </summary>
  1243. /// <param name="sender"></param>
  1244. /// <param name="e"></param>
  1245. private void buttonGenerateReport_Click(object sender, EventArgs e)
  1246. {
  1247. if (listView1.Items.Count == 0)
  1248. {
  1249. MessageBox.Show(PdnResources.GetString("NewNoDataGenerateReport") + "!");
  1250. return;
  1251. }
  1252. if (string.IsNullOrEmpty(measureMaintenanceType.templateFilePath) || !System.IO.File.Exists(measureMaintenanceType.templateFilePath))
  1253. {
  1254. MessageBox.Show(PdnResources.GetString("NoTemplateSelected"));
  1255. OpenFileDialog dialog = new OpenFileDialog();
  1256. dialog.Filter = "Excel文件|*.xls;*.xlsx";
  1257. dialog.Title = "选择模板";
  1258. dialog.Multiselect = false; //该值确定是否可以选择多个文件
  1259. if (dialog.ShowDialog() != DialogResult.OK)
  1260. {
  1261. return;
  1262. }
  1263. string file = dialog.FileName;
  1264. measureMaintenanceType.templateFilePath = file;
  1265. }
  1266. #region [上传数据库组织数据]
  1267. bool needUploadData = false;
  1268. bool needSPCUploadData = false;
  1269. //配置文档中关于接口的相关配置项
  1270. string userName = Program.instance.configModel.UserName;
  1271. string passWord = Program.instance.configModel.PassWord;
  1272. string equId = Program.instance.configModel.EquId;
  1273. string groupId = Program.instance.configModel.GroupId;
  1274. string funId = Program.instance.configModel.FunId;
  1275. string funId2 = Program.instance.configModel.FunId2;
  1276. string funId3 = Program.instance.configModel.FunId3;
  1277. string createdate = DateTime.Now.ToString("yyyy-MM-dd");
  1278. string mainID = Guid.NewGuid().ToString();
  1279. string paraname = "ID|Name| RulerName| RulerPixelLength| RulerPhysicalLength| PartNo| UseFactory|OrderNum|Laboratory|BatchNumber|Shift|ProcessType|Level1| ElectroplatingLine|Unit|Remark ";
  1280. string rulerName = this.measureMaintenanceType.ruleMessage == null ? string.Empty : this.measureMaintenanceType.ruleMessage.ruleName;
  1281. decimal rulerPhysicalLength = this.measureMaintenanceType.ruleMessage == null ? 0 : this.measureMaintenanceType.ruleMessage.physicalLength;
  1282. float rulerPixelLength = this.measureMaintenanceType.ruleMessage == null ? 0 : this.measureMaintenanceType.ruleMessage.pixelLength;
  1283. if (string.IsNullOrEmpty(this.measureMaintenanceType.measureMaintenanceContent))
  1284. {
  1285. this.measureMaintenanceType.measureMaintenanceContent = "默認備註";
  1286. }
  1287. //实验室需要的数据字段,一个主表两个子表。有递进关系
  1288. string paravalue = $"{mainID}|{this.measureMaintenanceType.measureMaintenanceName}|{rulerName}|{rulerPixelLength}|{rulerPhysicalLength}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[0].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[3].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[5].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[2].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[6].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[1].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[4].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[7].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[8].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[9].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceContent}";
  1289. string paraname2 = "ID|MainId|HoleType|TestItem|SpecificationCondition|scnum|scrangegreatenum|Judgment ";
  1290. string paraname3 = "ID|Name|Value|FilePath|DataId|MainId ";
  1291. #endregion [上传数据库组织数据]
  1292. //SPC上传
  1293. switch (Program.instance.configModel.autoSPCUpload)
  1294. {
  1295. case 1:
  1296. needSPCUploadData = true;
  1297. if (string.IsNullOrEmpty(this.measureMaintenanceType.measureMaintenanceBasicDataList[0].measureMaintenanceBasicDataValue))
  1298. {
  1299. ResultViewItemNo resultViewItemNo = new ResultViewItemNo(this);
  1300. resultViewItemNo.StartPosition = FormStartPosition.CenterParent;
  1301. resultViewItemNo.ShowDialog();
  1302. return;
  1303. }
  1304. break;
  1305. case 2:
  1306. needSPCUploadData = false;
  1307. break;
  1308. case 3:
  1309. if (!this.isSPCItemNull)
  1310. {
  1311. DialogResult result = MessageBox.Show(PdnResources.GetString("UpdateSpc"), PdnResources.GetString("NewTips"), MessageBoxButtons.OKCancel);
  1312. if (result == DialogResult.OK)
  1313. {
  1314. needSPCUploadData = true;
  1315. if (string.IsNullOrEmpty(this.measureMaintenanceType.measureMaintenanceBasicDataList[0].measureMaintenanceBasicDataValue))
  1316. {
  1317. ResultViewItemNo resultViewItemNo = new ResultViewItemNo(this);
  1318. resultViewItemNo.StartPosition = FormStartPosition.CenterParent;
  1319. resultViewItemNo.ShowDialog();
  1320. return;
  1321. }
  1322. }
  1323. }
  1324. break;
  1325. }
  1326. //实验室上传
  1327. switch (Program.instance.configModel.autoUpload)
  1328. {
  1329. case 1:
  1330. needUploadData = true;
  1331. try
  1332. {
  1333. var resultData = webServiceDll.ws.sendDataToSerGrp(userName, passWord, equId, groupId, funId, paraname, paravalue, createdate);
  1334. writeLog(resultData, "0003上传回参");
  1335. }
  1336. catch (Exception ex)
  1337. {
  1338. writeLog(ex.Message);
  1339. }
  1340. break;
  1341. case 2:
  1342. needUploadData = false;
  1343. break;
  1344. case 3:
  1345. DialogResult result = MessageBox.Show(PdnResources.GetString("NewUploadDatabase") + "?", PdnResources.GetString("NewTips"), MessageBoxButtons.OKCancel);
  1346. if (result == DialogResult.OK)
  1347. {
  1348. needUploadData = true;
  1349. try
  1350. {
  1351. var resultData = webServiceDll.ws.sendDataToSerGrp(userName, passWord, equId, groupId, funId, paraname, paravalue, createdate);
  1352. writeLog(resultData, "0003上传回参");
  1353. }
  1354. catch (Exception ex)
  1355. {
  1356. writeLog(ex.Message);
  1357. }
  1358. }
  1359. break;
  1360. }
  1361. string fileName = DateTime.Now.ToString("yyyyMMddhhmmss") + "切片报告.xls";
  1362. #region [命名规则]
  1363. string ruleName = string.Empty;
  1364. string ruleGain = string.Empty;
  1365. if (this.measureMaintenanceType.ruleMessage != null)
  1366. {
  1367. ruleName = this.measureMaintenanceType.ruleMessage.ruleName;
  1368. ruleGain = this.measureMaintenanceType.ruleMessage.ruleGain.ToString();
  1369. }
  1370. else
  1371. {
  1372. List<mic_rulers> list = Program.instance.mic_rulersAll;
  1373. var ruler = list.Where(m => m.id.Equals(Program.instance.configModel.RulerId)).FirstOrDefault();
  1374. if (ruler != null)
  1375. {
  1376. ruleName = ruler.ruler_name;
  1377. ruleGain = ruler.gain_multiple.ToString();
  1378. }
  1379. }
  1380. NamingRuleHelper namingRuleHelper = new NamingRuleHelper();
  1381. if (this.thisNameRuleListDetails == null)
  1382. {
  1383. if (!string.IsNullOrEmpty(this.measureMaintenanceType.NameRuleID))
  1384. {
  1385. NameRuleListDetails nameRuleListDetails = Program.instance.fileNameRule.NameRuleList.Where(m => m.ID == this.measureMaintenanceType.NameRuleID).FirstOrDefault();
  1386. if (nameRuleListDetails != null)
  1387. {
  1388. fileName = namingRuleHelper.GetNameFromXml(nameRuleListDetails, ruleName, ruleGain, this.measureMaintenanceType, this.filePath) + ".xls";
  1389. if (nameRuleListDetails.isContinue)
  1390. {
  1391. nameRuleListDetails.NowNumber += 1;
  1392. }
  1393. string stageModelXml = XmlSerializeHelper.XmlSerialize<FileNameRule>(Program.instance.fileNameRule);
  1394. FileOperationHelper.WriteStringToFile(stageModelXml, Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\FileNameRule.xml", FileMode.Create);
  1395. }
  1396. }
  1397. }
  1398. else
  1399. {
  1400. fileName = namingRuleHelper.GetNameFromXml(this.thisNameRuleListDetails, ruleName, ruleGain, this.measureMaintenanceType, this.filePath) + ".xls";
  1401. if (this.thisNameRuleListDetails.isContinue)
  1402. {
  1403. this.thisNameRuleListDetails.NowNumber += 1;
  1404. }
  1405. }
  1406. if (string.IsNullOrEmpty(fileName) || fileName.Equals(".xls"))
  1407. {
  1408. fileName = DateTime.Now.ToString("yyyyMMddhhmmss") + "切片报告.xls";
  1409. }
  1410. #endregion
  1411. string path = this.filePath + "\\" + fileName;
  1412. string temp = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\TempFile";
  1413. if (!System.IO.Directory.Exists(temp))
  1414. {
  1415. System.IO.Directory.CreateDirectory(temp);
  1416. }
  1417. string tempFilePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\TempFile\\" + fileName;
  1418. //List<MeasureInfoResultModel> thisResultMatList = new List<MeasureInfoResultModel>();
  1419. //for (int i = 0; i < this.listView1.SelectedItems.Count; i++)
  1420. //{
  1421. // int index = this.listView1.SelectedItems[i].Index;
  1422. // thisResultMatList.Add(this.resultMatList[index]);
  1423. //}
  1424. ProgressThreadProcClass procClass = new ProgressThreadProcClass();
  1425. int itemCount = 100;
  1426. ProgressThreadProcClass.IFileTransferProgressEvents progressEvents = new ProgressThreadProcClass.IFileTransferProgressEvents();
  1427. System.Threading.ThreadStart copyThreadProc =
  1428. delegate ()
  1429. {
  1430. #region [对公式进行赋值]
  1431. MeasureInfoExportModel measureInfoExportModel = OrganizeResultData(this.resultMatList);
  1432. #endregion [对公式进行赋值]
  1433. #region [组织数据 开整!]
  1434. Excel.Application excelApp = new Excel.Application();
  1435. Excel.Workbook workBook = excelApp.Workbooks.Open(this.measureMaintenanceType.templateFilePath);
  1436. try
  1437. {
  1438. Excel.Names wbNames = workBook.Names;
  1439. int columnValue = 0;
  1440. int rowValue = 0;
  1441. int dataColumnValue = 0;
  1442. int dataCowValue = 0;
  1443. //根据单元格名称放值
  1444. foreach (var item in this.measureMaintenanceType.measureMaintenanceBasicDataList)
  1445. {
  1446. int index = this.measureMaintenanceType.measureMaintenanceBasicDataList.IndexOf(item);
  1447. foreach (Excel.Name n in wbNames)
  1448. {
  1449. if (n.Name.Equals(item.measureMaintenanceBasicDataPosition))
  1450. {
  1451. n.RefersToRange.Value = item.measureMaintenanceBasicDataValue;
  1452. if (item.measureMaintenanceBasicDataIndex == 10)
  1453. {
  1454. n.RefersToRange.Value = $"{DateTime.Now.Year}年{DateTime.Now.Month}月{DateTime.Now.Day}日";
  1455. }
  1456. }
  1457. if (n.Name.Equals("Value1"))
  1458. {
  1459. dataColumnValue = n.RefersToRange.Column;
  1460. dataCowValue = n.RefersToRange.Row + 1;
  1461. }
  1462. if (n.Name.Equals("Judgment"))
  1463. {
  1464. columnValue = n.RefersToRange.Column;
  1465. rowValue = n.RefersToRange.Row;
  1466. }
  1467. }
  1468. }
  1469. DataTable dataTable = new DataTable();
  1470. var workSheet = (Microsoft.Office.Interop.Excel.Worksheet)workBook.Worksheets[1];
  1471. Excel.Range range = workSheet.Range["Judgment"];
  1472. if (this.measureMaintenanceType.outputPicturesNum > 5)
  1473. {
  1474. double width = Convert.ToDouble(((Excel.Range)workSheet.Columns[columnValue - 1]).ColumnWidth);
  1475. for (int i = 6; i <= this.measureMaintenanceType.outputPicturesNum; i++)
  1476. {
  1477. #region [添加列]
  1478. range.EntireColumn.Insert(Excel.XlInsertShiftDirection.xlShiftToRight, Excel.XlInsertFormatOrigin.xlFormatFromRightOrBelow);
  1479. workSheet.Cells[rowValue, columnValue] = i.ToString();
  1480. workBook.Names.Add($"Value{i}", workSheet.Cells[rowValue, columnValue], true);
  1481. ((Excel.Range)workSheet.Columns[columnValue]).ColumnWidth = width;
  1482. //合并单元格
  1483. Excel.Range range1 = workSheet.Range[workSheet.Cells[rowValue, columnValue], workSheet.Cells[rowValue + 1, columnValue]];
  1484. range1.Merge(0);
  1485. columnValue++;
  1486. #endregion [添加列]
  1487. }
  1488. }
  1489. #region [分组铺数据]
  1490. var HoleTypeList = measureInfoExportModel.measureInfoExportDataModelList;
  1491. int realDataRowValue = dataCowValue;
  1492. int secondRowValue = dataCowValue + 1;
  1493. int firstRowValue = dataCowValue + 1;
  1494. Excel.Range range2 = workSheet.Range["Standard"];
  1495. int dataIndex = 1;
  1496. Dictionary<string, List<dynamic>> spcDataList = new Dictionary<string, List<dynamic>>();
  1497. foreach (var item in HoleTypeList)
  1498. {
  1499. this.Invoke(new Action(() =>
  1500. {
  1501. progressEvents.SetStringProgress(PdnResources.GetString("Dealing") + dataIndex + PdnResources.GetString("GeCeLiangFenLiangZhong"));
  1502. }));
  1503. List<dynamic> dynamicList = new List<dynamic>();
  1504. int rowIndex = -1;
  1505. foreach (var item2 in item.itemTypeList)
  1506. {
  1507. string dataId = Guid.NewGuid().ToString();
  1508. int index = -1;
  1509. foreach (var item3 in item2.LineDataList)
  1510. {
  1511. int realDataColumnValue = dataColumnValue;
  1512. //添加1行
  1513. range2.EntireRow.Insert(Excel.XlInsertShiftDirection.xlShiftDown, Excel.XlInsertFormatOrigin.xlFormatFromRightOrBelow);
  1514. #region [量测位置]
  1515. workSheet.Cells[realDataRowValue + 1, dataColumnValue - 1] = item3.name;
  1516. workSheet.Cells[realDataRowValue + 1, dataColumnValue - 1].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
  1517. workSheet.Cells[realDataRowValue + 1, dataColumnValue - 1].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
  1518. Excel.Range range3 = workSheet.Range[workSheet.Cells[realDataRowValue + 1, dataColumnValue - 1], workSheet.Cells[realDataRowValue + 1, dataColumnValue - 1]];
  1519. range3.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
  1520. #endregion [量测位置]
  1521. #region [数据]
  1522. string douData = "0";
  1523. //如果是最大值 最小值 平均值 则只取一个值
  1524. if (item3.isMaxOrMin)
  1525. {
  1526. switch (item3.typeCase)
  1527. {
  1528. case 1:
  1529. douData = Math.Round(item3.value.Max(), Program.instance.decimalPlaces).ToString();
  1530. break;
  1531. case 2:
  1532. douData = Math.Round(item3.value.Min(), Program.instance.decimalPlaces).ToString();
  1533. break;
  1534. case 3:
  1535. douData = Math.Round(item3.value.Average(), Program.instance.decimalPlaces).ToString();
  1536. break;
  1537. }
  1538. workSheet.Cells[realDataRowValue + 1, realDataColumnValue] = douData;
  1539. dynamic dy = new ExpandoObject();
  1540. dy.name = item3.name;
  1541. dy.dataId = dataId;
  1542. dy.dataType = 1;
  1543. dy.testItems = item2.TestItems;
  1544. dy.value = workSheet.Cells[realDataRowValue + 1, realDataColumnValue];
  1545. dynamicList.Add(dy);
  1546. if (spcDataList.ContainsKey(item2.TestItems))
  1547. {
  1548. spcDataList[item2.TestItems].Add(dy);
  1549. }
  1550. else
  1551. {
  1552. spcDataList.Add(item2.TestItems, new List<dynamic>() { dy });
  1553. }
  1554. workSheet.Cells[realDataRowValue + 1, realDataColumnValue].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
  1555. workSheet.Cells[realDataRowValue + 1, realDataColumnValue].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
  1556. //合并单元格
  1557. Excel.Range range15 = workSheet.Range[workSheet.Cells[realDataRowValue + 1, realDataColumnValue], workSheet.Cells[realDataRowValue + 1, realDataColumnValue + (this.measureMaintenanceType.outputPicturesNum - 1)]];
  1558. double doubleData = Convert.ToDouble(douData);
  1559. if (!outOk(doubleData, item2.Specification))
  1560. {
  1561. range15.Cells.Interior.Color = Color.FromArgb(0, 0, 255).ToArgb();
  1562. }
  1563. range15.Merge(0);
  1564. range15.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
  1565. realDataRowValue++;
  1566. }
  1567. else
  1568. {
  1569. foreach (var item4 in item3.value)
  1570. {
  1571. workSheet.Cells[realDataRowValue + 1, realDataColumnValue] = item4;
  1572. workSheet.Cells[realDataRowValue + 1, realDataColumnValue].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
  1573. workSheet.Cells[realDataRowValue + 1, realDataColumnValue].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
  1574. Excel.Range range1 = workSheet.Range[workSheet.Cells[realDataRowValue + 1, realDataColumnValue], workSheet.Cells[realDataRowValue + 1, realDataColumnValue]];
  1575. dynamic dy = new ExpandoObject();
  1576. dy.name = item3.name;
  1577. dy.dataId = dataId;
  1578. dy.testItems = item2.TestItems;
  1579. dy.dataType = 2;
  1580. dy.value = item4;
  1581. dy.imgIndex = item3.value.IndexOf(item4);
  1582. dynamicList.Add(dy);
  1583. if (spcDataList.ContainsKey(item2.TestItems))
  1584. {
  1585. spcDataList[item2.TestItems].Add(dy);
  1586. }
  1587. else
  1588. {
  1589. spcDataList.Add(item2.TestItems, new List<dynamic>() { dy });
  1590. }
  1591. if (item3.NgValue.Contains(item4))
  1592. {
  1593. if (double.IsInfinity(item4) || double.IsNaN(item4))
  1594. {
  1595. workSheet.Cells[realDataRowValue + 1, realDataColumnValue] = "error";
  1596. workSheet.Cells[realDataRowValue + 1, realDataColumnValue].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
  1597. workSheet.Cells[realDataRowValue + 1, realDataColumnValue].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
  1598. range1 = workSheet.Range[workSheet.Cells[realDataRowValue + 1, realDataColumnValue], workSheet.Cells[realDataRowValue + 1, realDataColumnValue]];
  1599. }
  1600. range1.Cells.Interior.Color = Color.FromArgb(0, 0, 255).ToArgb();
  1601. }
  1602. range1.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
  1603. realDataColumnValue++;
  1604. }
  1605. realDataRowValue++;
  1606. }
  1607. #endregion [数据]
  1608. index++;
  1609. rowIndex++;
  1610. }
  1611. #region [规格]
  1612. var spec = item2.Specification;
  1613. string data = string.Empty;
  1614. string SpecificationCondition = "Unconditional";
  1615. decimal SpecificationCOnditionNum = 0;
  1616. decimal SpecificationCOnditionRangeGreateNum = 0;
  1617. List<string> list = new List<string>();
  1618. if (!string.IsNullOrEmpty(spec) && !spec.Contains("-"))
  1619. {
  1620. list = spec.Split('X').ToList();
  1621. if (list.Count == 2)
  1622. {
  1623. list[0] = list[0].Replace("<=", "LQ").Replace("<", "L");
  1624. list[1] = list[1].Replace("<=", "LQ").Replace("<", "L");
  1625. if (string.IsNullOrEmpty(list[0]) && string.IsNullOrEmpty(list[1]))
  1626. {
  1627. }
  1628. else if (string.IsNullOrEmpty(list[0]))
  1629. {
  1630. if (list[1].Contains("LQ"))
  1631. {
  1632. data = $"{list[1].Replace("LQ", "<=")}";
  1633. SpecificationCondition = "LessEqual";
  1634. SpecificationCOnditionNum = Convert.ToDecimal(list[1].Replace("LQ", ""));
  1635. }
  1636. else
  1637. {
  1638. data = $"{list[1].Replace("L", "<")}";
  1639. SpecificationCondition = "Less";
  1640. SpecificationCOnditionNum = Convert.ToDecimal(list[1].Replace("L", ""));
  1641. }
  1642. }
  1643. else if (string.IsNullOrEmpty(list[1]))
  1644. {
  1645. if (list[0].Contains("LQ"))
  1646. {
  1647. data = $"{list[0].Replace("LQ", "<=")}";
  1648. SpecificationCondition = "GreaterEqual";
  1649. SpecificationCOnditionNum = Convert.ToDecimal(list[0].Replace("LQ", ""));
  1650. }
  1651. else
  1652. {
  1653. data = $"{list[0].Replace("L", "<")}";
  1654. SpecificationCondition = "Greater";
  1655. SpecificationCOnditionNum = Convert.ToDecimal(list[0].Replace("L", ""));
  1656. }
  1657. }
  1658. else
  1659. {
  1660. data = $"{spec.Replace("<=", "").Replace("<", "").Replace("X", "~")}";
  1661. SpecificationCondition = "Range";
  1662. SpecificationCOnditionNum = Convert.ToDecimal(list[0].Replace("LQ", "").Replace("L", ""));
  1663. SpecificationCOnditionRangeGreateNum = Convert.ToDecimal(list[1].Replace("LQ", "").Replace("L", ""));
  1664. }
  1665. }
  1666. }
  1667. workSheet.Cells[secondRowValue, dataColumnValue - 2] = data;
  1668. workSheet.Cells[secondRowValue, dataColumnValue - 2].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
  1669. workSheet.Cells[secondRowValue, dataColumnValue - 2].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
  1670. //合并单元格
  1671. Excel.Range range5 = workSheet.Range[workSheet.Cells[secondRowValue, dataColumnValue - 2], workSheet.Cells[secondRowValue + index, dataColumnValue - 2]];
  1672. range5.Merge(0);
  1673. range5.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
  1674. #endregion [规格]
  1675. #region [检测项目]
  1676. workSheet.Cells[secondRowValue, dataColumnValue - 3] = item2.TestItems;
  1677. workSheet.Cells[secondRowValue, dataColumnValue - 3].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
  1678. workSheet.Cells[secondRowValue, dataColumnValue - 3].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
  1679. //合并单元格
  1680. Excel.Range range4 = workSheet.Range[workSheet.Cells[secondRowValue, dataColumnValue - 3], workSheet.Cells[secondRowValue + index, dataColumnValue - 3]];
  1681. range4.Merge(0);
  1682. range4.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
  1683. #endregion [检测项目]
  1684. #region [判断]
  1685. string resultData;
  1686. string Judgment = "N/A";
  1687. if (!string.IsNullOrEmpty(spec) && !spec.Equals("-") && item.matList.Count != 0)
  1688. {
  1689. resultData = "V";
  1690. if (!item2.isOk)
  1691. {
  1692. workSheet.Cells[secondRowValue, columnValue + 1] = resultData;
  1693. workSheet.Cells[secondRowValue, columnValue + 1].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
  1694. workSheet.Cells[secondRowValue, columnValue + 1].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
  1695. Judgment = "NG";
  1696. }
  1697. else
  1698. {
  1699. workSheet.Cells[secondRowValue, columnValue] = resultData;
  1700. workSheet.Cells[secondRowValue, columnValue].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
  1701. workSheet.Cells[secondRowValue, columnValue].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
  1702. Judgment = "OK";
  1703. }
  1704. //合并单元格
  1705. Excel.Range range8 = workSheet.Range[workSheet.Cells[secondRowValue, columnValue], workSheet.Cells[secondRowValue + index, columnValue]];
  1706. range8.Merge(0);
  1707. range8.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
  1708. //合并单元格
  1709. Excel.Range range9 = workSheet.Range[workSheet.Cells[secondRowValue, columnValue + 1], workSheet.Cells[secondRowValue + index, columnValue + 1]];
  1710. range9.Merge(0);
  1711. range9.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
  1712. }
  1713. else
  1714. {
  1715. resultData = "N/A";
  1716. workSheet.Cells[secondRowValue, columnValue] = resultData;
  1717. workSheet.Cells[secondRowValue, columnValue].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
  1718. workSheet.Cells[secondRowValue, columnValue].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
  1719. //合并单元格
  1720. Excel.Range range7 = workSheet.Range[workSheet.Cells[secondRowValue, columnValue], workSheet.Cells[secondRowValue + index, columnValue + 1]];
  1721. range7.Merge(0);
  1722. range7.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
  1723. }
  1724. #endregion [判断]
  1725. #region [上传数据库]
  1726. if (needUploadData)
  1727. {
  1728. string paravalue2 = string.Empty;
  1729. paravalue2 = $"{dataId}|{mainID}|{item.HoleType}|{item2.TestItems}|{SpecificationCondition}|{SpecificationCOnditionNum}|{SpecificationCOnditionRangeGreateNum}|{Judgment}";
  1730. try
  1731. {
  1732. var result1 = webServiceDll.ws.sendDataToSerGrp(userName, passWord, equId, groupId, funId2, paraname2, paravalue2, createdate);
  1733. writeLog(result1, "0004上传回参");
  1734. }
  1735. catch (Exception ex)
  1736. {
  1737. writeLog(ex.Message);
  1738. }
  1739. }
  1740. #endregion [上传数据库]
  1741. secondRowValue += (index + 1);
  1742. }
  1743. #region [孔型]
  1744. workSheet.Cells[firstRowValue, dataColumnValue - 4] = item.HoleType;
  1745. workSheet.Cells[firstRowValue, dataColumnValue - 4].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
  1746. workSheet.Cells[firstRowValue, dataColumnValue - 4].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
  1747. //合并单元格
  1748. Excel.Range range6 = workSheet.Range[workSheet.Cells[firstRowValue, dataColumnValue - 4], workSheet.Cells[firstRowValue + rowIndex, dataColumnValue - 4]];
  1749. range6.Merge(0);
  1750. range6.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
  1751. #endregion [孔型]
  1752. #region [图片]
  1753. List<string> pathList = new List<string>();
  1754. //合并单元格
  1755. Excel.Range range10 = workSheet.Range["Dan"];
  1756. int lastCol = range10.Column;
  1757. Excel.Range range11 = workSheet.Range[workSheet.Cells[firstRowValue, columnValue + 2], workSheet.Cells[firstRowValue + rowIndex, lastCol + 1]];
  1758. range11.Merge(0);
  1759. range11.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
  1760. float PicLeft, PicTop, PicWidth, PicHeight;
  1761. int haltWidth = Convert.ToInt32(range11.Width / ((item.matList.Count) == 0 ? 1 : item.matList.Count));
  1762. int Index = 0;
  1763. foreach (var mat in item.matList)
  1764. {
  1765. this.Invoke(new Action(() =>
  1766. {
  1767. progressEvents.SetStringProgress((PdnResources.GetString("Dealing") + dataIndex + PdnResources.GetString("GeCeLiangFenLiangZhong") + ",第" + (Index + 1) + "/" + item.matList.Count + PdnResources.GetString("Image")));
  1768. }));
  1769. string ImgPath = SaveAllImage(mat, item.GraphicsListList[Index]);
  1770. pathList.Add(ImgPath);
  1771. PicWidth = (float)(5.2d / 0.035d);
  1772. PicTop = Convert.ToSingle(range11.Top);
  1773. PicLeft = Convert.ToSingle(range11.Left + PicWidth * Index + 10);
  1774. PicHeight = (float)(3.6d / 0.035d);
  1775. //workSheet.Shapes.AddPicture2(ImgPath, MsoTriState.msoFalse, MsoTriState.msoTrue, PicLeft, PicTop, PicWidth, PicHeight, MsoPictureCompress.msoPictureCompressFalse);
  1776. workSheet.Shapes.AddPicture(ImgPath, MsoTriState.msoFalse, MsoTriState.msoTrue, PicLeft, PicTop, PicWidth, PicHeight);
  1777. Index++;
  1778. }
  1779. firstRowValue += (rowIndex + 1);
  1780. #endregion [图片]
  1781. #region [上传数据库]
  1782. if (needUploadData)
  1783. {
  1784. try
  1785. {
  1786. #region [上传FTP]
  1787. string ftpStr = DateTime.Now.ToString("yyyyMMdd");
  1788. try
  1789. {
  1790. FTPWebsiteHelper fTPWebsiteHelper = new FTPWebsiteHelper();
  1791. fTPWebsiteHelper.ftpPath = Program.instance.configModel.FTPURL;
  1792. fTPWebsiteHelper.ftpUserID = Program.instance.configModel.FTPUserName;
  1793. fTPWebsiteHelper.ftpPassword = Program.instance.configModel.FTPPassword;
  1794. //fTPWebsiteHelper.ftpPath = "ftp://127.0.0.1";
  1795. //fTPWebsiteHelper.ftpUserID = "admin";
  1796. //fTPWebsiteHelper.ftpPassword = "123456";
  1797. foreach (var file in pathList)
  1798. {
  1799. fTPWebsiteHelper.UpLoadFile(file);
  1800. }
  1801. ftpStr = fTPWebsiteHelper.ftpStr;
  1802. }
  1803. catch (Exception ex)
  1804. {
  1805. writeLog(ex.Message, "FTP错误");
  1806. }
  1807. #endregion [上传FTP]
  1808. foreach (dynamic dy in dynamicList)
  1809. {
  1810. string dataFilePath = string.Empty;
  1811. if (dy.dataType == 1)
  1812. {
  1813. //foreach (var file in pathList)
  1814. //{
  1815. // FileInfo fileInf = new FileInfo(file);
  1816. // dataFilePath += $"{Program.instance.configModel.FTPFilePath + "/" + fileInf.Name},";
  1817. //}
  1818. }
  1819. else
  1820. {
  1821. FileInfo fileInf = new FileInfo(pathList[dy.imgIndex]);
  1822. dataFilePath = $"{Program.instance.configModel.FTPFilePath + "/" + ftpStr + "/" + fileInf.Name}";
  1823. }
  1824. string paravalue3 = $"{Guid.NewGuid().ToString()}| {dy.name}|{dy.value}|{dataFilePath}|{dy.dataId}|{mainID}";
  1825. var result2 = webServiceDll.ws.sendDataToSerGrp(userName, passWord, equId, groupId, funId3, paraname3, paravalue3, createdate);
  1826. //writeLog(result2, "0004上传回参");
  1827. }
  1828. }
  1829. catch (Exception ex)
  1830. {
  1831. writeLog(ex.Message);
  1832. }
  1833. }
  1834. #endregion [上传数据库]
  1835. dataIndex++;
  1836. }
  1837. #endregion [分组铺数据]
  1838. //SPC上传
  1839. #region [上传数据库]
  1840. if (needSPCUploadData)
  1841. {
  1842. Scheme schemeModel = getSpcApiSetting();
  1843. if (schemeModel != null)
  1844. {
  1845. try
  1846. {
  1847. //通过“料号获取SPC管制清单”
  1848. var rs = ws.getctrlitem(this.measureMaintenanceType.measureMaintenanceBasicDataList[0].measureMaintenanceBasicDataValue /*料号*/);
  1849. string daStr = DateTime.Now.ToString("yyyy-MM-dd HH:ss");
  1850. if (rs.msg.Contains("OK"))
  1851. {
  1852. int spcDataIndex = 0;
  1853. foreach (var spcData in rs.ds.Tables[0].Rows)
  1854. {
  1855. string dateStr = string.Empty;//时间
  1856. string dataStr = string.Empty;//数据
  1857. var filegroup = rs.ds.Tables[0].Rows[spcDataIndex]["filegroup"].ToString();//SPC群組
  1858. var filename = rs.ds.Tables[0].Rows[spcDataIndex]["filename"].ToString();//SPC檔案
  1859. var ctrlitem = rs.ds.Tables[0].Rows[spcDataIndex]["ctrlitem"].ToString();//管制项目
  1860. var spsize = rs.ds.Tables[0].Rows[spcDataIndex]["spsize"].ToString();//切片数量
  1861. //系统中“电镀线别”为空直接退出
  1862. if (string.IsNullOrEmpty(this.measureMaintenanceType.measureMaintenanceBasicDataList[8].measureMaintenanceBasicDataValue))
  1863. {
  1864. break;
  1865. }
  1866. //SPC檔案中不包括“电镀线别”
  1867. if (!filename.Contains(this.measureMaintenanceType.measureMaintenanceBasicDataList[8].measureMaintenanceBasicDataValue /*电镀线别*/))
  1868. {
  1869. spcDataIndex++;
  1870. continue;
  1871. }
  1872. spcDataIndex++;
  1873. int count = Convert.ToInt32(spsize);
  1874. int needCount = 0;//需要的检测项目数量
  1875. var dataList = spcDataList.Values.ToList();//当前检测项目及测量数据信息
  1876. foreach (var item in dataList)
  1877. {
  1878. foreach (dynamic dy in item)//从SPC檔案筛选出当前使用的检测项目及测量数据(SPC檔案包含全部检测项目,需要挑选中使用的)
  1879. {
  1880. if (!filename.Contains(dy.testItems))
  1881. {
  1882. continue;
  1883. }
  1884. if (needCount >= count)
  1885. {
  1886. break;
  1887. }
  1888. dateStr += $"{daStr}|";//系统当前时间
  1889. dataStr += $"{dy.value}|";//测量值
  1890. needCount++;
  1891. }
  1892. }
  1893. //如果筛选出来的检测项目数量小于切片数量.余下的切片对应的数据设置为0。
  1894. if (needCount < count)
  1895. {
  1896. for (int i = 1; i <= (count - needCount); i++)
  1897. {
  1898. dateStr += $"{daStr}|";
  1899. dataStr += $"{0}|";
  1900. }
  1901. }
  1902. dateStr = dateStr.Remove(dateStr.Length - 1, 1);
  1903. dataStr = dataStr.Remove(dataStr.Length - 1, 1);
  1904. writeLog(count.ToString() + "和" + dateStr + "和" + dataStr, "SPC上传接口参数展示");
  1905. var interfacePassWord = Program.instance.configModel.interfacePassWord;
  1906. //根据配置文件组织数据
  1907. int t = 0;
  1908. List<string> paraList = new List<string>();
  1909. foreach (Item item in schemeModel.items)
  1910. {
  1911. try
  1912. {
  1913. t = int.Parse(item.filedNum.Trim());
  1914. paraList.Add(measureMaintenanceType.measureMaintenanceBasicDataList[t - 1].measureMaintenanceBasicDataValue);
  1915. }
  1916. catch (Exception)
  1917. {
  1918. paraList.Add("");
  1919. continue;
  1920. }
  1921. }
  1922. //var result = ws.spcapi(interfacePassWord, "filegroup", "filename", "ctrlitem", "dateStr", "dataStr", "count", paraList[0], paraList[1], paraList[2], paraList[3], paraList[4], paraList[5], paraList[6], paraList[7], paraList[8], paraList[9], paraList[10], paraList[11], paraList[12], paraList[13], paraList[14], paraList[15], paraList[16], paraList[17], paraList[18], paraList[19]);
  1923. var result = ws.spcapi(interfacePassWord, filegroup.ToString(), filename.ToString(), ctrlitem.ToString(), dateStr, dataStr, count.ToString(), paraList[0], paraList[1], paraList[2], paraList[3], paraList[4], paraList[5], paraList[6], paraList[7], paraList[8], paraList[9], paraList[10], paraList[11], paraList[12], paraList[13], paraList[14], paraList[15], paraList[16], paraList[17], paraList[18], paraList[19]);
  1924. //if (result.Contains("NG"))
  1925. //{
  1926. // writeLog( result, "SPC上传接口错误");
  1927. //}
  1928. writeLog(result, "SPC上传接口调用结果反馈");
  1929. }
  1930. }
  1931. else
  1932. {
  1933. writeLog(rs.msg, "SPC-料号获取SPC管制清单方法错误");
  1934. }
  1935. }
  1936. catch (Exception ex)
  1937. {
  1938. writeLog(ex.Message, "SPC下拉接口错误");
  1939. }
  1940. }
  1941. else
  1942. {
  1943. writeLog("请检测配置文档", "SPC配置返回空");
  1944. }
  1945. }
  1946. #endregion
  1947. object nothing = Type.Missing;
  1948. workBook.SaveAs(tempFilePath, nothing, nothing, nothing, nothing, nothing,
  1949. Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, nothing, nothing, nothing, nothing, nothing);
  1950. }
  1951. catch (Exception ex)
  1952. {
  1953. writeLog(ex.Message);
  1954. }
  1955. finally
  1956. {
  1957. if (excelApp != null)
  1958. {
  1959. if (excelApp != null && workBook != null)
  1960. workBook.Close(false);
  1961. excelApp.Quit();
  1962. OfficeFileHandleHelper.Kill(excelApp);
  1963. }
  1964. progressEvents.EndOperation(OperationResult.Finished);
  1965. }
  1966. #endregion [组织数据 开整!]
  1967. };
  1968. procClass.StartProgressAction(this, itemCount, copyThreadProc, progressEvents, null);
  1969. string filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\TempImg";
  1970. #region [复制文件到另一个文件夹]
  1971. try
  1972. {
  1973. FileOperationHelper.CopyFile(tempFilePath, this.filePath, "", true);
  1974. Directory.Delete(temp, true);
  1975. }
  1976. catch (Exception ex)
  1977. {
  1978. }
  1979. #endregion [复制文件到另一个文件夹]
  1980. try
  1981. {
  1982. if (Directory.Exists(filePath))
  1983. {
  1984. Directory.Delete(filePath, true);
  1985. }
  1986. }
  1987. catch (Exception ex)
  1988. {
  1989. }
  1990. if (checkBox1.Checked)
  1991. {
  1992. if (!OfficeFileHandleHelper.OpenOfficeFile(path))
  1993. MessageBox.Show(PdnResources.GetString("Menu.Fileopenfailed.Text"));
  1994. }
  1995. this.isSPCItemNull = false;
  1996. MessageBox.Show(PdnResources.GetString("NewExportSucceeded"));
  1997. }
  1998. /// <summary>
  1999. /// 读取SPCApi配置方案
  2000. /// </summary>
  2001. private Scheme getSpcApiSetting()
  2002. {
  2003. string filePath;
  2004. filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\SpcApiSchemes.xml";
  2005. if (System.IO.File.Exists(filePath))
  2006. {
  2007. spcApiSchemesModel = XmlSerializeHelper.DESerializer<SpcApiSchemesModel>(FileOperationHelper.ReadStringFromFile(filePath, FileMode.Open));
  2008. if (spcApiSchemesModel.schemes.Count > 0)
  2009. {
  2010. Scheme schemeModel = new Scheme();
  2011. int cnt = 0;
  2012. foreach (Scheme scheme in spcApiSchemesModel.schemes)
  2013. {
  2014. if (scheme.isUse)
  2015. {
  2016. cnt = cnt + 1;
  2017. schemeModel = scheme;
  2018. }
  2019. }
  2020. if (cnt == 1)
  2021. {
  2022. if ( schemeModel.items.Count == 20)
  2023. {
  2024. return schemeModel;
  2025. }
  2026. else
  2027. {
  2028. writeLog("栏位总数必须为20!", "SPC上传接口错误");
  2029. return null;
  2030. }
  2031. }
  2032. else
  2033. {
  2034. writeLog("接口数据项配置错误,无启用方案或启用方案不唯一!", "SPC上传接口错误");
  2035. return null;
  2036. }
  2037. }
  2038. else
  2039. {
  2040. writeLog("接口数据项配置错误,未找到可用配置!", "SPC上传接口错误");
  2041. return null;
  2042. }
  2043. }
  2044. else
  2045. {
  2046. writeLog("配置文件不存在!","SPC上传接口错误");
  2047. return null;
  2048. }
  2049. }
  2050. /// <summary>
  2051. /// 组织最终导出数据
  2052. /// </summary>
  2053. private MeasureInfoExportModel OrganizeResultData(List<MeasureInfoResultModel> thisResultMatList)
  2054. {
  2055. MeasureInfoExportModel measureInfoExportModel = new MeasureInfoExportModel();
  2056. var HoleTypeList = this.measureMaintenanceType.MeasureMaintenanceTreeFourthDataList.GroupBy(m => m.HoleType);
  2057. #region [先整理下整体的数据]
  2058. #region [特殊处理下叠构]
  2059. var resList = thisResultMatList.Where(m => m.parentId.Equals("100209")).ToList();
  2060. if (resList.Count > 0)
  2061. {
  2062. foreach (var item in resList)
  2063. {
  2064. List<string> nameList = item.dataInforList.Select(m => m.name).ToList();
  2065. var ls = item.dataInforList.OrderBy(m => m.point1.Y).ToList();
  2066. for (int i = 0; i < ls.Count(); i++)
  2067. {
  2068. ls[i].name = nameList[i];
  2069. }
  2070. }
  2071. thisResultMatList.RemoveAll(m => m.parentId.Equals("100209"));
  2072. thisResultMatList.AddRange(resList);
  2073. }
  2074. #endregion [特殊处理下叠构]
  2075. var dataList = HoleTypeList.ToList();
  2076. for (int i = dataList.Count - 1; i >= 0; i--)
  2077. {
  2078. var data = dataList[i];
  2079. var resultDataList = thisResultMatList.Where(m => m.parentId.Equals(data.First().HoleTypeId)).ToList();
  2080. var a = Math.Ceiling(Convert.ToDouble(resultDataList.Count()) / Convert.ToDouble(this.measureMaintenanceType.outputPicturesNum));
  2081. if (a > 0)
  2082. {
  2083. for (int j = 1; j <= a; j++)
  2084. {
  2085. dataList.Insert(i + j, data);
  2086. }
  2087. dataList.RemoveAt(i);
  2088. }
  2089. }
  2090. #endregion [先整理下整体的数据]
  2091. string name = string.Empty;
  2092. int startNum = 0;
  2093. foreach (var item in dataList)
  2094. {
  2095. MeasureInfoExportDataModel measureInfoExportDataModel = new MeasureInfoExportDataModel();
  2096. measureInfoExportDataModel.HoleType = item.Key;
  2097. measureInfoExportDataModel.HoleTypeId = item.FirstOrDefault().HoleTypeId;
  2098. var resultDataList = thisResultMatList.Where(m => m.parentId.Equals(measureInfoExportDataModel.HoleTypeId)).ToList();
  2099. if (name.Equals(item.Key))
  2100. {
  2101. startNum++;
  2102. }
  2103. else
  2104. {
  2105. name = item.Key;
  2106. startNum = 0;
  2107. }
  2108. resultDataList = resultDataList.Skip(this.measureMaintenanceType.outputPicturesNum * startNum).Take(this.measureMaintenanceType.outputPicturesNum).ToList();
  2109. //添加图片及名称
  2110. foreach (var result in resultDataList)
  2111. {
  2112. var list = result.dataInforList;
  2113. List<DrawObject> lines = new List<DrawObject>();
  2114. GraphicsList graphicsList = new GraphicsList();
  2115. if (result.GraphicsListList != null)
  2116. {
  2117. for (int i = 0; i < result.GraphicsListList.Count; i++)
  2118. {
  2119. graphicsList.Add(result.GraphicsListList[i]);
  2120. }
  2121. }
  2122. if (checkBox2.Checked)
  2123. {
  2124. if (graphicsList.Count > 0)
  2125. {
  2126. graphicsList[0].Selected = false;
  2127. lines.Add(graphicsList[0]);
  2128. }
  2129. graphicsList = new GraphicsList();
  2130. }
  2131. else {
  2132. graphicsList = new GraphicsList();
  2133. }
  2134. //if (result.GraphicsListList != null)
  2135. //{
  2136. // if (checkBox2.Checked)
  2137. // {
  2138. // if (result.GraphicsListList.Count > 0)
  2139. // {
  2140. // lines.Add(result.GraphicsListList[0]);
  2141. // }
  2142. // }
  2143. // result.GraphicsListList = new GraphicsList();
  2144. //}
  2145. //else
  2146. //{
  2147. // result.GraphicsListList = new GraphicsList();
  2148. //}
  2149. var documentWorkspace1 = new DocumentWorkspaceWindow(this.appWorkspace);
  2150. Document document = Document.FromMat(result.resultMat);
  2151. documentWorkspace1.Document = document;
  2152. double unit = 1;
  2153. if (this.pidRuleDic.ContainsKey(result.parentId))
  2154. {
  2155. if (this.pidRuleDic[result.parentId].ContainsKey(result.fileName))
  2156. {
  2157. unit = this.pidRuleDic[result.parentId][result.fileName];
  2158. }
  2159. }
  2160. foreach (var draw in list)
  2161. {
  2162. if (draw.value == 0)
  2163. {
  2164. continue;
  2165. }
  2166. switch (draw.drawType)
  2167. {
  2168. case "MeasureLine":
  2169. MeasureLine line = new MeasureLine(documentWorkspace1, draw.point1, draw.point2, draw.aliasName, unit);
  2170. line.moved = true;
  2171. line.ISurfaceBox = documentWorkspace1;
  2172. lines.Add(line);
  2173. break;
  2174. case "MeasureVLine":
  2175. MeasureVLine vline = new MeasureVLine(documentWorkspace1, draw.point1, draw.point2, draw.aliasName, unit);
  2176. vline.moved = true;
  2177. vline.ISurfaceBox = documentWorkspace1;
  2178. lines.Add(vline);
  2179. break;
  2180. case "MeasureHLine":
  2181. MeasureHLine hline = new MeasureHLine(documentWorkspace1, draw.point1, draw.point2, draw.aliasName, unit);
  2182. hline.moved = true;
  2183. hline.ISurfaceBox = documentWorkspace1;
  2184. lines.Add(hline);
  2185. break;
  2186. }
  2187. }
  2188. graphicsList.AddRange(lines);
  2189. measureInfoExportDataModel.matList.Add(result.resultMat);
  2190. measureInfoExportDataModel.fileNameList.Add(result.fileName);
  2191. measureInfoExportDataModel.GraphicsListList.Add(graphicsList);
  2192. }
  2193. var itemTypeList = item.GroupBy(m => m.TestItems);
  2194. foreach (var item2 in itemTypeList)
  2195. {
  2196. ItemType itemType = new ItemType();
  2197. itemType.TestItems = item2.Key;
  2198. itemType.Specification = item2.FirstOrDefault().Specification;
  2199. itemType.isOk = true;
  2200. foreach (var item3 in item2)
  2201. {
  2202. LineData lineData = new LineData();
  2203. lineData.name = item3.FormulaName;
  2204. lineData.isOk = true;
  2205. lineData.isMaxOrMin = (item3.FormulaExpression.Contains("最大值") || item3.FormulaExpression.Contains("最小值") || item3.FormulaExpression.Contains("平均值"));
  2206. if (item3.FormulaExpression.Contains("最大值"))
  2207. {
  2208. lineData.typeCase = 1;
  2209. }
  2210. else if (item3.FormulaExpression.Contains("最小值"))
  2211. {
  2212. lineData.typeCase = 2;
  2213. }
  2214. else if (item3.FormulaExpression.Contains("平均值"))
  2215. {
  2216. lineData.typeCase = 3;
  2217. }
  2218. //计算结果
  2219. foreach (var data in resultDataList)
  2220. {
  2221. double result;
  2222. double unit = 1;
  2223. if (this.pidRuleDic.ContainsKey(data.parentId))
  2224. {
  2225. if (this.pidRuleDic[data.parentId].ContainsKey(data.fileName))
  2226. {
  2227. unit = this.pidRuleDic[data.parentId][data.fileName];
  2228. }
  2229. }
  2230. outPutResult(data.dataInforList, lineData.isMaxOrMin, item3.FormulaExpression, unit, lineData.typeCase, out result);
  2231. result = Math.Round(result, Program.instance.decimalPlaces);
  2232. lineData.value.Add(result);
  2233. if (double.IsInfinity(result) || double.IsNaN(result))
  2234. {
  2235. lineData.NgValue.Add(result);
  2236. lineData.isOk = false;
  2237. itemType.isOk = false;
  2238. }
  2239. else {
  2240. if (!outOk(result, item3.Specification))
  2241. {
  2242. lineData.NgValue.Add(result);
  2243. lineData.isOk = false;
  2244. itemType.isOk = false;
  2245. }
  2246. }
  2247. }
  2248. itemType.LineDataList.Add(lineData);
  2249. }
  2250. measureInfoExportDataModel.itemTypeList.Add(itemType);
  2251. }
  2252. measureInfoExportModel.measureInfoExportDataModelList.Add(measureInfoExportDataModel);
  2253. }
  2254. return measureInfoExportModel;
  2255. }
  2256. /// <summary>
  2257. /// 返回公式所得值
  2258. /// </summary>
  2259. /// <param name="dataInforList"></param>
  2260. /// <param name="formula"></param>
  2261. /// <param name="result"></param>
  2262. /// <returns></returns>
  2263. private double outPutResult(List<DataInfor> dataInforList, bool isMaxOrMin, string formula, double unit, int typeCase, out double result)
  2264. {
  2265. if (isMaxOrMin)
  2266. {
  2267. var str = formula.Split('\\').ToList();
  2268. str.RemoveAt(str.Count - 1);
  2269. List<double> resultList = new List<double>();
  2270. foreach (var everyStr in str)
  2271. {
  2272. var data = dataInforList.Where(m => m.aliasName.Equals(everyStr)).FirstOrDefault();
  2273. if (data != null)
  2274. {
  2275. resultList.Add(data.value * unit);
  2276. }
  2277. else
  2278. {
  2279. resultList.Add(0);
  2280. }
  2281. }
  2282. switch (typeCase)
  2283. {
  2284. case 1:
  2285. result = resultList.Max();
  2286. break;
  2287. case 2:
  2288. result = resultList.Min();
  2289. break;
  2290. case 3:
  2291. result = resultList.Average();
  2292. break;
  2293. default:
  2294. result = 0;
  2295. break;
  2296. }
  2297. }
  2298. else
  2299. {
  2300. foreach (var item in dataInforList)
  2301. {
  2302. if (formula.Contains(item.aliasName))
  2303. {
  2304. formula = formula.Replace(item.aliasName, (item.value * unit).ToString());
  2305. }
  2306. }
  2307. if (formula.Contains("["))
  2308. {
  2309. result = getResult(formula);
  2310. }
  2311. else {
  2312. result = Convert.ToDouble(FormulaHelper.CaleByFormule(formula));
  2313. }
  2314. }
  2315. return result;
  2316. }
  2317. /// <summary>
  2318. /// 获取绝对值
  2319. /// </summary>
  2320. private double getResult(string formula)
  2321. {
  2322. formula = formula.Replace("[", "Math.abs(").Replace("]", ")");
  2323. double res = Math.Abs(Convert.ToDouble(FormulaHelper.CaleByFormule(formula)));
  2324. return res;
  2325. }
  2326. /// <summary>
  2327. /// 计算单个绝对值
  2328. /// 传出绝对值结尾的下一个字符的位置pos
  2329. /// 并返回绝对值计算结果
  2330. /// </summary>
  2331. /// <param name="formula"></param>
  2332. /// <returns></returns>
  2333. private string calcuAbsVal(string formula, out int pos)
  2334. {
  2335. string result = "";
  2336. bool inBra = false;
  2337. int braCount = 0;
  2338. pos = 0;
  2339. int i = 1;
  2340. while(i < formula.Length)
  2341. {
  2342. if(formula[i] == '[')
  2343. {
  2344. return calcuAbsVal(formula.Substring(i), out i);
  2345. }
  2346. else if (formula[i] == ']')
  2347. {
  2348. // 记录该绝对值结束的位置
  2349. pos = i + 1;
  2350. string temp = FormulaHelper.CaleByFormule(formula.Substring(1, i));
  2351. if(Convert.ToDouble(temp) < 0)
  2352. {
  2353. temp = temp.Replace("-", "");
  2354. }
  2355. return temp;
  2356. }
  2357. }
  2358. return FormulaHelper.CaleByFormule(result);
  2359. }
  2360. /// <summary>
  2361. /// 返回是否合格
  2362. /// </summary>
  2363. /// <returns></returns>
  2364. private bool outOk(double result, string specification)
  2365. {
  2366. specification = specification.Replace("<=", "LQ").Replace("<", "L");
  2367. List<string> list;
  2368. if (!string.IsNullOrEmpty(specification))
  2369. {
  2370. if (specification.Contains('-'))
  2371. {
  2372. return true;
  2373. }
  2374. list = specification.Split('X').ToList();
  2375. if (list.Count == 2)
  2376. {
  2377. if (string.IsNullOrEmpty(list[0]))
  2378. {
  2379. if (list[1].Contains("LQ"))
  2380. {
  2381. return result <= Convert.ToDouble(list[1].Replace("LQ", ""));
  2382. }
  2383. else {
  2384. return result < Convert.ToDouble(list[1].Replace("L", ""));
  2385. }
  2386. }
  2387. else if (string.IsNullOrEmpty(list[1]))
  2388. {
  2389. if (list[0].Contains("LQ"))
  2390. {
  2391. return result >= Convert.ToDouble(list[0].Replace("LQ", ""));
  2392. }
  2393. else
  2394. {
  2395. return result > Convert.ToDouble(list[0].Replace("L", ""));
  2396. }
  2397. }
  2398. else
  2399. {
  2400. bool right = true;
  2401. bool left = true;
  2402. if (list[1].Contains("LQ"))
  2403. {
  2404. right = result <= Convert.ToDouble(list[1].Replace("LQ", ""));
  2405. }
  2406. else
  2407. {
  2408. right = result < Convert.ToDouble(list[1].Replace("L", ""));
  2409. }
  2410. if (list[0].Contains("LQ"))
  2411. {
  2412. left = result >= Convert.ToDouble(list[0].Replace("LQ", ""));
  2413. }
  2414. else
  2415. {
  2416. left = result > Convert.ToDouble(list[0].Replace("L", ""));
  2417. }
  2418. return right && left;
  2419. }
  2420. }
  2421. else
  2422. {
  2423. return true;
  2424. }
  2425. }
  2426. return true;
  2427. }
  2428. /// <summary>
  2429. /// 保存图片到本地
  2430. /// </summary>
  2431. /// <param name="bitList"></param>
  2432. private string SaveAllImage(Mat mat, GraphicsList graphicsList)
  2433. {
  2434. string filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\TempImg\\";
  2435. if (!Directory.Exists(filePath))
  2436. {
  2437. Directory.CreateDirectory(filePath);
  2438. }
  2439. Bitmap bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
  2440. Graphics graphics = Graphics.FromImage(bitmap);
  2441. if (graphicsList != null && graphicsList.Count > 0)
  2442. {
  2443. graphicsList.DrawPicture(graphics);
  2444. }
  2445. string fileName = filePath + Guid.NewGuid().ToString() + ".jpg";
  2446. ImageCodecInfo icf = GdiPlusFileType.GetImageCodecInfo(ImageFormat.Jpeg);
  2447. EncoderParameters parms = new EncoderParameters(1);
  2448. EncoderParameter parm;
  2449. if (Program.instance.isCompression)
  2450. {
  2451. parm = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 50L);
  2452. }
  2453. else
  2454. {
  2455. parm = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 75L);
  2456. }
  2457. parms.Param[0] = parm;
  2458. bitmap.Save(fileName, icf, parms);
  2459. return fileName;
  2460. }
  2461. /// <summary>
  2462. /// 显示绘制范围
  2463. /// </summary>
  2464. /// <param name="sender"></param>
  2465. /// <param name="e"></param>
  2466. private void checkBox2_CheckedChanged(object sender, EventArgs e)
  2467. {
  2468. this.documentWorkspace.GraphicsList.DeleteAllView();
  2469. if (this.listView1.FocusedItem != null && this.listView1.FocusedItem.Selected)
  2470. {
  2471. if (checkBox2.Checked)
  2472. {
  2473. string id = this.listView1.FocusedItem.Tag.ToString();
  2474. var result = this.resultMatList.Where(m => m.ID == id).FirstOrDefault();
  2475. int dataIndex = 0;
  2476. if (result != null)
  2477. {
  2478. dataIndex = this.resultMatList.IndexOf(result);
  2479. }
  2480. if (this.resultMatList[dataIndex].GraphicsListList.Count > 0)
  2481. {
  2482. this.resultMatList[dataIndex].GraphicsListList[0].canMove = false;
  2483. GraphicsList graphicsList = new GraphicsList();
  2484. graphicsList.Add(this.resultMatList[dataIndex].GraphicsListList[0].Clone(this.documentWorkspace));
  2485. graphicsList[0].Selected = false;
  2486. this.documentWorkspace.GraphicsList.Add(graphicsList[0]);
  2487. }
  2488. }
  2489. else
  2490. {
  2491. this.documentWorkspace.GraphicsList.DeleteAllView();
  2492. }
  2493. this.documentWorkspace.Refresh();
  2494. }
  2495. }
  2496. private void writeLog(string error, string typeName = "")
  2497. {
  2498. string filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\ErrorLog";
  2499. if (!Directory.Exists(filePath))
  2500. {
  2501. Directory.CreateDirectory(filePath);
  2502. }
  2503. using (StreamWriter sw = new StreamWriter(filePath + "\\" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + typeName + "log.txt"))
  2504. {
  2505. sw.WriteLine(error);
  2506. }
  2507. }
  2508. /// <summary>
  2509. /// 开启像素跟踪
  2510. /// </summary>
  2511. /// <param name="sender"></param>
  2512. /// <param name="e"></param>
  2513. private void checkBox3_CheckedChanged(object sender, EventArgs e)
  2514. {
  2515. if (checkBox3.Checked)
  2516. {
  2517. pixelTrackingDialog = (PixelTrackingDialog)Application.OpenForms["PixelTrackingDialog"];//尝试获取已经弹出的窗口对象
  2518. if (pixelTrackingDialog == null)
  2519. {
  2520. pixelTrackingDialog = new PixelTrackingDialog(this.appWorkspace);
  2521. }
  2522. this.pixelTrackingEnabled = true;
  2523. this.pixelTrackingDialog.TransferEvent += checkBox3Change;
  2524. FloatingFormMethod.ShowResultFloatForm(this, pixelTrackingDialog, this.appWorkspace);
  2525. }
  2526. else
  2527. {
  2528. pixelTrackingDialog = (PixelTrackingDialog)Application.OpenForms["PixelTrackingDialog"];//尝试获取已经弹出的窗口对象
  2529. this.pixelTrackingEnabled = false;
  2530. if (pixelTrackingDialog != null)
  2531. {
  2532. pixelTrackingDialog.Close();
  2533. }
  2534. }
  2535. }
  2536. private void checkBox3Change()
  2537. {
  2538. this.checkBox3.Checked = false;
  2539. }
  2540. /// <summary>
  2541. /// 像素跟踪
  2542. /// 需要增加标记,在进行比如图像旋转等直接在当前
  2543. /// 面板进行图像大小变化操作的,需要停止像素跟踪,
  2544. /// 处理完成之后在恢复,否则可能会导致读取内存异常
  2545. /// </summary>
  2546. /// <param name="location"></param>
  2547. public void SetImageAndData(System.Drawing.Point location, DocumentView doc)
  2548. {
  2549. if (this.pixelTrackingDialog != null)
  2550. {
  2551. this.pixelTrackingDialog.SetImageAndData(location, doc);
  2552. }
  2553. }
  2554. private DateTime _time;
  2555. private void documentWorkspace_panel_MouseMove(object sender, MouseEventArgs e)
  2556. {
  2557. if (this.pixelTrackingEnabled && this.pixelTrackingDialog != null)
  2558. {
  2559. if ((DateTime.Now - _time).TotalMilliseconds > 20)
  2560. {
  2561. this.SetImageAndData(this.documentWorkspace.CalcPixelPoint(e.Location), this.documentWorkspace);
  2562. _time = DateTime.Now;
  2563. }
  2564. }
  2565. int count = this.documentWorkspace.GraphicsList.SelectionCount;
  2566. if (count == 1)
  2567. {
  2568. DrawObject drawObject = this.documentWorkspace.GraphicsList.Selection.ToList()[0];
  2569. if (drawObject.objectType == DrawClass.Measure) {
  2570. MeasureDrawObject measureDrawObject = (MeasureDrawObject)drawObject;
  2571. RectangleF rectangle = measureDrawObject.GetBoundingBox();
  2572. Rectangle newRectangle;
  2573. switch (measureDrawObject.drawToolType) {
  2574. case DrawToolType.MeasureLine:
  2575. newRectangle = new Rectangle((int)(rectangle.X - 20), (int)(rectangle.Y - 20), (int)(rectangle.Width + 20), (int)(rectangle.Height + 20));
  2576. break;
  2577. case DrawToolType.MeasureHLine:
  2578. newRectangle = new Rectangle((int)(rectangle.X - 20), (int)(rectangle.Y - 20), (int)(rectangle.Width + 20), 40);
  2579. break;
  2580. case DrawToolType.MeasureVLine:
  2581. newRectangle = new Rectangle((int)(rectangle.X - 20), (int)(rectangle.Y - 20), 40, (int)(rectangle.Height + 20));
  2582. break;
  2583. default:
  2584. newRectangle = new Rectangle((int)(rectangle.X - 20), (int)(rectangle.Y - 20), 40, (int)(rectangle.Height + 20));
  2585. break;
  2586. }
  2587. if (newRectangle.Contains(this.documentWorkspace.CalcPixelPoint(e.Location)))
  2588. {
  2589. string name = this.appWorkspace.getRealName(this.measureMaintenanceTypeList.MeasureMaintenanceTreeDataList, measureDrawObject.aliasName);
  2590. this.toolTip.Show(name, this.documentWorkspace, new System.Drawing.Point(e.Location.X + 10, e.Location.Y + 10));
  2591. }
  2592. else
  2593. {
  2594. this.toolTip.Hide(this.documentWorkspace);
  2595. }
  2596. }
  2597. }
  2598. }
  2599. /// <summary>
  2600. /// 绘制范围
  2601. /// </summary>
  2602. /// <param name="sender"></param>
  2603. /// <param name="e"></param>
  2604. private void button2_Click(object sender, EventArgs e)
  2605. {
  2606. if (this.listView1.SelectedItems == null || this.listView1.SelectedItems.Count == 0)
  2607. {
  2608. return;
  2609. }
  2610. List<Bitmap> bitmaps = new List<Bitmap>();
  2611. List<string> nameList = new List<string>();
  2612. Dictionary<int, GraphicsList> imgGraphicsList = new Dictionary<int, GraphicsList>();
  2613. Dictionary<int, bool> ImgisConductive = new Dictionary<int, bool>();
  2614. Dictionary<int, bool> ImgisFanweibuchang = new Dictionary<int, bool>();
  2615. Dictionary<int, bool> ImgisErzhichuli = new Dictionary<int, bool>();
  2616. Dictionary<int, bool> needShowDaoDianbu = new Dictionary<int, bool>();
  2617. Dictionary<int, bool> needShowFanweibuchang = new Dictionary<int, bool>();
  2618. Dictionary<int, bool> needShowErzhichuli = new Dictionary<int, bool>();
  2619. Dictionary<int, int> correspondNum = new Dictionary<int, int>();
  2620. for (int i = 0; i < this.listView1.SelectedItems.Count; i++)
  2621. {
  2622. var index = this.listView1.SelectedItems[i].Index;
  2623. Bitmap bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(this.resultMatList[index].resultMat);
  2624. bitmaps.Add(bitmap);
  2625. nameList.Add(this.listView1.SelectedItems[i].Text);
  2626. bool show;
  2627. bool showFanweibuchang;
  2628. bool showErzhichuli;
  2629. string id = this.resultMatList[index].parentId;
  2630. MeasureMaintenanceTreeSpecificData data;
  2631. this.appWorkspace.RecursionGetData(id, this.measureMaintenanceTypeList.MeasureMaintenanceTreeDataList, out data);
  2632. if (data.MeasureMaintenanceTreeSpecificDataParentId == "9")
  2633. {
  2634. show = true;
  2635. }
  2636. else
  2637. {
  2638. show = false;
  2639. }
  2640. if (data.MeasureMaintenanceTreeSpecificDataParentId == "10"
  2641. && data.MeasureMaintenanceTreeSpecificDataId == "100300")
  2642. {
  2643. showFanweibuchang = true;
  2644. }
  2645. else
  2646. {
  2647. showFanweibuchang = false;
  2648. }
  2649. if (true && data.MeasureMaintenanceTreeSpecificDataParentId == "7"
  2650. && data.MeasureMaintenanceTreeSpecificDataId == "100176")
  2651. {
  2652. showErzhichuli = true;
  2653. }
  2654. else
  2655. {
  2656. showErzhichuli = false;
  2657. }
  2658. GraphicsList graphicsList = new GraphicsList();
  2659. for (int j = 0; j < this.resultMatList[index].GraphicsListList.Count; j++)
  2660. {
  2661. if (this.resultMatList[index].GraphicsListList[j].drawToolType == DrawToolType.ViewRectangle)
  2662. {
  2663. graphicsList.Add(this.resultMatList[index].GraphicsListList[j]);
  2664. }
  2665. }
  2666. needShowDaoDianbu.Add(index, show);
  2667. needShowFanweibuchang.Add(index, showFanweibuchang);
  2668. needShowErzhichuli.Add(index, showErzhichuli);
  2669. imgGraphicsList.Add(index, graphicsList);
  2670. ImgisConductive.Add(index, this.resultMatList[index].isConductive);
  2671. ImgisFanweibuchang.Add(index, this.resultMatList[index].isFanweibuchang);
  2672. ImgisErzhichuli.Add(index, this.resultMatList[index].isErzhichuli);
  2673. correspondNum.Add(i, index);
  2674. }
  2675. ResultsViewRange from2 = new ResultsViewRange(bitmaps, nameList, this, this.appWorkspace, imgGraphicsList, ImgisConductive, needShowDaoDianbu, ImgisFanweibuchang, needShowFanweibuchang, ImgisErzhichuli, needShowErzhichuli, correspondNum);
  2676. from2.StartPosition = FormStartPosition.CenterParent;
  2677. from2.ShowDialog();
  2678. }
  2679. public void getList(Dictionary<int, GraphicsList> dataList)
  2680. {
  2681. foreach (var item in dataList)
  2682. {
  2683. this.resultMatList[item.Key].GraphicsListList = item.Value;
  2684. var result = this.realResultMatList.Where(m => m.ID == this.resultMatList[item.Key].ID).FirstOrDefault();
  2685. if (result != null)
  2686. {
  2687. result.GraphicsListList = item.Value;
  2688. }
  2689. }
  2690. }
  2691. public void getBoolList(Dictionary<int, bool> dataList)
  2692. {
  2693. foreach (var item in dataList)
  2694. {
  2695. this.resultMatList[item.Key].isConductive = item.Value;
  2696. var result = this.realResultMatList.Where(m => m.ID == this.resultMatList[item.Key].ID).FirstOrDefault();
  2697. if (result != null)
  2698. {
  2699. result.isConductive = item.Value;
  2700. }
  2701. }
  2702. }
  2703. public void getErzhichuliList(Dictionary<int, bool> dataList)
  2704. {
  2705. foreach (var item in dataList)
  2706. {
  2707. this.resultMatList[item.Key].isErzhichuli = item.Value;
  2708. var result = this.realResultMatList.Where(m => m.ID == this.resultMatList[item.Key].ID).FirstOrDefault();
  2709. if (result != null)
  2710. {
  2711. result.isErzhichuli = item.Value;
  2712. }
  2713. }
  2714. }
  2715. public void getFanweibuchangList(Dictionary<int, bool> dataList)
  2716. {
  2717. foreach (var item in dataList)
  2718. {
  2719. this.resultMatList[item.Key].isFanweibuchang = item.Value;
  2720. var result = this.realResultMatList.Where(m => m.ID == this.resultMatList[item.Key].ID).FirstOrDefault();
  2721. if (result != null)
  2722. {
  2723. result.isFanweibuchang = item.Value;
  2724. }
  2725. }
  2726. }
  2727. public void getMatList(Dictionary<int, Bitmap> bitmapData)
  2728. {
  2729. foreach (var item in bitmapData)
  2730. {
  2731. this.resultMatList[item.Key].resultMat = OpenCvSharp.Extensions.BitmapConverter.ToMat(item.Value);
  2732. this.imageList1.Images[item.Key] = CreateThumbnail(this.resultMatList[item.Key].resultMat);
  2733. for (int i = 0; i < this.resultMatList[item.Key].dataInforList.Count; i++)
  2734. {
  2735. this.resultMatList[item.Key].dataInforList[i].point1 = new System.Drawing.Point(0, 0);
  2736. this.resultMatList[item.Key].dataInforList[i].point2 = new System.Drawing.Point(0, 0);
  2737. this.resultMatList[item.Key].dataInforList[i].value = 0;
  2738. }
  2739. this.listView1.Refresh();
  2740. }
  2741. this.listView1_SelectedIndexChanged(null, null);
  2742. }
  2743. /// <summary>
  2744. /// 再次分析
  2745. /// </summary>
  2746. /// <param name="sender"></param>
  2747. /// <param name="e"></param>
  2748. // TODO:bug
  2749. private void button1_Click(object sender, EventArgs e)
  2750. {
  2751. this.documentWorkspace.activeTool = DrawToolType.Pointer;
  2752. if (this.listView1.SelectedItems == null || this.listView1.SelectedItems.Count == 0)
  2753. {
  2754. return;
  2755. }
  2756. List<int> indexList = new List<int>();
  2757. for (int i = 0; i < this.listView1.SelectedItems.Count; i++)
  2758. {
  2759. int index = this.listView1.SelectedItems[i].Index;
  2760. indexList.Add(index);
  2761. }
  2762. ProgressThreadProcClass procClass = new ProgressThreadProcClass();
  2763. int itemCount = 100;
  2764. ProgressThreadProcClass.IFileTransferProgressEvents progressEvents = new ProgressThreadProcClass.IFileTransferProgressEvents();
  2765. System.Threading.ThreadStart copyThreadProc =
  2766. delegate ()
  2767. {
  2768. for (int i = 0; i < indexList.Count; i++)
  2769. {
  2770. var resultMat = this.resultMatList[indexList[i]];
  2771. string className = InvariantData.path_auto + $".{this._listHoleType[resultMat.parentId]}";
  2772. GraphicsList graphicsList = resultMat.GraphicsListList;
  2773. bool isErzhichuli = resultMat.isErzhichuli;
  2774. bool isFanweibuchang = resultMat.isFanweibuchang;
  2775. bool isConductive = resultMat.isConductive;
  2776. bool position = resultMat.isPosition;
  2777. var currentParam = (AutoMeasureAnalysis)Assembly.Load(InvariantData.auto_Data).CreateInstance(className);
  2778. Mat thisMat = resultMat.resultMat.Clone();
  2779. currentParam.setErzhichuli(isErzhichuli);
  2780. currentParam.setFanweibuchang(isFanweibuchang);
  2781. currentParam.setBool(isConductive);
  2782. currentParam.setIsNewSuanfa(position);
  2783. try
  2784. {
  2785. GraphicsList newGraphicsList = new GraphicsList();
  2786. for (int j = 0; j < resultMat.GraphicsListList.Count; j++)
  2787. {
  2788. if (resultMat.GraphicsListList[j].drawToolType == DrawToolType.ViewRectangle)
  2789. {
  2790. newGraphicsList.Add(resultMat.GraphicsListList[j]);
  2791. }
  2792. }
  2793. if (newGraphicsList.Count == 0)
  2794. {
  2795. currentParam.Compute(thisMat, false, 0, 0);
  2796. }
  2797. else
  2798. {
  2799. int X = (int)newGraphicsList[0].Rectangle.X;
  2800. int Y = (int)newGraphicsList[0].Rectangle.Y;
  2801. int reWidth = (int)newGraphicsList[0].Rectangle.Width;
  2802. int reHeight = (int)newGraphicsList[0].Rectangle.Height;
  2803. Bitmap newBitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(thisMat);
  2804. if (newGraphicsList[0].Rectangle.Contains(new RectangleF(0, 0, newBitmap.Width, newBitmap.Height)))
  2805. {
  2806. X = 0;
  2807. Y = 0;
  2808. reWidth = newBitmap.Width;
  2809. reHeight = newBitmap.Height;
  2810. }
  2811. else
  2812. {
  2813. if (newGraphicsList[0].Rectangle.IntersectsWith(new RectangleF(0, 0, newBitmap.Width, newBitmap.Height)))
  2814. {
  2815. RectangleF rectangleF = new RectangleF(newGraphicsList[0].Rectangle.X, newGraphicsList[0].Rectangle.Y,newGraphicsList[0].Rectangle.Width, newGraphicsList[0].Rectangle.Height);
  2816. rectangleF.Intersect(new RectangleF(0, 0, newBitmap.Width, newBitmap.Height));
  2817. X = (int)rectangleF.X;
  2818. Y = (int)rectangleF.Y;
  2819. reWidth = (int)rectangleF.Width;
  2820. reHeight = (int)rectangleF.Height;
  2821. }
  2822. }
  2823. Mat mat = new Mat(thisMat, new Rect(X, Y, reWidth, reHeight));
  2824. currentParam.Compute(mat, true, X, Y);
  2825. }
  2826. }
  2827. catch (Exception ex)
  2828. {
  2829. }
  2830. resultMat.resultMat = thisMat;
  2831. resultMat.allLineNum = currentParam.number;
  2832. resultMat.successNum = currentParam.success;
  2833. resultMat.failNum = currentParam.wrongNumber;
  2834. resultMat.dataInforList.Clear();
  2835. List<DataInfor> listdata = new List<DataInfor>();
  2836. foreach (var dataInfo in currentParam.dataInfors)
  2837. {
  2838. DataInfor dataInfor = new DataInfor();
  2839. dataInfor.drawType = dataInfo.drawType;
  2840. dataInfor.value = dataInfo.value;
  2841. dataInfor.point1 = dataInfo.point1;
  2842. dataInfor.point2 = dataInfo.point2;
  2843. dataInfor.name = dataInfo.name;
  2844. dataInfor.aliasName = dataInfo.aliasName;
  2845. dataInfor.ID = dataInfo.ID;
  2846. dataInfor.deleteFlag = dataInfo.deleteFlag;
  2847. listdata.Add(dataInfor);
  2848. }
  2849. resultMat.dataInforList.AddRange(listdata);
  2850. }
  2851. progressEvents.EndOperation(OperationResult.Finished);
  2852. };
  2853. procClass.StartProgressAction(this, itemCount, copyThreadProc, progressEvents, null);
  2854. for (int i = 0; i < this.listView1.SelectedItems.Count; i++)
  2855. {
  2856. var index = this.listView1.SelectedItems[i].Index;
  2857. this.listView1.SelectedItems[i].BackColor = this.resultMatList[index].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
  2858. if (i == 0)
  2859. {
  2860. this.listView1.Items[index].Focused = true;
  2861. }
  2862. }
  2863. this.listView1.Refresh();
  2864. #region [组织应该展示的线 去除不应该展示的线]
  2865. foreach (var item in resultMatList)
  2866. {
  2867. List<DataInfor> removeList = new List<DataInfor>();
  2868. if (this.LineShowDic.ContainsKey(item.parentId))
  2869. {
  2870. foreach (var item2 in item.dataInforList)
  2871. {
  2872. if (!this.LineShowDic[item.parentId].Contains(item2.ID))
  2873. {
  2874. removeList.Add(item2);
  2875. }
  2876. }
  2877. foreach (var item2 in removeList)
  2878. {
  2879. item.dataInforList.Remove(item2);
  2880. }
  2881. }
  2882. }
  2883. #endregion [组织应该展示的线 去除不应该展示的线]
  2884. listView1_SelectedIndexChanged(null, null);
  2885. }
  2886. /// <summary>
  2887. /// 全选
  2888. /// </summary>
  2889. /// <param name="sender"></param>
  2890. /// <param name="e"></param>
  2891. private void button3_Click(object sender, EventArgs e)
  2892. {
  2893. for (int i = 0; i < this.listView1.Items.Count; i++)
  2894. {
  2895. this.listView1.Items[i].Selected = true;
  2896. if (i == 0)
  2897. {
  2898. this.listView1.Items[i].Focused = true;
  2899. }
  2900. }
  2901. }
  2902. /// <summary>
  2903. /// 全不选
  2904. /// </summary>
  2905. /// <param name="sender"></param>
  2906. /// <param name="e"></param>
  2907. private void button4_Click(object sender, EventArgs e)
  2908. {
  2909. for (int i = 0; i < this.listView1.Items.Count; i++)
  2910. {
  2911. this.listView1.Items[i].Selected = false;
  2912. if (i == 0)
  2913. {
  2914. this.listView1.Items[i].Selected = true;
  2915. this.listView1.Items[i].Focused = true;
  2916. }
  2917. }
  2918. }
  2919. /// <summary>
  2920. /// 反选
  2921. /// </summary>
  2922. /// <param name="sender"></param>
  2923. /// <param name="e"></param>
  2924. private void button5_Click(object sender, EventArgs e)
  2925. {
  2926. for (int i = 0; i < this.listView1.Items.Count; i++)
  2927. {
  2928. this.listView1.Items[i].Selected = !this.listView1.Items[i].Selected;
  2929. }
  2930. if (this.listView1.SelectedItems.Count > 0)
  2931. {
  2932. this.listView1.SelectedItems[0].Focused = true;
  2933. this.listView1_SelectedIndexChanged(null, null);
  2934. }
  2935. }
  2936. /// <summary>
  2937. /// 命名规则
  2938. /// </summary>
  2939. /// <param name="sender"></param>
  2940. /// <param name="e"></param>
  2941. private void button6_Click(object sender, EventArgs e)
  2942. {
  2943. //NameRuleListDetails nameRuleListDetails = new NameRuleListDetails();
  2944. //if (this.thisNameRuleListDetails == null)
  2945. //{
  2946. // if (!string.IsNullOrEmpty(this.measureMaintenanceType.NameRuleID))
  2947. // {
  2948. // var oldNameRuleListDetails = Program.instance.fileNameRule.NameRuleList.Where(m => m.ID == this.measureMaintenanceType.NameRuleID).FirstOrDefault();
  2949. // if (oldNameRuleListDetails != null)
  2950. // {
  2951. // nameRuleListDetails.ContinueNumber = oldNameRuleListDetails.ContinueNumber;
  2952. // nameRuleListDetails.DigitNum = oldNameRuleListDetails.DigitNum;
  2953. // nameRuleListDetails.ID = oldNameRuleListDetails.ID;
  2954. // nameRuleListDetails.isContinue = oldNameRuleListDetails.isContinue;
  2955. // nameRuleListDetails.Name = oldNameRuleListDetails.Name;
  2956. // nameRuleListDetails.NameFormat = oldNameRuleListDetails.NameFormat;
  2957. // nameRuleListDetails.NowNumber = oldNameRuleListDetails.NowNumber;
  2958. // nameRuleListDetails.Text = oldNameRuleListDetails.Text;
  2959. // nameRuleListDetails.ZTextOne = oldNameRuleListDetails.ZTextOne;
  2960. // nameRuleListDetails.ZTextTwo = oldNameRuleListDetails.ZTextTwo;
  2961. // }
  2962. // }
  2963. //}
  2964. //else {
  2965. // nameRuleListDetails = this.thisNameRuleListDetails;
  2966. //}
  2967. using (ResultViewNameRule2 af = new ResultViewNameRule2(this,this.measureMaintenanceType))
  2968. {
  2969. af.StartPosition = FormStartPosition.CenterScreen;
  2970. af.ShowDialog();
  2971. }
  2972. }
  2973. public void NameRuleCallBack(NameRuleListDetails nameRuleListDetails)
  2974. {
  2975. if(nameRuleListDetails != null)
  2976. this.measureMaintenanceType.NameRuleID = nameRuleListDetails.ID;
  2977. if (nameRuleListDetails != null)
  2978. this.thisNameRuleListDetails = nameRuleListDetails;
  2979. this.yuLan(nameRuleListDetails);
  2980. }
  2981. public void itemNumCallBack(string itemNum)
  2982. {
  2983. this.measureMaintenanceType.measureMaintenanceBasicDataList[0].measureMaintenanceBasicDataValue = itemNum;
  2984. this.isSPCItemNull = true;
  2985. buttonGenerateReport_Click(null, null);
  2986. }
  2987. /// <summary>
  2988. /// 选择模板
  2989. /// </summary>
  2990. /// <param name="sender"></param>
  2991. /// <param name="e"></param>
  2992. private void button7_Click(object sender, EventArgs e)
  2993. {
  2994. OpenFileDialog dialog = new OpenFileDialog();
  2995. dialog.Filter = "Excel文件|*.xls;*.xlsx";
  2996. dialog.Title = "选择模板";
  2997. dialog.Multiselect = false; //该值确定是否可以选择多个文件
  2998. if (dialog.ShowDialog() != DialogResult.OK)
  2999. {
  3000. return;
  3001. }
  3002. string file = dialog.FileName;
  3003. measureMaintenanceType.templateFilePath = file;
  3004. MessageBox.Show("模板更换成功!");
  3005. }
  3006. /// <summary>
  3007. /// 图片删除
  3008. /// </summary>
  3009. /// <param name="sender"></param>
  3010. /// <param name="e"></param>
  3011. private void button8_Click(object sender, EventArgs e)
  3012. {
  3013. if (this.listView1.SelectedItems == null || this.listView1.SelectedItems.Count == 0)
  3014. {
  3015. return;
  3016. }
  3017. this.listView1.SelectedIndexChanged -= listView1_SelectedIndexChanged;
  3018. for (int i = this.listView1.SelectedItems.Count - 1; i >= 0; i--)
  3019. {
  3020. string id = this.listView1.SelectedItems[i].Tag.ToString();
  3021. var result = this.resultMatList.Where(m => m.ID == id).FirstOrDefault();
  3022. if (result != null)
  3023. {
  3024. this.hasDelResultMatList.Add(result);
  3025. this.resultMatList.Remove(result);
  3026. var realresult = this.realResultMatList.Where(m => m.ID == id).FirstOrDefault();
  3027. if (realresult != null)
  3028. {
  3029. this.realResultMatList.Remove(realresult);
  3030. }
  3031. }
  3032. this.listView1.Items.Remove(this.listView1.SelectedItems[i]);
  3033. }
  3034. this.listView1.SelectedIndexChanged += listView1_SelectedIndexChanged;
  3035. if (this.listView1.Items.Count > 0)
  3036. {
  3037. this.listView1.Items[0].Focused = true;
  3038. this.listView1.Items[0].Selected = true;
  3039. this.listView1_SelectedIndexChanged(null, null);
  3040. }
  3041. else
  3042. {
  3043. this.documentWorkspace.Visible = false;
  3044. if (panel2.Controls != null)
  3045. {
  3046. foreach (Control c in panel2.Controls)
  3047. {
  3048. c.Visible = false;
  3049. }
  3050. }
  3051. }
  3052. this.listView1.Refresh();
  3053. }
  3054. /// <summary>
  3055. /// 图片恢复
  3056. /// </summary>
  3057. /// <param name="sender"></param>
  3058. /// <param name="e"></param>
  3059. private void button9_Click(object sender, EventArgs e)
  3060. {
  3061. int count = this.listView1.Items.Count;
  3062. this.hasDelResultMatList.Reverse();
  3063. for (int i = 0; i < this.hasDelResultMatList.Count; i++)
  3064. {
  3065. Mat mat = new Mat();
  3066. Cv2.CvtColor(this.hasDelResultMatList[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
  3067. this.imageList1.Images.Add("img" + count, CreateThumbnail(mat));
  3068. this.listView1.Items.Add("", count);
  3069. this.listView1.Items[count].ImageIndex = count;
  3070. this.listView1.Items[count].Tag = this.hasDelResultMatList[i].ID;
  3071. this.listView1.Items[count].Text = this.hasDelResultMatList[i].fileName;
  3072. this.listView1.Items[count].BackColor = this.hasDelResultMatList[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
  3073. count++;
  3074. mat.Dispose();
  3075. this.resultMatList.Add(this.hasDelResultMatList[i]);
  3076. this.realResultMatList.Add(this.hasDelResultMatList[i]);
  3077. }
  3078. comboClassification_SelectedIndexChanged(sender, e);
  3079. comboStatus_SelectedIndexChanged(sender, e);
  3080. this.listView1.Refresh();
  3081. this.hasDelResultMatList.Clear();
  3082. }
  3083. /// <summary>
  3084. /// 勾选辅助线
  3085. /// </summary>
  3086. /// <param name="sender"></param>
  3087. /// <param name="e"></param>
  3088. private void checkBox4_CheckedChanged(object sender, EventArgs e)
  3089. {
  3090. this.documentWorkspace.auxiliaryLineEnabled = !this.documentWorkspace.auxiliaryLineEnabled;
  3091. if (this.documentWorkspace.auxiliaryLineEnabled)
  3092. {
  3093. this.documentWorkspace.girdLineColour = Program.instance.configModel.girdLineColour;
  3094. this.documentWorkspace.girdLineStyle = Program.instance.configModel.girdLineStyle;
  3095. this.documentWorkspace.girdLineWidth = Program.instance.configModel.girdLineWidth;
  3096. }
  3097. this.documentWorkspace.Refresh();
  3098. }
  3099. public string getMeasureMaintenanceTypeID()
  3100. {
  3101. return this.measureMaintenanceType.NameRuleID;
  3102. }
  3103. /// <summary>
  3104. /// 结果预览
  3105. /// </summary>
  3106. /// <param name="sender"></param>
  3107. /// <param name="e"></param>
  3108. private void button10_Click(object sender, EventArgs e)
  3109. {
  3110. string titleName = measureMaintenanceType.measureMaintenanceName;
  3111. #region [组织预览数据]
  3112. MeasureInfoExportModel measureInfoExportModel = OrganizePreviewResultData(this.resultMatList);
  3113. #endregion
  3114. ResultViewPreview resultViewPreview = new ResultViewPreview(this,titleName, this.measureMaintenanceType.outputPicturesNum, measureInfoExportModel);
  3115. resultViewPreview.StartPosition = FormStartPosition.CenterParent;
  3116. resultViewPreview.ShowDialog();
  3117. }
  3118. /// <summary>
  3119. /// 组织预览数据
  3120. /// </summary>
  3121. private MeasureInfoExportModel OrganizePreviewResultData(List<MeasureInfoResultModel> thisResultMatList)
  3122. {
  3123. MeasureInfoExportModel measureInfoExportModel = new MeasureInfoExportModel();
  3124. var HoleTypeList = this.measureMaintenanceType.MeasureMaintenanceTreeFourthDataList.GroupBy(m => m.HoleType);
  3125. #region [先整理下整体的数据]
  3126. #region [特殊处理下叠构]
  3127. var resList = thisResultMatList.Where(m => m.parentId.Equals("100209")).ToList();
  3128. if (resList.Count > 0)
  3129. {
  3130. foreach (var item in resList)
  3131. {
  3132. List<string> nameList = item.dataInforList.Select(m => m.name).ToList();
  3133. var ls = item.dataInforList.OrderBy(m => m.point1.Y).ToList();
  3134. for (int i = 0; i < ls.Count(); i++)
  3135. {
  3136. ls[i].name = nameList[i];
  3137. }
  3138. }
  3139. thisResultMatList.RemoveAll(m => m.parentId.Equals("100209"));
  3140. thisResultMatList.AddRange(resList);
  3141. }
  3142. #endregion [特殊处理下叠构]
  3143. var dataList = HoleTypeList.ToList();
  3144. for (int i = dataList.Count - 1; i >= 0; i--)
  3145. {
  3146. var data = dataList[i];
  3147. var resultDataList = thisResultMatList.Where(m => m.parentId.Equals(data.First().HoleTypeId)).ToList();
  3148. var a = Math.Ceiling(Convert.ToDouble(resultDataList.Count()) / Convert.ToDouble(this.measureMaintenanceType.outputPicturesNum));
  3149. if (a > 0)
  3150. {
  3151. for (int j = 1; j <= a; j++)
  3152. {
  3153. dataList.Insert(i + j, data);
  3154. }
  3155. dataList.RemoveAt(i);
  3156. }
  3157. }
  3158. #endregion [先整理下整体的数据]
  3159. string name = string.Empty;
  3160. int startNum = 0;
  3161. foreach (var item in dataList)
  3162. {
  3163. MeasureInfoExportDataModel measureInfoExportDataModel = new MeasureInfoExportDataModel();
  3164. measureInfoExportDataModel.HoleType = item.Key;
  3165. measureInfoExportDataModel.HoleTypeId = item.FirstOrDefault().HoleTypeId;
  3166. var resultDataList = thisResultMatList.Where(m => m.parentId.Equals(measureInfoExportDataModel.HoleTypeId)).ToList();
  3167. if (name.Equals(item.Key))
  3168. {
  3169. startNum++;
  3170. }
  3171. else
  3172. {
  3173. name = item.Key;
  3174. startNum = 0;
  3175. }
  3176. resultDataList = resultDataList.Skip(this.measureMaintenanceType.outputPicturesNum * startNum).Take(this.measureMaintenanceType.outputPicturesNum).ToList();
  3177. var itemTypeList = item.GroupBy(m => m.TestItems);
  3178. foreach (var item2 in itemTypeList)
  3179. {
  3180. ItemType itemType = new ItemType();
  3181. itemType.TestItems = item2.Key;
  3182. itemType.Specification = item2.FirstOrDefault().Specification;
  3183. itemType.isOk = true;
  3184. foreach (var item3 in item2)
  3185. {
  3186. LineData lineData = new LineData();
  3187. lineData.name = item3.FormulaName;
  3188. lineData.isOk = true;
  3189. lineData.isMaxOrMin = (item3.FormulaExpression.Contains("最大值") || item3.FormulaExpression.Contains("最小值") || item3.FormulaExpression.Contains("平均值"));
  3190. if (item3.FormulaExpression.Contains("最大值"))
  3191. {
  3192. lineData.typeCase = 1;
  3193. }
  3194. else if (item3.FormulaExpression.Contains("最小值"))
  3195. {
  3196. lineData.typeCase = 2;
  3197. }
  3198. else if (item3.FormulaExpression.Contains("平均值"))
  3199. {
  3200. lineData.typeCase = 3;
  3201. }
  3202. //计算结果
  3203. foreach (var data in resultDataList)
  3204. {
  3205. double result;
  3206. double unit = 1;
  3207. if (this.pidRuleDic.ContainsKey(data.parentId))
  3208. {
  3209. if (this.pidRuleDic[data.parentId].ContainsKey(data.fileName))
  3210. {
  3211. unit = this.pidRuleDic[data.parentId][data.fileName];
  3212. }
  3213. }
  3214. outPutResult(data.dataInforList, lineData.isMaxOrMin, item3.FormulaExpression, unit, lineData.typeCase, out result);
  3215. result = Math.Round(result, Program.instance.decimalPlaces);
  3216. lineData.value.Add(result);
  3217. lineData.matIndex.Add(this.resultMatList.IndexOf(data));
  3218. if (double.IsInfinity(result) || double.IsNaN(result))
  3219. {
  3220. lineData.NgValue.Add(result);
  3221. lineData.isOk = false;
  3222. itemType.isOk = false;
  3223. }
  3224. else
  3225. {
  3226. if (!outOk(result, item3.Specification))
  3227. {
  3228. lineData.NgValue.Add(result);
  3229. lineData.isOk = false;
  3230. itemType.isOk = false;
  3231. }
  3232. }
  3233. }
  3234. itemType.LineDataList.Add(lineData);
  3235. }
  3236. measureInfoExportDataModel.itemTypeList.Add(itemType);
  3237. }
  3238. measureInfoExportModel.measureInfoExportDataModelList.Add(measureInfoExportDataModel);
  3239. }
  3240. return measureInfoExportModel;
  3241. }
  3242. public void returnMatView(int index)
  3243. {
  3244. for (int i = 0; i < this.listView1.Items.Count; i++)
  3245. {
  3246. this.listView1.Items[i].Selected = false;
  3247. }
  3248. this.listView1.Focus();
  3249. //滚动到指定的行位置
  3250. this.listView1.EnsureVisible(index);
  3251. this.listView1.Items[index].Focused = true;
  3252. this.listView1.Items[index].Selected = true;
  3253. }
  3254. }
  3255. }