Form1.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Windows.Forms.DataVisualization.Charting;
  11. using Extender;
  12. using DBManager;
  13. using MeasureData;
  14. using System.Data.SQLite;
  15. namespace OxfordTest
  16. {
  17. public partial class Form1 : Form
  18. {
  19. //全局只有一个fatorySEM
  20. static ExtenderInterface factoryExtender = ExtenderInterface.Instance;
  21. //IExtenderControl iExtender = factoryExtender.IExtender;
  22. IExtenderControl iExtender ;
  23. public Form1()
  24. {
  25. InitializeComponent();
  26. }
  27. //获取电压
  28. private void button1_Click(object sender, EventArgs e)
  29. {
  30. tBHV.Text = iExtender.GetSEMVoltage().ToString();
  31. }
  32. //输入限制只能是数字
  33. private void textBox_KeyPress(string text, object sender, KeyPressEventArgs e)
  34. {
  35. //允许输入数字、小数点、删除键和负号
  36. if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8 && e.KeyChar != (char)('.') && e.KeyChar != (char)('-'))
  37. {
  38. MessageBox.Show("请输入正确的数字");
  39. text = "";
  40. e.Handled = true;
  41. }
  42. if (e.KeyChar == (char)('-'))
  43. {
  44. if (text != "")
  45. {
  46. MessageBox.Show("请输入正确的数字");
  47. text = "";
  48. e.Handled = true;
  49. }
  50. }
  51. //小数点只能输入一次
  52. if (e.KeyChar == (char)('.') && ((TextBox)sender).Text.IndexOf('.') != -1)
  53. {
  54. MessageBox.Show("请输入正确的数字");
  55. text = "";
  56. e.Handled = true;
  57. }
  58. //第一位不能为小数点
  59. if (e.KeyChar == (char)('.') && ((TextBox)sender).Text == "")
  60. {
  61. MessageBox.Show("请输入正确的数字");
  62. text = "";
  63. e.Handled = true;
  64. }
  65. //第一位是0,第二位必须为小数点
  66. if (e.KeyChar != (char)('.') && ((TextBox)sender).Text == "0")
  67. {
  68. MessageBox.Show("请输入正确的数字");
  69. text = "";
  70. e.Handled = true;
  71. }
  72. //第一位是负号,第二位不能为小数点
  73. if (((TextBox)sender).Text == "-" && e.KeyChar == (char)('.'))
  74. {
  75. MessageBox.Show("请输入正确的数字");
  76. text = "";
  77. e.Handled = true;
  78. }
  79. }
  80. //设定电压
  81. private void button2_Click(object sender, EventArgs e)
  82. {
  83. iExtender.SetSEMVoltage(float.Parse(tBHVIn.Text));
  84. }
  85. //电压输入限制
  86. private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
  87. {
  88. textBox_KeyPress(tBHVIn.Text, sender, e);
  89. }
  90. //获取工作距离
  91. private void button3_Click(object sender, EventArgs e)
  92. {
  93. tBWD.Text = iExtender.GetWorkingDistance().ToString();
  94. }
  95. //获取放大倍数
  96. private void button4_Click(object sender, EventArgs e)
  97. {
  98. tBMag.Text = iExtender.GetMagnification().ToString();
  99. }
  100. //获取亮度
  101. private void button5_Click(object sender, EventArgs e)
  102. {
  103. tBBright.Text = iExtender.GetBrightness().ToString();
  104. }
  105. //获取对比度
  106. private void button6_Click(object sender, EventArgs e)
  107. {
  108. tBContast.Text = iExtender.GetContrast().ToString();
  109. }
  110. //设定工作距离
  111. private void button7_Click(object sender, EventArgs e)
  112. {
  113. iExtender.SetWorkingDistance(float.Parse(tBWDIn.Text));
  114. }
  115. //设定放大倍数
  116. private void button8_Click(object sender, EventArgs e)
  117. {
  118. iExtender.SetMagnification(float.Parse(tBMagIn.Text));
  119. }
  120. //设定亮度
  121. private void button9_Click(object sender, EventArgs e)
  122. {
  123. iExtender.SetBrightness(float.Parse(tBrightIn.Text));
  124. }
  125. //设定对比度
  126. private void button10_Click(object sender, EventArgs e)
  127. {
  128. iExtender.SetContrast(float.Parse(tBContrastIn.Text));
  129. }
  130. private void tBWDIn_KeyPress(object sender, KeyPressEventArgs e)
  131. {
  132. textBox_KeyPress(tBWDIn.Text, sender, e);
  133. }
  134. private void tBMagIn_KeyPress(object sender, KeyPressEventArgs e)
  135. {
  136. textBox_KeyPress(tBMagIn.Text, sender, e);
  137. }
  138. private void tBrightIn_KeyPress(object sender, KeyPressEventArgs e)
  139. {
  140. textBox_KeyPress(tBrightIn.Text, sender, e);
  141. }
  142. private void tBContrastIn_KeyPress(object sender, KeyPressEventArgs e)
  143. {
  144. textBox_KeyPress(tBContrastIn.Text, sender, e);
  145. }
  146. //获取X
  147. private void button11_Click(object sender, EventArgs e)
  148. {
  149. tBX.Text = iExtender.GetStageAtX().ToString();
  150. }
  151. //获取Y
  152. private void button12_Click(object sender, EventArgs e)
  153. {
  154. tBY.Text = iExtender.GetStageAtY().ToString();
  155. }
  156. //获取Z
  157. private void button13_Click(object sender, EventArgs e)
  158. {
  159. tBZ.Text = iExtender.GetStageAtZ().ToString();
  160. }
  161. //获取T
  162. private void button14_Click(object sender, EventArgs e)
  163. {
  164. tBT.Text = iExtender.GetStageAtT().ToString();
  165. }
  166. //获取R
  167. private void button15_Click(object sender, EventArgs e)
  168. {
  169. tBR.Text = iExtender.GetStageAtR().ToString();
  170. }
  171. //获取全部
  172. private void button21_Click(object sender, EventArgs e)
  173. {
  174. tBX.Text = iExtender.GetStageAtX().ToString();
  175. tBY.Text = iExtender.GetStageAtY().ToString();
  176. tBZ.Text = iExtender.GetStageAtZ().ToString();
  177. tBT.Text = iExtender.GetStageAtT().ToString();
  178. tBR.Text = iExtender.GetStageAtR().ToString();
  179. }
  180. //设定XY
  181. private void button22_Click(object sender, EventArgs e)
  182. {
  183. iExtender.MoveStageXY(float.Parse(tBXIn.Text), float.Parse(tBYIn.Text));
  184. }
  185. //设定全部
  186. private void button23_Click(object sender, EventArgs e)
  187. {
  188. float[] pos = new float[5];
  189. pos[0] = float.Parse(tBXIn.Text);
  190. pos[1] = float.Parse(tBYIn.Text);
  191. pos[2] = float.Parse(tBZIn.Text);
  192. pos[3] = float.Parse(tBTIn.Text);
  193. pos[4] = float.Parse(tBRIn.Text);
  194. iExtender.SetStagePosition(pos);
  195. }
  196. //设定X
  197. private void button16_Click(object sender, EventArgs e)
  198. {
  199. iExtender.SetStageGotoX(float.Parse(tBXIn.Text));
  200. }
  201. //设定Y
  202. private void button17_Click(object sender, EventArgs e)
  203. {
  204. iExtender.SetStageGotoY(float.Parse(tBYIn.Text));
  205. }
  206. //设定Z
  207. private void button18_Click(object sender, EventArgs e)
  208. {
  209. iExtender.SetStageGotoZ(float.Parse(tBZIn.Text));
  210. }
  211. //设定T
  212. private void button19_Click(object sender, EventArgs e)
  213. {
  214. iExtender.SetStageGotoT(float.Parse(tBTIn.Text));
  215. }
  216. //设定R
  217. private void button20_Click(object sender, EventArgs e)
  218. {
  219. iExtender.SetStageGotoR(float.Parse(tBRIn.Text));
  220. }
  221. private void tBXIn_KeyPress(object sender, KeyPressEventArgs e)
  222. {
  223. textBox_KeyPress(tBXIn.Text, sender, e);
  224. }
  225. private void tBYIn_KeyPress(object sender, KeyPressEventArgs e)
  226. {
  227. textBox_KeyPress(tBYIn.Text, sender, e);
  228. }
  229. private void tBZIn_KeyPress(object sender, KeyPressEventArgs e)
  230. {
  231. textBox_KeyPress(tBZIn.Text, sender, e);
  232. }
  233. private void tBTIn_KeyPress(object sender, KeyPressEventArgs e)
  234. {
  235. textBox_KeyPress(tBTIn.Text, sender, e);
  236. }
  237. private void tBRIn_KeyPress(object sender, KeyPressEventArgs e)
  238. {
  239. textBox_KeyPress(tBRIn.Text, sender, e);
  240. }
  241. private void button24_Click(object sender, EventArgs e)
  242. {
  243. iExtender.SetImageAcquistionSetting(1, 1, 1024);
  244. string path = System.Environment.CurrentDirectory;
  245. iExtender.GrabImage(path+"\\测试.tif", 0, 0, 0, 0, 0);
  246. Bitmap ExtenderImage = iExtender.GetBitmap();
  247. if (ExtenderImage != null)
  248. {
  249. pBImage.Image = ExtenderImage;
  250. }
  251. }
  252. int li = 0;
  253. //点采集
  254. private void button25_Click(object sender, EventArgs e)
  255. {
  256. long[] XrayData = new long[2000];
  257. Dictionary<string, double> listElement = new Dictionary<string, double>();
  258. iExtender.XrayPointCollectiong(200,44, 55, out XrayData, out listElement);
  259. ShowData(XrayData, listElement);
  260. li++;
  261. Console.WriteLine(li.ToString());
  262. //byte[] bArray = new byte[8000];
  263. //for (int i = 0; i < 2000; i++)
  264. //{
  265. // byte[] temps = BitConverter.GetBytes(XrayData[i]);
  266. // bArray[i * 4] = temps[0];
  267. // bArray[i * 4 + 1] = temps[1];
  268. // bArray[i * 4 + 2] = temps[2];
  269. // bArray[i * 4 + 3] = temps[3];
  270. //}
  271. //SQLiteConnection m_db = new SQLiteConnection("data source =" + @"E:\HOZ\Test\MeasureDB.db");
  272. //m_db.Open();
  273. ////开启一个事务
  274. //using (SQLiteTransaction tr = m_db.BeginTransaction())
  275. //{
  276. // //向能谱数据表插入数据
  277. // string sql = "INSERT INTO XrayData(ID, APID, Type, X, Y, AreasID, ElementNum, XrayData) values ("
  278. // + 2.ToString() + ","
  279. // + 3.ToString() + ","
  280. // + 0.ToString() + ","
  281. // + 111.ToString() + ","
  282. // + 222.ToString() + ","
  283. // + (-1).ToString() + ","
  284. // + listElement.Count.ToString() + ",:XrayData)";
  285. // SQLiteCommand command = new SQLiteCommand(sql, m_db);
  286. // command.Parameters.Add("XrayData", System.Data.DbType.Binary).Value = bArray; // BLOB
  287. // command.ExecuteNonQuery();
  288. // //向能谱元素表插入数据
  289. // int i = 0;
  290. // foreach (KeyValuePair<string, double> element in listElement)
  291. // {
  292. // sql = "INSERT INTO Element(XayID, ElementNum, ElementID, Name, Percent) values ("
  293. // + 2.ToString() + ","
  294. // + listElement.Count.ToString() + ","
  295. // + i.ToString() + ",'"
  296. // + element.Key + "',"
  297. // + element.Value.ToString() + ")";
  298. // command = new SQLiteCommand(sql, m_db);
  299. // command.ExecuteNonQuery();
  300. // i++;
  301. // }
  302. // tr.Commit();
  303. //}
  304. //m_db.Close();
  305. //m_db.Dispose();
  306. }
  307. void ShowData(long[] XrayData, Dictionary<string, double> listElement)
  308. {
  309. Series series = chart1.Series[0];
  310. series.Points.Clear();
  311. for (int i = 0; i < 2000; i++)
  312. {
  313. series.Points.AddXY(i, XrayData[i]);
  314. }
  315. this.dataGridView1.Rows.Clear();
  316. int index = 0;
  317. var ie = listElement.GetEnumerator();
  318. while (ie.MoveNext())
  319. {
  320. this.dataGridView1.Rows.Add();
  321. this.dataGridView1.Rows[index].Cells[0].Value = ie.Current.Key;
  322. this.dataGridView1.Rows[index].Cells[1].Value = ie.Current.Value;
  323. index++;
  324. }
  325. }
  326. void ShowReadData(long[] XrayData)
  327. {
  328. Series series = chart1.Series[1];
  329. series.Points.Clear();
  330. for (int i = 0; i < 2000; i++)
  331. {
  332. series.Points.AddXY(i, XrayData[i]);
  333. }
  334. }
  335. //面采集
  336. private void button26_Click(object sender, EventArgs e)
  337. {
  338. long[] XrayData = new long[2000];
  339. Dictionary<string, double> listElement = new Dictionary<string, double>();
  340. List<Segment> listSeg = new List<Segment>();
  341. Segment seg1 = new Segment();
  342. seg1.X = 1;
  343. seg1.Y = 1;
  344. seg1.Length = 10;
  345. listSeg.Add(seg1);
  346. Segment seg2 = new Segment();
  347. seg2.X = 1;
  348. seg2.Y = 10;
  349. seg2.Length = 10;
  350. listSeg.Add(seg2);
  351. iExtender.XrayAreaCollectiong(200, listSeg, out XrayData, out listElement);
  352. ShowData(XrayData, listElement);
  353. }
  354. private void btnCreateDB_Click(object sender, EventArgs e)
  355. {
  356. MeasureFile msf = new MeasureFile();
  357. msf.FileName = @"E:\HOZ\Test\asd.msf";
  358. MeasureDB db = new MeasureDB(msf);
  359. }
  360. private void btnReadP_Click(object sender, EventArgs e)
  361. {
  362. SQLiteConnection m_db = new SQLiteConnection("data source =" + @"E:\HOZ\Test\MeasureDB.db");
  363. m_db.Open();
  364. String sql = "Select XrayData from XrayData where ID =" + NUDNum.Value.ToString();
  365. //SQLiteDataAdapter adapter = new SQLiteDataAdapter(sql, m_db);
  366. //DataSet ds = new DataSet();
  367. //adapter.Fill(ds);
  368. //DataTable dt = ds.Tables[0];
  369. SQLiteCommand cmd = new SQLiteCommand(sql, m_db);
  370. SQLiteDataReader sdr = cmd.ExecuteReader();
  371. sdr.Read();
  372. byte[] blob = null;
  373. blob = new byte[sdr.GetBytes(0, 0, null, 0, int.MaxValue)];
  374. sdr.GetBytes(0, 0, blob, 0, blob.Length);
  375. sdr.Close();
  376. m_db.Close();
  377. m_db.Dispose();
  378. long[] rd = new long[blob.Length / 4];
  379. for(int i=0;i<rd.Length;i++)
  380. {
  381. long temp = BitConverter.ToInt32(blob, i * 4);
  382. rd[i] = temp + 10;
  383. }
  384. ShowReadData(rd);
  385. }
  386. int xraydata_id = 1;
  387. int analysispoints_id = 1;
  388. private void btnTest_Click(object sender, EventArgs e)
  389. {
  390. List<Point> listPoints = new List<Point>();
  391. List<List<Segment>> listFeature = new List<List<Segment>>();
  392. List<Segment> ls = new List<Segment>();
  393. listPoints.Add(new Point(Convert.ToInt32(txtpx1.Text), Convert.ToInt32(txtpy1.Text)));
  394. listPoints.Add(new Point(Convert.ToInt32(txtpx2.Text), Convert.ToInt32(txtpy2.Text)));
  395. listPoints.Add(new Point(Convert.ToInt32(txtpx3.Text), Convert.ToInt32(txtpy3.Text)));
  396. listPoints.Add(new Point(Convert.ToInt32(txtpx4.Text), Convert.ToInt32(txtpy4.Text)));
  397. listPoints.Add(new Point(Convert.ToInt32(txtpx5.Text), Convert.ToInt32(txtpy5.Text)));
  398. Segment sgt = new Segment();
  399. sgt.X = Convert.ToInt32(txtarea1x1.Text);
  400. sgt.Y = Convert.ToInt32(txtarea1y1.Text);
  401. sgt.Length = Convert.ToInt32(txtarea1l1.Text);
  402. ls.Add(sgt);
  403. sgt = new Segment();
  404. sgt.X = Convert.ToInt32(txtarea1x2.Text);
  405. sgt.Y = Convert.ToInt32(txtarea1y2.Text);
  406. sgt.Length = Convert.ToInt32(txtarea1l2.Text);
  407. ls.Add(sgt);
  408. sgt = new Segment();
  409. sgt.X = Convert.ToInt32(txtarea1x3.Text);
  410. sgt.Y = Convert.ToInt32(txtarea1y3.Text);
  411. sgt.Length = Convert.ToInt32(txtarea1l3.Text);
  412. ls.Add(sgt);
  413. listFeature.Add(ls);
  414. ls = new List<Segment>();
  415. sgt = new Segment();
  416. sgt.X = Convert.ToInt32(txtarea2x1.Text);
  417. sgt.Y = Convert.ToInt32(txtarea2y1.Text);
  418. sgt.Length = Convert.ToInt32(txtarea2l1.Text);
  419. ls.Add(sgt);
  420. sgt = new Segment();
  421. sgt.X = Convert.ToInt32(txtarea2x2.Text);
  422. sgt.Y = Convert.ToInt32(txtarea2y2.Text);
  423. sgt.Length = Convert.ToInt32(txtarea2l2.Text);
  424. ls.Add(sgt);
  425. sgt = new Segment();
  426. sgt.X = Convert.ToInt32(txtarea2x3.Text);
  427. sgt.Y = Convert.ToInt32(txtarea2y3.Text);
  428. sgt.Length = Convert.ToInt32(txtarea2l3.Text);
  429. ls.Add(sgt);
  430. listFeature.Add(ls);
  431. //m_MeasDB.InsetAPoint(analysispoints_id, pname[analysispoints_id-1], @"D:\\", listPoints.Count, listFeature.Count);
  432. long[] XrayData = null;
  433. Dictionary<string, double> listElement = null;
  434. //点扫描数据存储
  435. for(int i=0;i<listPoints.Count;i++)
  436. {
  437. XrayData = new long[2000];
  438. listElement = new Dictionary<string, double>();
  439. iExtender.XrayPointCollectiong(msf.MParam.EDSP.DwellTime, listPoints[i].X, listPoints[i].Y, out XrayData, out listElement);
  440. //m_MeasDB.InsertAPointXay(analysispoints_id, xraydata_id, listPoints[i].X, listPoints[i].Y, XrayData, listElement);
  441. xraydata_id++;
  442. }
  443. //面扫描数据存储
  444. int AreasNo = 0;
  445. foreach (List<Segment> listSeg in listFeature)
  446. {
  447. XrayData = new long[2000];
  448. listElement = new Dictionary<string, double>();
  449. iExtender.XrayAreaCollectiong(msf.MParam.EDSP.AreaTime, listSeg, out XrayData, out listElement);
  450. //写入数据库
  451. AreasNo++;
  452. //m_MeasDB.InsertAAreaXay(analysispoints_id, xraydata_id, AreasNo, listSeg, XrayData, listElement);
  453. xraydata_id++;
  454. }
  455. analysispoints_id++;
  456. MessageBox.Show("测试完成!");
  457. }
  458. MeasureDB m_MeasDB = null;
  459. MeasureFile msf = null;
  460. List<String> pname = new List<string>();
  461. private void Form1_Load(object sender, EventArgs e)
  462. {
  463. //向数据库插入分析点数据
  464. msf = new MeasureFile();
  465. msf.FileName = @"E:\HOZ\Test\asd.msf";
  466. msf.MParam.EDSP.DwellTime = 200;
  467. msf.MParam.EDSP.AreaTime = 200;
  468. m_MeasDB = new MeasureDB(msf);
  469. pname.Add("aaaa");
  470. pname.Add("bbbb");
  471. pname.Add("cccc");
  472. }
  473. private void button27_Click(object sender, EventArgs e)
  474. {
  475. try
  476. {
  477. iExtender = factoryExtender.IExtender;
  478. MessageBox.Show("连接能谱成功");
  479. }
  480. catch (Exception x)
  481. {
  482. MessageBox.Show("oxford 初始化失败" + x.Message);
  483. }
  484. }
  485. }
  486. }