CreateRectangle.cs 42 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Drawing.Drawing2D;
  5. using System.Windows.Forms;
  6. namespace OTSMeasureApp
  7. {
  8. public abstract class CRectangleGDIObject
  9. {
  10. #region 共同属性
  11. /// <summary>
  12. /// 所有图形共同属性 尺寸(int类型)
  13. /// </summary>
  14. public abstract Rectangle Region { get; set; }
  15. /// <summary>
  16. /// 所有图形共同属性 尺寸(float类型)
  17. /// </summary>
  18. public abstract RectangleF RegionF { get; set; }
  19. /// <summary>
  20. /// 所有图形共同属性 绘制时与移动缩放时记录的位置与尺寸(float类型)
  21. /// </summary>
  22. public abstract RectangleF DrawRegionF { get; set; }
  23. /// <summary>
  24. /// 多边形点集合对象 位置(int类型)
  25. /// </summary>
  26. public abstract List<Point> PolygonPointRegion { get; set; }
  27. /// <summary>
  28. /// 多边形点集合对象 位置(float类型)
  29. /// </summary>
  30. public abstract List<PointF> PolygonPointRegionF { get; set; }
  31. /// <summary>
  32. /// 多边形点集合对象 绘制时与移动缩放时记录的位置(float类型)
  33. /// </summary>
  34. public abstract List<PointF> DrawPolygonPointRegionF { get; set; }
  35. /// <summary>
  36. /// 编号
  37. /// </summary>
  38. public abstract string ID { get; set; }
  39. /// <summary>
  40. /// 样品孔名称
  41. /// </summary>
  42. public abstract string Name { get; set; }
  43. /// <summary>
  44. /// 所有图形共同属性 是否拖动
  45. /// </summary>
  46. public abstract bool IsDragging { get; set; }
  47. /// <summary>
  48. /// 创建类型 记录生成的图形类型
  49. /// </summary>
  50. public abstract CreateRectangleType CreateType { get; set; }
  51. //0:圆形 1:矩形
  52. public abstract ShapeType Shape { get; set; }
  53. /// <summary>
  54. /// 拖动到的位置
  55. /// </summary>
  56. public abstract Point DraggingPoint { get; set; }
  57. /// <summary>
  58. /// 绘制事件
  59. /// </summary>
  60. /// <param name="e"></param>
  61. public abstract void OnPaint(PaintEventArgs e);
  62. #endregion
  63. #region 样品台属性
  64. /// <summary>
  65. /// 记录样品台中的样品数量(样品台属性)
  66. /// </summary>
  67. public abstract int SampleCount { get; set; }
  68. /// <summary>
  69. /// 样品台中心与工作区域中心相差的位置
  70. /// </summary>
  71. //public abstract PointF SampleCenterDifferCenterPoint { get; set; }
  72. #endregion
  73. #region 样品属性
  74. /// <summary>
  75. /// 样品名称
  76. /// </summary>
  77. public abstract string SampleName { get; set; }
  78. /// <summary>
  79. /// 是否选中 (测量区域与样品属性)
  80. /// </summary>
  81. public abstract bool IsSelect { get; set; }
  82. /// <summary>
  83. /// 是否为工作样品 (样品属性)
  84. /// </summary>
  85. public abstract bool IsWorkSample { get; set; }
  86. #endregion
  87. #region 测量区域属性
  88. /// <summary>
  89. /// 是否存在帧图 (测量区域属性)
  90. /// </summary>
  91. //public abstract bool IsSingle { get; set; }
  92. /// <summary>
  93. /// 图形的路径 (圆角矩形、测量区域)
  94. /// </summary>
  95. public abstract GraphicsPath GPath { get; set; }
  96. #endregion
  97. #region 帧图属性
  98. /// <summary>
  99. /// 创建新图形时的颜色 (样品、帧图、标样)
  100. /// </summary>
  101. public abstract Color SelColor { get; set; }
  102. /// <summary>
  103. /// 绘制直线的开始位置 (帧图绘制直线)
  104. /// </summary>
  105. public abstract PointF StartPoint { get; set; }
  106. /// <summary>
  107. /// 绘制直线的开始位置 (帧图绘制直线)
  108. /// </summary>
  109. public abstract PointF EndPoint { get; set; }
  110. #endregion
  111. #region 颗粒属性
  112. /// <summary>
  113. /// 创建新图形时的颜色
  114. /// </summary>
  115. public abstract Color LineColor { get; set; }
  116. /// <summary>
  117. /// 创建颗粒直线长度
  118. /// </summary>
  119. public abstract float LineLength { get; set; }
  120. /// <summary>
  121. /// 创建颗粒直线长度
  122. /// </summary>
  123. public abstract PointF LineStartPoint { get; set; }
  124. /// <summary>
  125. /// SEM中心位置
  126. /// </summary>
  127. public abstract PointF SEMCenterPoint { get; set; }
  128. #endregion
  129. #region 测量区域
  130. /// <summary>
  131. /// OTS帧图X位置
  132. /// </summary>
  133. public abstract int OTSX { get; set; }
  134. /// <summary>
  135. /// OTS帧图Y位置
  136. /// </summary>
  137. public abstract int OTSY { get; set; }
  138. //public abstract bool OTSContains(Point OTSPoint);
  139. #endregion
  140. #region 绘制样品孔BSE图像
  141. public abstract Image BSEImage { get; set; }
  142. //绘制样品孔BSE图像宽度
  143. public abstract float BSEImageWitdh { get; set; }
  144. //绘制样品孔BSE图像高度
  145. public abstract float BSEImageHeight { get; set; }
  146. //绘制样品孔BSE图像位置
  147. public abstract PointF BSEImageLocation { get; set; }
  148. public abstract Point GetCenterPoint();
  149. public abstract bool IfContains(Point mousePoint);
  150. #endregion
  151. }
  152. public class CreateRectangle : CRectangleGDIObject // 同样的方式可以从ADraggableGDIObject生成其它图形的继承角类,比如矩形,三形等等。。
  153. {
  154. /// <summary>
  155. /// 创建图形
  156. /// </summary>
  157. /// <param name="startx">X位置</param>
  158. /// <param name="starty">Y位置</param>
  159. /// <param name="width">宽度</param>
  160. /// <param name="height">高度</param>
  161. /// <param name="cType">图形类型:createType=0 圆角矩形 createType=1 圆形 createType=2 文字</param>
  162. /// <param name="content">文字内容</param>
  163. public CreateRectangle(float startx, float starty, float width, float height, CreateRectangleType cType, string content, string name)
  164. {
  165. m_Region = new Rectangle((int)startx, (int)starty, (int)width, (int)height);
  166. m_RegionF = new RectangleF(startx, starty, width, height);
  167. m_DrawRegionF = new RectangleF(startx, starty, width, height);
  168. CreateType = cType;
  169. strContent = content;
  170. Name = name;
  171. ID = System.Guid.NewGuid().ToString();
  172. OTSX = -1;
  173. OTSY = -1;
  174. }
  175. public CreateRectangle(RectangleF rect, CreateRectangleType cType)
  176. {
  177. m_Region = new Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height);
  178. m_RegionF = rect;
  179. m_DrawRegionF = rect;
  180. CreateType = cType;
  181. ID = System.Guid.NewGuid().ToString();
  182. startPoint = new PointF(rect.Left, rect.Top);
  183. EndPoint = new PointF(rect.Right, rect.Bottom);
  184. OTSX = -1;
  185. OTSY = -1;
  186. }
  187. public CreateRectangle(RectangleF rect, CreateRectangleType cType, string name)
  188. {
  189. m_Region = new Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height);
  190. m_RegionF = rect;
  191. m_DrawRegionF = rect;
  192. CreateType = cType;
  193. Name = name;
  194. ID = System.Guid.NewGuid().ToString();
  195. OTSX = -1;
  196. OTSY = -1;
  197. }
  198. public CreateRectangle(RectangleF rect, CreateRectangleType cType, ShapeType shape, string name)
  199. {
  200. m_Region = new Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height);
  201. m_RegionF = rect;
  202. m_DrawRegionF = rect;
  203. CreateType = cType;
  204. Name = name;
  205. Shape = shape;
  206. ID = System.Guid.NewGuid().ToString();
  207. OTSX = -1;
  208. OTSY = -1;
  209. }
  210. public CreateRectangle(RectangleF rect, CreateRectangleType cType, ShapeType shape, string name, Color selColor)
  211. {
  212. m_Region = new Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height);
  213. m_RegionF = rect;
  214. m_DrawRegionF = rect;
  215. CreateType = cType;
  216. Name = name;
  217. Shape = shape;
  218. SelColor = selColor;
  219. ID = System.Guid.NewGuid().ToString();
  220. OTSX = -1;
  221. OTSY = -1;
  222. }
  223. public CreateRectangle(RectangleF rectMeasure, CreateRectangleType cType, ShapeType shape, string name, string sampleName, Color selColor)
  224. {
  225. m_Region = new Rectangle((int)rectMeasure.X, (int)rectMeasure.Y, (int)rectMeasure.Width, (int)rectMeasure.Height);
  226. m_RegionF = rectMeasure;
  227. m_DrawRegionF = rectMeasure;
  228. //SampleCenterDifferCenterPoint = sampleCenterDifferPoint;
  229. CreateType = cType;
  230. Name = name;
  231. Shape = shape;
  232. SelColor = selColor;
  233. SampleName = sampleName;
  234. ID = System.Guid.NewGuid().ToString();
  235. OTSX = -1;
  236. OTSY = -1;
  237. }
  238. //绘制帧图
  239. public CreateRectangle(RectangleF rectSingle, CreateRectangleType cType, string name, string sampleName, Color selColor)
  240. {
  241. m_Region = new Rectangle((int)rectSingle.X, (int)rectSingle.Y, (int)rectSingle.Width, (int)rectSingle.Height);
  242. m_RegionF = rectSingle;
  243. m_DrawRegionF = rectSingle;
  244. CreateType = cType;
  245. Name = name;
  246. Shape = 0;
  247. SelColor = selColor;
  248. SampleName = sampleName;
  249. ID = System.Guid.NewGuid().ToString();
  250. OTSX = -1;
  251. OTSY = -1;
  252. }
  253. //绘制帧图
  254. public CreateRectangle(RectangleF rectSingle, int OTSx, int OTSy, CreateRectangleType cType, string name, string sampleName, Color selColor)
  255. {
  256. m_Region = new Rectangle((int)rectSingle.X, (int)rectSingle.Y, (int)rectSingle.Width, (int)rectSingle.Height);
  257. m_RegionF = rectSingle;
  258. m_DrawRegionF = rectSingle;
  259. CreateType = cType;
  260. Name = name;
  261. Shape = 0;
  262. SelColor = selColor;
  263. SampleName = sampleName;
  264. ID = System.Guid.NewGuid().ToString();
  265. OTSX = OTSx;
  266. OTSY = OTSy;
  267. }
  268. /// <summary>
  269. /// 获取样品孔中BSE图像
  270. /// </summary>
  271. /// <param name="rect">位置大小</param>
  272. /// <param name="sampleHoleName">所在样品孔名称</param>
  273. /// <param name="bseImage">图像信息</param>
  274. /// <param name="bseImageWitdh">图像宽度</param>
  275. /// <param name="bseImageHeight">图像高度</param>
  276. /// <param name="drawImageLocation">图像开始位置</param>
  277. /// <param name="cType">绘制类型</param>
  278. public CreateRectangle(RectangleF rect, int OTSx, int OTSy, string sampleName, string sampleHoleName, Image bseImage, float bseImageWitdh, float bseImageHeight, Point drawImageLocation, CreateRectangleType cType)
  279. {
  280. m_Region = new Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height);
  281. m_RegionF = rect;
  282. m_DrawRegionF = rect;
  283. Name = sampleHoleName;
  284. SampleName = sampleName;
  285. //生成编号
  286. ID = System.Guid.NewGuid().ToString();
  287. //图像信息
  288. BSEImage = bseImage;
  289. //图像宽度
  290. BSEImageWitdh = bseImageWitdh;
  291. //图像高度
  292. BSEImageHeight = bseImageHeight;
  293. //图像位置
  294. BSEImageLocation = rect.Location;
  295. OTSX = OTSx;
  296. OTSY = OTSy;
  297. //绘制类型
  298. CreateType = cType;
  299. }
  300. public CreateRectangle(RectangleF rect, Point ImgPoint, float m_Multiple, CreateRectangleType cType)
  301. {
  302. m_Region = new Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height);
  303. m_RegionF.X = m_Region.X - ImgPoint.X * m_Multiple;
  304. m_RegionF.Y = m_Region.Y - ImgPoint.Y * m_Multiple;
  305. m_DrawRegionF = m_Region;
  306. CreateType = cType;
  307. ID = System.Guid.NewGuid().ToString();
  308. startPoint = new PointF(m_Region.Left, m_Region.Top);
  309. EndPoint = new PointF(m_Region.Right, m_Region.Bottom);
  310. OTSX = -1;
  311. OTSY = -1;
  312. }
  313. /// <summary>
  314. /// 获取多边形点集合
  315. /// </summary>
  316. /// <param name="mPoint"></param>
  317. /// <param name="cType"></param>
  318. public CreateRectangle(List<PointF> mPoint, CreateRectangleType cType, ShapeType shape, string name, string sampleName, Color selColor)
  319. {
  320. ID = System.Guid.NewGuid().ToString();
  321. List<Point> PointRegion = new List<Point>();
  322. foreach (var item in mPoint)
  323. {
  324. PointRegion.Add(new Point((int)item.X, (int)item.Y));
  325. }
  326. PolygonPointRegion = PointRegion;
  327. PolygonPointRegionF = mPoint;
  328. List<PointF> DrawPoint = new List<PointF>();
  329. foreach (var item in mPoint)
  330. {
  331. DrawPoint.Add(item);
  332. }
  333. DrawPolygonPointRegionF = DrawPoint;
  334. Name = name;
  335. SampleName = sampleName;
  336. CreateType = cType;
  337. Shape = shape;
  338. SelColor = selColor;
  339. }
  340. #region 变量重写
  341. public override Image BSEImage
  342. {
  343. get { return bseImage; }
  344. set { bseImage = value; }
  345. }
  346. public override float BSEImageWitdh
  347. {
  348. get { return bseImageWidth; }
  349. set { bseImageWidth = value; }
  350. }
  351. public override float BSEImageHeight
  352. {
  353. get { return bseImageHeight; }
  354. set { bseImageHeight = value; }
  355. }
  356. public override PointF BSEImageLocation
  357. {
  358. get { return bseImageLocation; }
  359. set { bseImageLocation = value; }
  360. }
  361. public override Color LineColor
  362. {
  363. get { return lineColor; }
  364. set { lineColor = value; }
  365. }
  366. public override float LineLength
  367. {
  368. get { return lineLength; }
  369. set { lineLength = value; }
  370. }
  371. public override PointF LineStartPoint
  372. {
  373. get { return lineStartPoint; }
  374. set { lineStartPoint = value; }
  375. }
  376. public override PointF SEMCenterPoint
  377. {
  378. get { return semCenterPoint; }
  379. set { semCenterPoint = value; }
  380. }
  381. public override int OTSX
  382. {
  383. get { return otsX; }
  384. set { otsX = value; }
  385. }
  386. public override int OTSY
  387. {
  388. get { return otsY; }
  389. set { otsY = value; }
  390. }
  391. public override CreateRectangleType CreateType
  392. {
  393. get { return createType; }
  394. set { createType = value; }
  395. }
  396. public override ShapeType Shape
  397. {
  398. get { return shape; }
  399. set { shape = value; }
  400. }
  401. public override Color SelColor
  402. {
  403. get { return selColor; }
  404. set { selColor = value; }
  405. }
  406. public override string Name
  407. {
  408. get { return name; }
  409. set { name = value; }
  410. }
  411. public override string ID
  412. {
  413. get { return id; }
  414. set { id = value; }
  415. }
  416. public override string SampleName
  417. {
  418. get { return sampleName; }
  419. set { sampleName = value; }
  420. }
  421. public override int SampleCount
  422. {
  423. get { return sampleCount; }
  424. set { sampleCount = value; }
  425. }
  426. public string StrContent
  427. {
  428. get { return strContent; }
  429. set { strContent = value; }
  430. }
  431. public override Rectangle Region
  432. {
  433. get { return m_Region; }
  434. set { m_Region = value; }
  435. }
  436. public override RectangleF RegionF
  437. {
  438. get { return m_RegionF; }
  439. set { m_RegionF = value; }
  440. }
  441. public override RectangleF DrawRegionF
  442. {
  443. get { return m_DrawRegionF; }
  444. set { m_DrawRegionF = value; }
  445. }
  446. public override List<Point> PolygonPointRegion
  447. {
  448. get { return m_PolygonPointRegion; }
  449. set { m_PolygonPointRegion = value; }
  450. }
  451. public override List<PointF> PolygonPointRegionF
  452. {
  453. get { return m_PolygonPointRegionF; }
  454. set { m_PolygonPointRegionF = value; }
  455. }
  456. public override List<PointF> DrawPolygonPointRegionF
  457. {
  458. get { return m_DrawPolygonPointRegionF; }
  459. set { m_DrawPolygonPointRegionF = value; }
  460. }
  461. public override GraphicsPath GPath
  462. {
  463. get { return g_Path; }
  464. set { g_Path = value; }
  465. }
  466. public override PointF StartPoint
  467. {
  468. get { return startPoint; }
  469. set { startPoint = value; }
  470. }
  471. public override PointF EndPoint
  472. {
  473. get { return endPoint; }
  474. set { endPoint = value; }
  475. }
  476. public override Point GetCenterPoint()
  477. {
  478. Point pCenterPoint = new Point();
  479. //获取在工作窗口中X,Y位置
  480. pCenterPoint.X = (int)(this.Region.X + this.Region.Width / 2);
  481. pCenterPoint.Y = (int)(this.Region.Y + this.Region.Height / 2);
  482. return pCenterPoint;
  483. }
  484. #endregion
  485. public override void OnPaint(PaintEventArgs e)
  486. {
  487. //createType=0 圆角矩形 createType=1 圆形 createType=2 文字
  488. if (createType == CreateRectangleType.SampleBackGround_Rectangle)
  489. {
  490. //获取颜色
  491. string ColorStr = OTSSamplespaceGraphicsPanelFun.GetColorValue(ColorType.RoundRectangleColor);
  492. Color myColor = ColorTranslator.FromHtml(ColorStr);
  493. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  494. GraphicsPath grPath = CreateRoundedRectanglePath(m_Region, 20);
  495. e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
  496. e.Graphics.FillPath(sampleBrush, grPath);
  497. e.Graphics.DrawPath(Pens.Black, grPath);
  498. }
  499. //样品台-圆形
  500. else if (createType == CreateRectangleType.SampleBackGround_Circle)
  501. {
  502. //获取颜色
  503. string ColorStr = OTSSamplespaceGraphicsPanelFun.GetColorValue(ColorType.SampleBackGroundColor);
  504. Color myColor = ColorTranslator.FromHtml(ColorStr);
  505. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  506. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; //图片柔顺模式选择
  507. e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
  508. e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
  509. e.Graphics.FillEllipse(sampleBrush, m_Region);
  510. e.Graphics.DrawEllipse(Pens.Black, m_Region);
  511. }
  512. //圆形
  513. else if (createType == CreateRectangleType.Circle)
  514. {
  515. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(System.Drawing.Color.White);
  516. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; //图片柔顺模式选择
  517. e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
  518. e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
  519. e.Graphics.FillEllipse(sampleBrush, m_Region);
  520. e.Graphics.DrawEllipse(Pens.Black, m_Region);
  521. }
  522. //文字
  523. else if (createType == CreateRectangleType.Text)
  524. {
  525. //设置文字对齐方式
  526. StringFormat sf = new StringFormat();
  527. sf.Alignment = StringAlignment.Center;
  528. sf.LineAlignment = StringAlignment.Center;
  529. //文字颜色
  530. string ColorStr = OTSSamplespaceGraphicsPanelFun.GetColorValue(ColorType.FontColor);
  531. Color myColor = ColorTranslator.FromHtml(ColorStr);
  532. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  533. SolidBrush solidBrush = new SolidBrush(Color.FromArgb(50, Color.Black));
  534. //字体大小 根据样品孔Rectangle大小
  535. float fontSize = m_Region.Width / 4;
  536. Font font = new Font("宋体", fontSize, FontStyle.Regular);
  537. if (fontSize == 0)
  538. {
  539. font = new Font("宋体", fontSize, FontStyle.Regular);
  540. }
  541. //消除锯齿
  542. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; //图片柔顺模式选择
  543. e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
  544. e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
  545. //绘制文字阴影
  546. Rectangle rectFont = m_Region;
  547. rectFont.X += 2;
  548. rectFont.Y += 2;
  549. e.Graphics.DrawString(strContent, font, solidBrush, rectFont, sf);
  550. e.Graphics.DrawString(strContent, font, sampleBrush, m_Region, sf);
  551. }
  552. //矩形
  553. else if (createType == CreateRectangleType.Rectangle)
  554. {
  555. Color myColor = System.Drawing.Color.White;
  556. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  557. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; //图片柔顺模式选择
  558. e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
  559. e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
  560. e.Graphics.FillRectangle(sampleBrush, m_Region);
  561. e.Graphics.DrawRectangle(Pens.Black, m_Region);
  562. }
  563. //选择样品台
  564. else if (createType == CreateRectangleType.SelectSample)
  565. {
  566. Color myColor = selColor;
  567. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  568. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; //图片柔顺模式选择
  569. e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
  570. e.Graphics.CompositingQuality = CompositingQuality.AssumeLinear;//再加一点
  571. if (Shape == 0)
  572. {
  573. e.Graphics.FillEllipse(sampleBrush, m_Region);
  574. e.Graphics.DrawEllipse(Pens.Black, m_Region);
  575. }
  576. else
  577. {
  578. e.Graphics.FillRectangle(sampleBrush, m_Region);
  579. e.Graphics.DrawRectangle(Pens.Black, m_Region);
  580. }
  581. }
  582. //测试区域
  583. else if (createType == CreateRectangleType.MeasureArea)
  584. {
  585. Color myColor = selColor;
  586. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  587. Pen p = new Pen(myColor, 1);
  588. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; //图片柔顺模式选择
  589. e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
  590. e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
  591. GraphicsPath MeasureAreaPath = new GraphicsPath();
  592. if (Shape == 0)
  593. {
  594. MeasureAreaPath.AddEllipse(m_RegionF);
  595. e.Graphics.DrawEllipse(p, m_Region);
  596. }
  597. else
  598. {
  599. MeasureAreaPath.AddRectangle(m_RegionF);
  600. e.Graphics.DrawRectangle(p, m_Region.X, m_Region.Y, m_Region.Width, m_Region.Height);
  601. }
  602. }
  603. //绘制帧图 直线
  604. else if (createType == CreateRectangleType.SingleLine)
  605. {
  606. //设置颜色
  607. string ColorStr = OTSSamplespaceGraphicsPanelFun.GetColorValue(ColorType.SingleColor);
  608. Color myColor = ColorTranslator.FromHtml(ColorStr);
  609. //设置画笔
  610. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  611. Pen pen = new Pen(sampleBrush, 0.0001f);
  612. //未抗锯齿
  613. e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Default;
  614. e.Graphics.InterpolationMode = InterpolationMode.Default;
  615. e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
  616. //设置直线位置与尺寸
  617. PointF startPointF = new PointF(startPoint.X, startPoint.Y);
  618. PointF endPointF = new PointF(endPoint.X, endPoint.Y);
  619. //度量单位
  620. e.Graphics.PageUnit = GraphicsUnit.Display;
  621. e.Graphics.DrawLine(pen, startPointF, endPointF);
  622. }
  623. //绘制标样
  624. else if (createType == CreateRectangleType.SpecimenRectangle)
  625. {
  626. Color myColor = System.Drawing.Color.Black;
  627. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  628. Pen pen = new Pen(sampleBrush, 0.0001f);
  629. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
  630. e.Graphics.DrawRectangle(pen, m_Region);
  631. e.Graphics.FillRectangle(sampleBrush, m_Region);
  632. }
  633. //绘制标样
  634. else if (createType == CreateRectangleType.SpecimenCircle)
  635. {
  636. Color myColor = System.Drawing.Color.Black;
  637. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  638. Pen pen = new Pen(sampleBrush, 0.0001f);
  639. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
  640. e.Graphics.DrawEllipse(pen, m_Region);
  641. e.Graphics.FillEllipse(sampleBrush, m_Region);
  642. }
  643. //绘制帧图
  644. else if (createType == CreateRectangleType.FieldRectangle)
  645. {
  646. Color myColor = SelColor;
  647. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  648. Pen pen = new Pen(sampleBrush, 0.01f);
  649. e.Graphics.SmoothingMode = SmoothingMode.Default;
  650. //设置直线位置与尺寸
  651. PointF startPointF = new PointF(m_RegionF.Left, m_RegionF.Top);
  652. PointF endPointF = new PointF(m_RegionF.Right, m_RegionF.Bottom);
  653. //绘制帧图
  654. e.Graphics.DrawRectangle(pen, startPointF.X, startPointF.Y, endPointF.X - startPointF.X, endPointF.Y - startPointF.Y);
  655. }
  656. //绘制颗粒
  657. else if (createType == CreateRectangleType.ParticleLine)
  658. {
  659. Color myColor = LineColor;
  660. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  661. Pen pen = new Pen(sampleBrush, 0.01f);
  662. e.Graphics.SmoothingMode = SmoothingMode.Default;
  663. //设置直线位置与长度
  664. PointF startPointF = LineStartPoint;
  665. float length = LineLength;
  666. PointF endPointF = new PointF(startPointF.X + length, startPointF.Y);
  667. e.Graphics.DrawLine(pen, startPointF, endPointF);
  668. }
  669. //矩形
  670. else if (createType == CreateRectangleType.ParticleAreaRectangle)
  671. {
  672. Color myColor = System.Drawing.Color.White;
  673. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  674. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; //图片柔顺模式选择
  675. e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
  676. e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
  677. e.Graphics.DrawRectangle(Pens.Black, m_Region);
  678. }
  679. //绘制样品孔BSE图像
  680. else if (createType == CreateRectangleType.DrawSampleHoleBSEImage)
  681. {
  682. Color myColor = System.Drawing.Color.White;
  683. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  684. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; //图片柔顺模式选择
  685. e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
  686. e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
  687. //设置直线位置与尺寸
  688. PointF startPointF = new PointF(m_RegionF.Left, m_RegionF.Top);
  689. PointF endPointF = new PointF(m_RegionF.Right + 2, m_RegionF.Bottom + 2);
  690. //绘制样品孔中图像信息
  691. if (BSEImage != null)
  692. {
  693. e.Graphics.DrawImage(BSEImage, startPointF.X, startPointF.Y, endPointF.X - startPointF.X, endPointF.Y - startPointF.Y);
  694. }
  695. }
  696. else if (createType == CreateRectangleType.DrawSEMCenterPoint)
  697. {
  698. Color myColor = System.Drawing.Color.Red;
  699. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  700. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; //图片柔顺模式选择
  701. e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
  702. e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
  703. //X轴线
  704. PointF startPointX = semCenterPoint;
  705. startPointX.X = startPointX.X - 3;
  706. PointF endPointX = semCenterPoint;
  707. endPointX.X = endPointX.X + 3;
  708. //Y轴线
  709. PointF startPointY = semCenterPoint;
  710. startPointY.Y = startPointY.Y - 3;
  711. PointF endPointY = semCenterPoint;
  712. endPointY.Y = endPointY.Y + 3;
  713. //绘制XY轴交叉线+
  714. Pen pen = new Pen(sampleBrush, 0.0001f);
  715. e.Graphics.DrawLine(pen, startPointX, endPointX);
  716. e.Graphics.DrawLine(pen, startPointY, endPointY);
  717. }
  718. //绘制BSE标记
  719. else if (createType == CreateRectangleType.DrawBSEElementSignPoint)
  720. {
  721. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Green);
  722. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; //图片柔顺模式选择
  723. e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
  724. e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
  725. Pen pen = new Pen(sampleBrush, 2f);
  726. int X = (int)m_DrawRegionF.X;
  727. int Y = (int)m_DrawRegionF.Y;
  728. e.Graphics.DrawLine(pen, new Point(X-8,Y), new Point(X+8, Y));
  729. e.Graphics.DrawLine(pen, new Point(X, Y-8), new Point(X, Y+8));
  730. }
  731. //绘制多边形测量区域
  732. else if (createType == CreateRectangleType.Polygon)
  733. {
  734. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; //图片柔顺模式选择
  735. e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
  736. e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
  737. Color myColor = selColor;
  738. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  739. Pen pen = new Pen(myColor, 1);
  740. if (PolygonPointRegionF.Count > 0)
  741. {
  742. List<PointF> PolygonPointF = new List<PointF>();
  743. foreach (var item in PolygonPointRegionF)
  744. {
  745. PolygonPointF.Add(item);
  746. }
  747. if (EndPoint.X != 0 && EndPoint.Y != 0)
  748. {
  749. PolygonPointF.Add(EndPoint);
  750. }
  751. try
  752. {
  753. e.Graphics.DrawLines(pen, PolygonPointF.ToArray());
  754. //多边形的外接矩形
  755. //if (Region != null)
  756. //{
  757. // e.Graphics.DrawRectangle(new Pen(Color.Green), Region);
  758. //}
  759. }
  760. catch (Exception)
  761. {
  762. }
  763. }
  764. }//多边形测量区域完成标识
  765. else if (createType == CreateRectangleType.DrawPolygonFinish)
  766. {
  767. Color myColor = selColor;
  768. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  769. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; //图片柔顺模式选择
  770. e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
  771. e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
  772. Pen pen = new Pen(myColor, 1);
  773. e.Graphics.DrawRectangle(pen, m_Region);
  774. }
  775. //绘制多边形测量区域
  776. else if (createType == CreateRectangleType.CircleByThreePoints)
  777. {
  778. Color myColor = selColor;
  779. System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
  780. Pen p = new Pen(myColor, 1);
  781. e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; //图片柔顺模式选择
  782. e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
  783. e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
  784. GraphicsPath MeasureAreaPath = new GraphicsPath();
  785. MeasureAreaPath.AddEllipse(m_RegionF);
  786. e.Graphics.DrawEllipse(p, m_Region);
  787. }
  788. }
  789. public override bool IsDragging
  790. {
  791. get { return m_IsDragging; }
  792. set { m_IsDragging = value; }
  793. }
  794. public override bool IsSelect
  795. {
  796. get { return m_IsSelect; }
  797. set { m_IsSelect = value; }
  798. }
  799. //public override bool IsSingle
  800. //{
  801. // get { return m_IsSingle; }
  802. // set { m_IsSingle = value; }
  803. //}
  804. public override bool IsWorkSample
  805. {
  806. get { return m_IsWorkSample; }
  807. set { m_IsWorkSample = value; }
  808. }
  809. public override Point DraggingPoint
  810. {
  811. get { return m_DraggingPoint; }
  812. set { m_DraggingPoint = value; }
  813. }
  814. #region 画圆角矩形
  815. internal static GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int cornerRadius)
  816. {
  817. GraphicsPath roundedRect = new GraphicsPath();
  818. roundedRect.AddArc(rect.X, rect.Y, cornerRadius * 2, cornerRadius * 2, 180, 90);
  819. roundedRect.AddLine(rect.X + cornerRadius, rect.Y, rect.Right - cornerRadius * 2, rect.Y);
  820. roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y, cornerRadius * 2, cornerRadius * 2, 270, 90);
  821. roundedRect.AddLine(rect.Right, rect.Y + cornerRadius * 2, rect.Right, rect.Y + rect.Height - cornerRadius * 2);
  822. roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y + rect.Height - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 0, 90);
  823. roundedRect.AddLine(rect.Right - cornerRadius * 2, rect.Bottom, rect.X + cornerRadius * 2, rect.Bottom);
  824. roundedRect.AddArc(rect.X, rect.Bottom - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 90, 90);
  825. roundedRect.AddLine(rect.X, rect.Bottom - cornerRadius * 2, rect.X, rect.Y + cornerRadius * 2);
  826. roundedRect.CloseFigure();
  827. return roundedRect;
  828. }
  829. public override bool IfContains(Point mousePoint)
  830. {
  831. if (mousePoint.X > Region.Left && mousePoint.X < Region.Left + Region.Width)
  832. {
  833. if (mousePoint.Y >Region.Top && mousePoint.Y <Region.Top + Region.Height)
  834. {
  835. return true;
  836. }
  837. }
  838. return false;
  839. }
  840. #endregion
  841. //是否设置为选择样品
  842. private bool m_IsSelect;
  843. //是否存在帧图信息
  844. private bool m_IsSingle;
  845. //是否设置为拖动
  846. private bool m_IsDragging;
  847. //是否为工作样品
  848. private bool m_IsWorkSample;
  849. private CreateRectangleType createType;
  850. private ShapeType shape;
  851. private string id;
  852. private string name;
  853. public string sampleName;
  854. //样品孔中样品的数量
  855. public int sampleCount = 0;
  856. public string strContent;
  857. private Color selColor;
  858. private Point m_DraggingPoint;
  859. private Rectangle m_Region;
  860. private RectangleF m_RegionF;
  861. //绘制时与移动缩放时记录的位置与尺寸
  862. private RectangleF m_DrawRegionF;
  863. private GraphicsPath g_Path;
  864. private PointF startPoint;
  865. private PointF endPoint;
  866. //private PointF sampleCenterDifferCenterPoint;
  867. //绘制颗粒图
  868. private Color lineColor;
  869. private float lineLength;
  870. private PointF lineStartPoint;
  871. private int otsX;
  872. private int otsY;
  873. //绘制样品孔BSE图像
  874. private Image bseImage;
  875. //绘制样品孔BSE图像宽度
  876. private float bseImageWidth;
  877. //绘制样品孔BSE图像高度
  878. private float bseImageHeight;
  879. //绘制样品孔BSE图像位置
  880. private PointF bseImageLocation;
  881. //绘制SEM中心位置
  882. private PointF semCenterPoint;
  883. //
  884. private List<Point> m_PolygonPointRegion;
  885. private List<PointF> m_PolygonPointRegionF;
  886. //绘制时与移动缩放时记录的位置
  887. private List<PointF> m_DrawPolygonPointRegionF;
  888. }
  889. public enum SEMControlIndex
  890. {
  891. Magnification=0,
  892. WorkingDistance=1
  893. }
  894. public enum XYIndex
  895. {
  896. X = 0,
  897. Y = 1
  898. }
  899. //public enum IndexNum
  900. //{
  901. // First = 0,
  902. // Second = 1
  903. //}
  904. public enum CreateRectangleType
  905. {
  906. //样品台-圆形
  907. SampleBackGround_Circle = -1,
  908. //圆形
  909. Circle = 0,
  910. //圆角矩形
  911. SampleBackGround_Rectangle = 1,
  912. //样品孔中的文字
  913. Text = 2,
  914. //矩形
  915. Rectangle = 3,
  916. //选择的样品
  917. SelectSample = 4,
  918. //测量区域
  919. MeasureArea = 5,
  920. //帧图-直线绘制方式
  921. SingleLine = 6,
  922. //表样-矩形
  923. SpecimenRectangle = 7,
  924. //表样-圆形
  925. SpecimenCircle = 8,
  926. //帧图-矩形绘制
  927. FieldRectangle = 9,
  928. //颗粒直线图
  929. ParticleLine = 10,
  930. //颗粒分布图 鼠标
  931. ParticleAreaRectangle = 11,
  932. //绘制拍摄样品孔BSE照片
  933. DrawSampleHoleBSEImage = 12,
  934. //绘制sem中心点+
  935. DrawSEMCenterPoint=13,
  936. //绘制BSE采集标记
  937. DrawBSEElementSignPoint = 14,
  938. //多边形
  939. Polygon = 15,
  940. //多边形完成标识
  941. DrawPolygonFinish = 16,
  942. //圆形三点法
  943. CircleByThreePoints=17
  944. }
  945. public enum ContextMenuType
  946. {
  947. //样品孔右键菜单
  948. SampleHoleMenu = 0,
  949. //样品右键菜单
  950. SampleMenu = 1,
  951. //测量区域右键菜单
  952. MeasureMenu = 2,
  953. //线程运行后菜单
  954. ThreadRunMenu = 3,
  955. //样品台右键菜单
  956. SampleStateMenu = 4,
  957. //样品孔BSE图像
  958. SampleHoleBSEImage = 5,
  959. //帧图菜单
  960. FieldMenu = 6
  961. }
  962. public enum MeasureStateMenuType
  963. {
  964. //获取BSE图
  965. ReadBSEPic = 0,
  966. //设置可视化灰度
  967. SetVisualGray = 1,
  968. //显示BSE灰度曲线图
  969. SetVisualGrayForSpecialGray=2,
  970. grayToolStripMenuItem =4,
  971. //切换至BSE图
  972. ChangeDiffImageShow = 5,
  973. //BSE去背景图
  974. DelBSEBG =6,
  975. //显示BSE去背景灰度曲线图
  976. SampleHoleBSEImage = 7,
  977. //线扫描曲线
  978. MenuItemLineScam = 9,
  979. //单点采集Xray与元素信息
  980. PointScanElementMenuItem = 10,
  981. //导出采集信息报告
  982. ExportReport =11
  983. }
  984. public enum MenuIndex
  985. {
  986. AddSample = 0,
  987. DeleteSample = 1,
  988. SampleStripSeparator = 2,
  989. ReadSEMData = 3,
  990. SetSemData = 4,
  991. SetSEMCenterLocation = 5,
  992. DriveSEMToCenterLocation = 6,
  993. DriveSEMToCurrentLocation = 7,
  994. SEMStripSeparator = 8,
  995. ShootBSEPicture = 9,
  996. DeleteBSEPicture = 10,
  997. SlopFocus=11
  998. }
  999. public enum ColorType
  1000. {
  1001. SingleColor,//帧图fd8f8f
  1002. RoundRectangleColor,//c8c8c8圆角矩形
  1003. SampleBackGroundColor,//c0c0c0圆角矩形
  1004. FontColor,//90ee90文字颜色
  1005. SampleColor,//f4f4f4 样品未选择
  1006. SampleSelColor//505050 样品选择后
  1007. }
  1008. public enum GrayLevel
  1009. {
  1010. Min=0,
  1011. Max=255
  1012. }
  1013. }