FormUCMain.cs 31 KB

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