FormUCMain.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973
  1. using SmartSEMControl;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. namespace HOZProject
  13. {
  14. public partial class FormUCMain : Form
  15. {
  16. #region 全局变量定义
  17. //全局只有一个fatorySEM
  18. static FactoryHardware factorySEM = FactoryHardware.Instance;
  19. ISEMControl iSEM = factorySEM.ISEM;
  20. //电镜连接状态变量
  21. bool m_SEMConnectState = false;
  22. //自动状态变量
  23. bool m_AutoState = false;
  24. //电压状态变量
  25. bool m_HTState = false;
  26. //样品台状态变量
  27. bool m_StageStage = false;
  28. int m_ThreadTime = 1000;
  29. int m_ThreadCount = 5;
  30. string m_ImgFileSavePath = "D://tempImage.tif";
  31. string m_ImgAutoFileSavePath = "D://tempAutoImage.tif";
  32. short m_ImgWidth = 1024;
  33. short m_ImgHeight = 768;
  34. #endregion
  35. #region 构造
  36. public FormUCMain()
  37. {
  38. InitializeComponent();
  39. }
  40. #endregion
  41. #region 窗体事件
  42. private void FormUCMain_Load(object sender, EventArgs e)
  43. {
  44. ////获取初始状态(电镜连接状态、自动函数的状态、样品台状态)
  45. //Thread thread = new Thread(new ThreadStart(GetInitState));
  46. //thread.Start();
  47. }
  48. #endregion
  49. #region 获取初始状态
  50. public void GetInitState()
  51. {
  52. if (iSEM != null)
  53. {
  54. //电镜连接状态
  55. GetSEMConnectState();
  56. //自动函数的状态
  57. GetAutoFUNCState();
  58. //样品台状态
  59. GetStageState();
  60. }
  61. }
  62. #endregion
  63. #region 获取状态(电镜连接状态、自动函数的状态、样品台状态)
  64. public bool GetSEMConnectState()
  65. {
  66. bool result = GetAllState(StateType.SEMConnectState);
  67. if (result)
  68. {
  69. //已连接,设置按钮图像
  70. btnConnect.BackgroundImage = Properties.Resources.CloseImg;
  71. btnConnect.Invalidate();
  72. }
  73. else
  74. {
  75. btnConnect.BackgroundImage = Properties.Resources.ConnectImg;
  76. btnConnect.Invalidate();
  77. }
  78. //设置电镜连接状态:True
  79. m_SEMConnectState = result;
  80. return result;
  81. }
  82. public bool GetAutoFUNCState()
  83. {
  84. bool result = GetAllState(StateType.AutoFUNCState);
  85. m_AutoState = result;
  86. return result;
  87. }
  88. public bool GetStageState()
  89. {
  90. bool result = GetAllState(StateType.StageState);
  91. if (result)
  92. {
  93. btnConnect.BackgroundImage = Properties.Resources.CloseImg;
  94. }
  95. else
  96. {
  97. btnConnect.BackgroundImage = Properties.Resources.ConnectImg;
  98. }
  99. m_StageStage = result;
  100. return result;
  101. }
  102. public bool GetAllState(StateType stateType)
  103. {
  104. //线程循环计数器
  105. int threadCount = 0;
  106. bool bResult = false;
  107. float fResult = 0;
  108. while (true)
  109. {
  110. if (threadCount <= m_ThreadCount)
  111. {
  112. switch (stateType)
  113. {
  114. case StateType.SEMConnectState:
  115. bResult = iSEM.ConnectStatus();
  116. if (bResult)
  117. {
  118. return bResult;
  119. }
  120. break;
  121. case StateType.AutoFUNCState:
  122. fResult = iSEM.GetAutoFunction();
  123. if (fResult == 0)
  124. {
  125. bResult = true;
  126. return bResult;
  127. }
  128. break;
  129. case StateType.StageState:
  130. fResult = iSEM.GetStageIs();
  131. if (fResult == 0)
  132. {
  133. bResult = true;
  134. return bResult;
  135. }
  136. break;
  137. }
  138. }
  139. else
  140. {
  141. return false;
  142. }
  143. threadCount++;
  144. Thread.Sleep(m_ThreadTime);
  145. }
  146. }
  147. /// <summary>
  148. /// 状态枚举
  149. /// </summary>
  150. public enum StateType
  151. {
  152. SEMConnectState = 0,
  153. AutoFUNCState = 1,
  154. StageState = 2
  155. }
  156. #endregion
  157. #region 关闭与最小化按钮事件
  158. private void pichide_MouseEnter(object sender, EventArgs e)
  159. {
  160. pichide.Image = Properties.Resources.Min_Blue;
  161. }
  162. private void pichide_MouseLeave(object sender, EventArgs e)
  163. {
  164. pichide.Image = Properties.Resources.Min_Gray;
  165. }
  166. private void picexit_MouseEnter(object sender, EventArgs e)
  167. {
  168. picexit.Image = Properties.Resources.exit_Red;
  169. }
  170. private void picexit_MouseLeave(object sender, EventArgs e)
  171. {
  172. picexit.Image = Properties.Resources.exit_Gray;
  173. }
  174. private void picexit_Click(object sender, EventArgs e)
  175. {
  176. this.Close();
  177. }
  178. private void pichide_Click(object sender, EventArgs e)
  179. {
  180. this.WindowState = FormWindowState.Minimized;
  181. }
  182. #endregion
  183. #region 拖动窗体
  184. private Point mouseOff;//鼠标移动位置变量
  185. private bool leftFlag;//标签是否为左键
  186. private void FormUCMain_MouseDown(object sender, MouseEventArgs e)
  187. {
  188. if (e.Button == MouseButtons.Left)
  189. {
  190. mouseOff = new Point(-e.X, -e.Y); //得到变量的值
  191. leftFlag = true; //点击左键按下时标注为true;
  192. }
  193. }
  194. private void FormUCMain_MouseMove(object sender, MouseEventArgs e)
  195. {
  196. if (leftFlag)
  197. {
  198. Point mouseSet = Control.MousePosition;
  199. mouseSet.Offset(mouseOff.X, mouseOff.Y); //设置移动后的位置
  200. Location = mouseSet;
  201. }
  202. }
  203. private void FormUCMain_MouseUp(object sender, MouseEventArgs e)
  204. {
  205. if (leftFlag)
  206. {
  207. leftFlag = false;//释放鼠标后标注为false;
  208. }
  209. }
  210. #endregion
  211. #region SEM功能按钮读写事件
  212. #region 连接、关闭设备
  213. /// <summary>
  214. /// 初始化连接设备
  215. /// </summary>
  216. /// <param name="sender"></param>
  217. /// <param name="e"></param>
  218. private void btnConnect_Click(object sender, EventArgs e)
  219. {
  220. //1.判断当前连接状态
  221. if (m_SEMConnectState)
  222. {
  223. if (iSEM != null)
  224. {
  225. iSEM.Dispose();
  226. }
  227. }
  228. }
  229. #endregion
  230. #region 获取与设置缩放参数
  231. /// <summary>
  232. /// 获取缩放参数
  233. /// </summary>
  234. /// <param name="sender"></param>
  235. /// <param name="e"></param>
  236. private void btnenlargeGet_Click(object sender, EventArgs e)
  237. {
  238. float ret = iSEM.GetMagnification();
  239. if (float.IsNaN(ret))
  240. {
  241. txtenlarge.Enabled = false;
  242. btnenlargeSet.Enabled = false;
  243. }
  244. else
  245. {
  246. txtenlarge.Text = ret.ToString();
  247. btnenlargeSet.Enabled = true;
  248. }
  249. }
  250. /// <summary>
  251. /// 获取缩放参数
  252. /// </summary>
  253. /// <param name="sender"></param>
  254. /// <param name="e"></param>
  255. private void btnenlargeSet_Click(object sender, EventArgs e)
  256. {
  257. float set = 0;
  258. if (float.TryParse(txtenlarge.Text, out set))
  259. {
  260. iSEM.SetMagnification(set);
  261. }
  262. }
  263. #endregion
  264. #region 获取与设置亮度参数
  265. private void btnBrightnessGet_Click(object sender, EventArgs e)
  266. {
  267. float ret = iSEM.GetBrightness();
  268. if (float.IsNaN(ret))
  269. {
  270. txtBrightness.Enabled = false;
  271. btnBrightnessSet.Enabled = false;
  272. }
  273. else
  274. {
  275. txtBrightness.Text = ret.ToString();
  276. btnBrightnessSet.Enabled = true;
  277. }
  278. }
  279. private void btnBrightnessSet_Click(object sender, EventArgs e)
  280. {
  281. float set = 0;
  282. if (float.TryParse(txtBrightness.Text, out set))
  283. {
  284. iSEM.SetBrightness(set);
  285. }
  286. }
  287. #endregion
  288. #region 获取与设置焦距参数
  289. private void btnWDGet_Click(object sender, EventArgs e)
  290. {
  291. float ret = iSEM.GetWorkingDistance();
  292. if (float.IsNaN(ret))
  293. {
  294. txtWD.Enabled = false;
  295. btnWDSet.Enabled = false;
  296. }
  297. else
  298. {
  299. txtWD.Text = ret.ToString();
  300. btnWDSet.Enabled = true;
  301. }
  302. }
  303. private void btnWDSet_Click(object sender, EventArgs e)
  304. {
  305. float set = 0;
  306. if (float.TryParse(txtWD.Text, out set))
  307. {
  308. iSEM.SetWorkingDistance(set);
  309. }
  310. }
  311. #endregion
  312. #region 获取与设置对比度参数
  313. private void btnContrastGet_Click(object sender, EventArgs e)
  314. {
  315. float ret = iSEM.GetContrast();
  316. if (float.IsNaN(ret))
  317. {
  318. txtContrast.Enabled = false;
  319. btnContrastSet.Enabled = false;
  320. }
  321. else
  322. {
  323. txtContrast.Text = ret.ToString();
  324. btnContrastSet.Enabled = true;
  325. }
  326. }
  327. private void btnContrastSet_Click(object sender, EventArgs e)
  328. {
  329. float set = 0;
  330. if (float.TryParse(txtContrast.Text, out set))
  331. {
  332. iSEM.SetContrast(set);
  333. }
  334. }
  335. #endregion
  336. #region 获取与设置倾斜矫正参数
  337. private void btnTiltAngleGet_Click(object sender, EventArgs e)
  338. {
  339. float ret = iSEM.GetTiltAngle();
  340. if (float.IsNaN(ret))
  341. {
  342. txtTiltAngle.Enabled = false;
  343. btnTiltAngleSet.Enabled = false;
  344. }
  345. else
  346. {
  347. txtTiltAngle.Text = ret.ToString();
  348. btnTiltAngleSet.Enabled = true;
  349. }
  350. }
  351. private void btnTiltAngleSet_Click(object sender, EventArgs e)
  352. {
  353. float set = 0;
  354. if (float.TryParse(txtTiltAngle.Text, out set))
  355. {
  356. iSEM.SetTiltAngle(set);
  357. }
  358. }
  359. #endregion
  360. #region 获取与设置旋转角度参数
  361. private void btnScanRotationGet_Click(object sender, EventArgs e)
  362. {
  363. float ret = iSEM.GetScanRotation();
  364. if (float.IsNaN(ret))
  365. {
  366. txtScanRotation.Enabled = false;
  367. btnScanRotationSet.Enabled = false;
  368. }
  369. else
  370. {
  371. txtScanRotation.Text = ret.ToString();
  372. btnScanRotationSet.Enabled = true;
  373. }
  374. }
  375. private void btnScanRotationSet_Click(object sender, EventArgs e)
  376. {
  377. float set = 0;
  378. if (float.TryParse(txtScanRotation.Text, out set))
  379. {
  380. iSEM.SetScanRotation(set);
  381. }
  382. }
  383. #endregion
  384. #region 获取与设置像散Y参数
  385. private void btnAstigmatismXGet_Click(object sender, EventArgs e)
  386. {
  387. float ret = iSEM.GetAstigmatismX();
  388. if (float.IsNaN(ret))
  389. {
  390. txtAstigmatismX.Enabled = false;
  391. btnAstigmatismXSet.Enabled = false;
  392. }
  393. else
  394. {
  395. txtAstigmatismX.Text = ret.ToString();
  396. btnAstigmatismXSet.Enabled = true;
  397. }
  398. }
  399. private void btnAstigmatismXSet_Click(object sender, EventArgs e)
  400. {
  401. float set = 0;
  402. if (float.TryParse(txtAstigmatismX.Text, out set))
  403. {
  404. iSEM.SetAstigmatismX(set);
  405. }
  406. }
  407. #endregion
  408. #region 获取与设置像散Y参数
  409. private void btnAstigmatismYGet_Click(object sender, EventArgs e)
  410. {
  411. float ret = iSEM.GetAstigmatismY();
  412. if (float.IsNaN(ret))
  413. {
  414. txtAstigmatismY.Enabled = false;
  415. btnAstigmatismYSet.Enabled = false;
  416. }
  417. else
  418. {
  419. txtAstigmatismY.Text = ret.ToString();
  420. btnAstigmatismYSet.Enabled = true;
  421. }
  422. }
  423. private void btnAstigmatismYSet_Click(object sender, EventArgs e)
  424. {
  425. float set = 0;
  426. if (float.TryParse(txtAstigmatismY.Text, out set))
  427. {
  428. iSEM.SetAstigmatismY(set);
  429. }
  430. }
  431. #endregion
  432. #region 获取像素尺寸
  433. private void btnPixelSizeGet_Click(object sender, EventArgs e)
  434. {
  435. float ret = iSEM.GetPixelSize();
  436. if (float.IsNaN(ret))
  437. {
  438. txtPixelSize.Text = "NaN";
  439. }
  440. else
  441. {
  442. txtPixelSize.Text = ret.ToString();
  443. }
  444. }
  445. #endregion
  446. #region 切换电压状态
  447. private void pbHT_Click(object sender, EventArgs e)
  448. {
  449. bool result = true;
  450. if (!m_HTState)
  451. {
  452. //打开电压
  453. result = iSEM.CmdOpenVoltage();
  454. if (result)
  455. {
  456. m_HTState = true;
  457. pbHT.Image = Properties.Resources.OFF;
  458. pbHT.Invalidate();
  459. }
  460. }
  461. else
  462. {
  463. //关闭电压
  464. result = iSEM.CmdCloseVoltage();
  465. if (result)
  466. {
  467. m_HTState = false;
  468. pbHT.Image = Properties.Resources.ON;
  469. pbHT.Invalidate();
  470. }
  471. }
  472. }
  473. #endregion
  474. #region 获取样品台六轴位置信息
  475. private void btnGetStagePosition_Click(object sender, EventArgs e)
  476. {
  477. if (iSEM == null)
  478. {
  479. return;
  480. }
  481. try
  482. {
  483. float[] pt = iSEM.GetStagePosition();
  484. if (!float.IsNaN(pt[0]))
  485. {
  486. txtStageX.Text = pt[0].ToString();
  487. }
  488. if (!float.IsNaN(pt[1]))
  489. {
  490. txtStageY.Text = pt[1].ToString();
  491. }
  492. if (!float.IsNaN(pt[2]))
  493. {
  494. txtStageZ.Text = pt[2].ToString();
  495. }
  496. if (!float.IsNaN(pt[3]))
  497. {
  498. txtStageT.Text = pt[3].ToString();
  499. }
  500. if (!float.IsNaN(pt[4]))
  501. {
  502. txtStageR.Text = pt[4].ToString();
  503. }
  504. if (!float.IsNaN(pt[5]))
  505. {
  506. txtStageM.Text = pt[5].ToString();
  507. }
  508. }
  509. catch (Exception ex)
  510. {
  511. throw ex;
  512. }
  513. }
  514. #endregion
  515. #region 获取与设置样品台X轴参数
  516. private void btnStageGetX_Click(object sender, EventArgs e)
  517. {
  518. float ret = iSEM.GetStageAtX();
  519. if (float.IsNaN(ret))
  520. {
  521. txtStageX.Text = "NaN";
  522. }
  523. else
  524. {
  525. txtStageX.Text = ret.ToString();
  526. }
  527. }
  528. private void btnStageSetX_Click(object sender, EventArgs e)
  529. {
  530. float set = 0;
  531. if (float.TryParse(txtStageX.Text, out set))
  532. {
  533. iSEM.SetStageGotoX(set);
  534. }
  535. }
  536. #endregion
  537. #region 获取与设置样品台T轴参数
  538. private void btnStageGetT_Click(object sender, EventArgs e)
  539. {
  540. float ret = iSEM.GetStageAtT();
  541. if (float.IsNaN(ret))
  542. {
  543. txtStageT.Text = "NaN";
  544. }
  545. else
  546. {
  547. txtStageT.Text = ret.ToString();
  548. }
  549. }
  550. private void btnStageSetT_Click(object sender, EventArgs e)
  551. {
  552. float set = 0;
  553. if (float.TryParse(txtStageT.Text, out set))
  554. {
  555. iSEM.SetStageGotoT(set);
  556. }
  557. }
  558. #endregion
  559. #region 获取与设置样品台Y轴参数
  560. private void btnStageGetY_Click(object sender, EventArgs e)
  561. {
  562. float ret = iSEM.GetStageAtY();
  563. if (float.IsNaN(ret))
  564. {
  565. txtStageY.Text = "NaN";
  566. }
  567. else
  568. {
  569. txtStageY.Text = ret.ToString();
  570. }
  571. }
  572. private void btnStageSetY_Click(object sender, EventArgs e)
  573. {
  574. float set = 0;
  575. if (float.TryParse(txtStageY.Text, out set))
  576. {
  577. iSEM.SetStageGotoY(set);
  578. }
  579. }
  580. #endregion
  581. #region 获取与设置样品台R轴参数
  582. private void btnStageGetR_Click(object sender, EventArgs e)
  583. {
  584. float ret = iSEM.GetStageAtR();
  585. if (float.IsNaN(ret))
  586. {
  587. txtStageR.Text = "NaN";
  588. }
  589. else
  590. {
  591. txtStageR.Text = ret.ToString();
  592. }
  593. }
  594. private void btnStageSetR_Click(object sender, EventArgs e)
  595. {
  596. float set = 0;
  597. if (float.TryParse(txtStageR.Text, out set))
  598. {
  599. iSEM.SetStageGotoR(set);
  600. }
  601. }
  602. #endregion
  603. #region 获取与设置样品台Z轴参数
  604. private void btnStageGetZ_Click(object sender, EventArgs e)
  605. {
  606. float ret = iSEM.GetStageAtZ();
  607. if (float.IsNaN(ret))
  608. {
  609. txtStageZ.Text = "NaN";
  610. }
  611. else
  612. {
  613. txtStageZ.Text = ret.ToString();
  614. }
  615. }
  616. private void btnStageSetZ_Click(object sender, EventArgs e)
  617. {
  618. float set = 0;
  619. if (float.TryParse(txtStageZ.Text, out set))
  620. {
  621. iSEM.SetStageGotoZ(set);
  622. }
  623. }
  624. #endregion
  625. #region 获取与设置样品台M轴参数
  626. private void btnStageGetM_Click(object sender, EventArgs e)
  627. {
  628. float ret = iSEM.GetStageAtM();
  629. if (float.IsNaN(ret))
  630. {
  631. txtStageM.Text = "NaN";
  632. }
  633. else
  634. {
  635. txtStageM.Text = ret.ToString();
  636. }
  637. }
  638. private void btnStageSetM_Click(object sender, EventArgs e)
  639. {
  640. float set = 0;
  641. if (float.TryParse(txtStageM.Text, out set))
  642. {
  643. iSEM.SetStageGotoM(set);
  644. }
  645. }
  646. #endregion
  647. #region 移动当前位置至SEM中心
  648. private void btnMoveSEMCenter_Click(object sender, EventArgs e)
  649. {
  650. if (iSEM == null)
  651. {
  652. return;
  653. }
  654. //设置当前样品台状态
  655. m_StageStage = false;
  656. float setX = 0;
  657. float setY = 0;
  658. bool GotoResult = false;
  659. //判断X、Y轴信息
  660. if (float.TryParse(txtMoveStageX.Text, out setX) && float.TryParse(txtMoveStageY.Text, out setY))
  661. {
  662. GotoResult = iSEM.MoveStageXY(setX, setY);
  663. }
  664. }
  665. #endregion
  666. #region 停止
  667. /// <summary>
  668. /// 停止
  669. /// </summary>
  670. /// <param name="sender"></param>
  671. /// <param name="e"></param>
  672. private void btnStop_Click(object sender, EventArgs e)
  673. {
  674. if (iSEM != null)
  675. {
  676. //停止
  677. iSEM.CmdStageAbort();
  678. }
  679. }
  680. #endregion
  681. #endregion
  682. #region 自动函数处理
  683. FormShowImage fShowImage = null;
  684. #region 获取图像
  685. /// <summary>
  686. /// 获取图像
  687. /// </summary>
  688. /// <param name="sender"></param>
  689. /// <param name="e"></param>
  690. private void btnGetImage_Click(object sender, EventArgs e)
  691. {
  692. if (iSEM == null)
  693. {
  694. return;
  695. }
  696. fShowImage = new FormShowImage();
  697. //获取当前图像以及当前电镜参数
  698. //放大倍数
  699. float f_Mag = iSEM.GetMagnification();
  700. //焦距
  701. float f_WD = iSEM.GetWorkingDistance();
  702. bool imageResult = iSEM.GrabImage(m_ImgFileSavePath, 0, 0, m_ImgWidth, m_ImgHeight, 0);
  703. if (imageResult)
  704. {
  705. Bitmap bitmap = new Bitmap(m_ImgFileSavePath);
  706. fShowImage.Width = fShowImage.Width / 2;
  707. //设置当前图像与参数
  708. fShowImage.pbImage.Image = (Image)bitmap;
  709. fShowImage.Mag = "放大倍数:" + f_Mag;
  710. fShowImage.Content = "焦距:" + f_WD;
  711. fShowImage.SetParaInfo();
  712. fShowImage.Show();
  713. }
  714. }
  715. #endregion
  716. #region 自动对焦
  717. private void btnAutoWD_Click(object sender, EventArgs e)
  718. {
  719. if (iSEM == null)
  720. {
  721. return;
  722. }
  723. fShowImage = new FormShowImage();
  724. //获取图像尺寸
  725. int[] imageSize = iSEM.GetImageStore();
  726. m_ImgWidth = Convert.ToInt16(imageSize[0]);
  727. m_ImgHeight = Convert.ToInt16(imageSize[1]);
  728. //放大倍数
  729. float f_Mag = iSEM.GetMagnification();
  730. //焦距
  731. float f_WD = iSEM.GetWorkingDistance();
  732. //获取当前图像以及当前电镜参数
  733. bool imageResult = iSEM.GrabImage(m_ImgFileSavePath, 0, 0, m_ImgWidth, m_ImgHeight, 0);
  734. if (imageResult)
  735. {
  736. Bitmap bitmap = new Bitmap(m_ImgFileSavePath);
  737. //设置当前图像与参数
  738. fShowImage.pbImage.Image = (Image)bitmap;
  739. fShowImage.Mag = "放大倍数:" + f_Mag;
  740. fShowImage.Content = "焦距:" + f_WD;
  741. fShowImage.SetParaInfo();
  742. fShowImage.Show();
  743. float result = iSEM.GetAutoVideo();
  744. if (result > 0)
  745. {
  746. Thread threadImg = new Thread(new ThreadStart(GetAutoWDImage));
  747. threadImg.Start();
  748. }
  749. }
  750. }
  751. /// <summary>
  752. /// 获取自动状态后
  753. /// </summary>
  754. private void GetAutoWDImage()
  755. {
  756. if (fShowImage != null)
  757. {
  758. //获取当前自动状态
  759. bool result = GetAllState(StateType.AutoFUNCState);
  760. if (result)
  761. {
  762. //放大倍数
  763. float f_Mag = iSEM.GetMagnification();
  764. //焦距
  765. float f_WD = iSEM.GetWorkingDistance();
  766. //获取自动对焦后图像以及电镜参数
  767. bool imageResult = iSEM.GrabImage(m_ImgAutoFileSavePath, 0, 0, m_ImgWidth, m_ImgHeight, 0);
  768. Bitmap bitmap = new Bitmap(m_ImgAutoFileSavePath);
  769. fShowImage.pbImage.Image = (Image)bitmap;
  770. //自动后设置图像与参数
  771. fShowImage.pbAutoImage.Image = Properties.Resources.UCMain;
  772. fShowImage.AutoMag = "放大倍数:" + f_Mag;
  773. fShowImage.AutoContent = "焦距:" + f_WD;
  774. fShowImage.SetAutoParaInfo();
  775. fShowImage.Invalidate();
  776. }
  777. }
  778. }
  779. #endregion
  780. #region 自动亮度
  781. private void btnAutoBrightness_Click(object sender, EventArgs e)
  782. {
  783. if (iSEM == null)
  784. {
  785. return;
  786. }
  787. fShowImage = new FormShowImage();
  788. //获取图像尺寸
  789. int[] imageSize = iSEM.GetImageStore();
  790. m_ImgWidth = Convert.ToInt16(imageSize[0]);
  791. m_ImgHeight = Convert.ToInt16(imageSize[1]);
  792. //放大倍数
  793. float f_Mag = iSEM.GetMagnification();
  794. //亮度
  795. float f_Brightness = iSEM.GetBrightness();
  796. //对比度
  797. float f_Contrast = iSEM.GetContrast();
  798. //获取当前图像以及当前电镜参数
  799. bool imageResult = iSEM.GrabImage(m_ImgFileSavePath, 0, 0, m_ImgWidth, m_ImgHeight, 0);
  800. if (imageResult)
  801. {
  802. Bitmap bitmap = new Bitmap(m_ImgFileSavePath);
  803. fShowImage.pbImage.Image = (Image)bitmap;
  804. fShowImage.Mag = "放大倍数:" + f_Mag;
  805. fShowImage.Content = "亮度:"+f_Brightness+"对比度:"+ f_Contrast;
  806. fShowImage.SetParaInfo();
  807. fShowImage.Show();
  808. float result = iSEM.GetAutoVideo();
  809. if (result== 0)
  810. {
  811. Thread threadImg = new Thread(new ThreadStart(GetAutoBrightness));
  812. threadImg.Start();
  813. }
  814. }
  815. }
  816. /// <summary>
  817. /// 获取自动状态后
  818. /// </summary>
  819. private void GetAutoBrightness()
  820. {
  821. if (fShowImage != null)
  822. {
  823. //获取当前自动状态
  824. bool result = GetAllState(StateType.AutoFUNCState);
  825. if (result)
  826. {
  827. //放大倍数
  828. float f_Mag = iSEM.GetMagnification();
  829. //亮度
  830. float f_Brightness = iSEM.GetBrightness();
  831. //对比度
  832. float f_Contrast = iSEM.GetContrast();
  833. //获取自动对焦后图像以及电镜参数
  834. bool imageResult = iSEM.GrabImage(m_ImgAutoFileSavePath, 0, 0, m_ImgWidth, m_ImgHeight, 0);
  835. Bitmap bitmap = new Bitmap(m_ImgFileSavePath);
  836. fShowImage.pbAutoImage.Image = (Image)bitmap;
  837. fShowImage.AutoMag = "放大倍数:" + f_Mag;
  838. fShowImage.AutoContent = "亮度:" + f_Brightness + "对比度:" + f_Contrast;
  839. fShowImage.SetAutoParaInfo();
  840. fShowImage.Invalidate();
  841. }
  842. }
  843. }
  844. #endregion
  845. #region 自动消像散
  846. private void btnAutoAstigmatism_Click(object sender, EventArgs e)
  847. {
  848. if (iSEM == null)
  849. {
  850. return;
  851. }
  852. fShowImage = new FormShowImage();
  853. //获取图像尺寸
  854. int[] imageSize = iSEM.GetImageStore();
  855. m_ImgWidth = Convert.ToInt16(imageSize[0]);
  856. m_ImgHeight = Convert.ToInt16(imageSize[1]);
  857. //放大倍数
  858. float f_Mag = iSEM.GetMagnification();
  859. //消像散X
  860. float f_AstigmatismX = iSEM.GetAstigmatismX();
  861. //消像散Y
  862. float f_AstigmatismY = iSEM.GetAstigmatismY();
  863. //获取当前图像以及当前电镜参数
  864. bool imageResult = iSEM.GrabImage(m_ImgFileSavePath, 0, 0, m_ImgWidth, m_ImgHeight, 0);
  865. if (imageResult)
  866. {
  867. Bitmap bitmap = new Bitmap(m_ImgFileSavePath);
  868. fShowImage.pbImage.Image = (Image)bitmap;
  869. fShowImage.Mag = "放大倍数:" + f_Mag;
  870. fShowImage.Content = "消像散X:" + f_AstigmatismX + "消像散Y:" + f_AstigmatismY;
  871. fShowImage.SetParaInfo();
  872. fShowImage.Show();
  873. float result = iSEM.GetAutoVideo();
  874. if (result == 0)
  875. {
  876. Thread threadImg = new Thread(new ThreadStart(GetAutoAstigmatism));
  877. threadImg.Start();
  878. }
  879. }
  880. }
  881. /// <summary>
  882. /// 获取自动状态后
  883. /// </summary>
  884. private void GetAutoAstigmatism()
  885. {
  886. if (fShowImage != null)
  887. {
  888. //获取当前自动状态
  889. bool result = GetAllState(StateType.AutoFUNCState);
  890. if (result)
  891. {
  892. //放大倍数
  893. float f_Mag = iSEM.GetMagnification();
  894. //消像散X
  895. float f_AstigmatismX = iSEM.GetAstigmatismX();
  896. //消像散Y
  897. float f_AstigmatismY = iSEM.GetAstigmatismY();
  898. //获取自动对焦后图像以及电镜参数
  899. bool imageResult = iSEM.GrabImage(m_ImgAutoFileSavePath, 0, 0, m_ImgWidth, m_ImgHeight, 0);
  900. Bitmap bitmap = new Bitmap(m_ImgFileSavePath);
  901. fShowImage.pbAutoImage.Image = (Image)bitmap;
  902. fShowImage.AutoMag = "放大倍数:" + f_Mag;
  903. fShowImage.AutoContent = "消像散X:" + f_AstigmatismX + "消像散Y:" + f_AstigmatismY;
  904. fShowImage.SetAutoParaInfo();
  905. fShowImage.Invalidate();
  906. }
  907. }
  908. }
  909. #endregion
  910. #endregion
  911. private void btnContrast_Click(object sender, EventArgs e)
  912. {
  913. if (iSEM == null)
  914. {
  915. return;
  916. }
  917. }
  918. }
  919. }