RadialScale.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638
  1. using System;
  2. using System.Drawing;
  3. using System.Drawing.Drawing2D;
  4. using System.ComponentModel;
  5. using FastReport.Utils;
  6. namespace FastReport.Gauge.Radial
  7. {
  8. /// <summary>
  9. /// Represents a linear scale.
  10. /// </summary>
  11. #if !DEBUG
  12. [DesignTimeVisible(false)]
  13. #endif
  14. public class RadialScale : GaugeScale
  15. {
  16. #region Fields
  17. private float left;
  18. private float top;
  19. private float height;
  20. private float width;
  21. private float majorTicksOffset;
  22. private float minorTicksOffset;
  23. private PointF avrTick;
  24. private double stepValue;
  25. private PointF center;
  26. private double avrValue;
  27. private float majorStep;
  28. private float minorStep;
  29. private int sideTicksCount;
  30. private bool drawRight, drawLeft;
  31. #endregion // Fields
  32. #region Enums
  33. private enum HorAlign
  34. {
  35. Middle,
  36. Left,
  37. Right
  38. }
  39. private enum VertAlign
  40. {
  41. Bottom,
  42. Middle,
  43. Top
  44. }
  45. #endregion //Enums
  46. #region Properties
  47. [Browsable(false)]
  48. internal PointF AvrTick
  49. {
  50. get { return avrTick; }
  51. }
  52. [Browsable(false)]
  53. internal double StepValue
  54. {
  55. get { return stepValue; }
  56. set { stepValue = value; }
  57. }
  58. [Browsable(false)]
  59. internal double AverageValue
  60. {
  61. get { return avrValue; }
  62. set { avrValue = value; }
  63. }
  64. internal float MajorStep
  65. {
  66. get { return majorStep; }
  67. set { majorStep = value; }
  68. }
  69. #endregion // Properties
  70. #region Constructors
  71. /// <summary>
  72. /// Initializes a new instance of the <see cref="RadialScale"/> class.
  73. /// </summary>
  74. /// <param name="parent">The parent gauge object.</param>
  75. public RadialScale(RadialGauge parent) : base(parent)
  76. {
  77. MajorTicks = new ScaleTicks(5, 2, Color.Black, 11);
  78. MinorTicks = new ScaleTicks(2, 1, Color.Black, 4);
  79. majorStep = 27; //degree, 135/5
  80. minorStep = 5.4f; // degree, 27/5
  81. drawRight = true;
  82. drawLeft = true;
  83. }
  84. #endregion // Constructors
  85. #region Private Methods
  86. private bool isNegative(int i, bool isRightPart)
  87. {
  88. if (RadialUtils.IsSemicircle(Parent) || RadialUtils.IsQuadrant(Parent))
  89. {
  90. if (i <= sideTicksCount / 2)
  91. {
  92. if(isRightPart)
  93. {
  94. if (RadialUtils.IsBottom(Parent) && RadialUtils.IsLeft(Parent))
  95. {
  96. return false;
  97. }
  98. else if (RadialUtils.IsBottom(Parent))
  99. return false;
  100. else if (RadialUtils.IsLeft(Parent))
  101. return true;
  102. else if (RadialUtils.IsRight(Parent))
  103. return true; //!!!!!!!!!!!!!!!!!!
  104. else return true; //Check!!!!
  105. }
  106. else
  107. {
  108. if(RadialUtils.IsTop(Parent) && RadialUtils.IsLeft(Parent))
  109. {
  110. return true;
  111. }
  112. else if (RadialUtils.IsBottom(Parent))
  113. return false;
  114. else if (RadialUtils.IsLeft(Parent))
  115. return false;
  116. else if (RadialUtils.IsRight(Parent))
  117. return false; //!!!!!!!!!!!!!!!!!!
  118. else return true; //Check!!!!
  119. }
  120. }
  121. return false; //shouldn't be reached
  122. }
  123. else if (i > sideTicksCount / 2)
  124. return false;
  125. else return true;
  126. }
  127. private void DrawText(FRPaintEventArgs e, string text, Brush brush, float x, float y, HorAlign hAlign, VertAlign vAlign)
  128. {
  129. IGraphics g = e.Graphics;
  130. Font font = RadialUtils.GetFont(e, Parent, Font);
  131. SizeF strSize = RadialUtils.GetStringSize(e, Parent, Font, text);
  132. float dx = 0;
  133. float dy = 0;
  134. if (hAlign == HorAlign.Middle)
  135. dx = -strSize.Width / 2;
  136. else if (hAlign == HorAlign.Left)
  137. dx = 0;
  138. else if (hAlign == HorAlign.Right)
  139. dx = -strSize.Width;
  140. if (vAlign == VertAlign.Bottom)
  141. dy = -strSize.Height;
  142. else if (vAlign == VertAlign.Middle)
  143. dy = -strSize.Height / 2;
  144. else if (vAlign == VertAlign.Top)
  145. dy = 0;
  146. g.DrawString(text, font, brush, x + dx, y + dy);
  147. }
  148. private PointF GetTextPoint(PointF[] tick, float txtOffset, bool negativ, bool isRight)
  149. {
  150. float dx = Math.Abs(tick[1].X - tick[0].X);
  151. float dy = Math.Abs(tick[1].Y - tick[0].Y);
  152. float absA = (float)Math.Sqrt(Math.Pow(dx, 2) + Math.Pow(dy, 2)); //vectors length
  153. float sinAlpha = dy / absA;
  154. float cosAlpha = dx / absA;
  155. float absA1 = absA + txtOffset;
  156. float dx1 = Math.Abs(absA1 * cosAlpha);
  157. float dy1 = Math.Abs(absA1 * sinAlpha);
  158. float pointX;
  159. float pointY;
  160. if (negativ)
  161. pointY = tick[1].Y - dy1;
  162. else
  163. pointY = tick[1].Y + dy1;
  164. if (isRight)
  165. pointX = tick[1].X + dx1;
  166. else
  167. pointX = tick[1].X - dx1;
  168. return new PointF(pointX, pointY);
  169. }
  170. private void DrawMajorTicks(FRPaintEventArgs e)
  171. {
  172. center = (Parent as RadialGauge).Center;
  173. stepValue = (Parent.Maximum - Parent.Minimum) / (MajorTicks.Count - 1);
  174. if (RadialUtils.IsQuadrant(Parent))
  175. stepValue *= 2;
  176. avrValue = Parent.Minimum + (Parent.Maximum - Parent.Minimum) / 2;
  177. bool isRightPart = true;
  178. bool isLeftPart = false;
  179. PointF txtPoint;
  180. IGraphics g = e.Graphics;
  181. Pen pen = e.Cache.GetPen(MajorTicks.Color, MajorTicks.Width * e.ScaleX, DashStyle.Solid);
  182. Brush brush = TextFill.CreateBrush(new RectangleF(Parent.AbsLeft * e.ScaleX, Parent.AbsTop * e.ScaleY,
  183. Parent.Width * e.ScaleX, Parent.Height * e.ScaleY), e.ScaleX, e.ScaleY);
  184. sideTicksCount = (MajorTicks.Count - 1) / 2;
  185. MajorTicks.Length = width / 12;
  186. SizeF maxTxt = RadialUtils.GetStringSize(e, Parent, Font, Parent.Maximum.ToString());
  187. SizeF minTxt = RadialUtils.GetStringSize(e, Parent, Font, Parent.Minimum.ToString());
  188. float maxTxtOffset = maxTxt.Height > maxTxt.Width ? maxTxt.Height : maxTxt.Width;
  189. float minTxtOffset = minTxt.Height > minTxt.Width ? minTxt.Height : minTxt.Width;
  190. majorTicksOffset = maxTxtOffset > minTxtOffset ? maxTxtOffset : minTxtOffset;
  191. PointF[] tick0 = new PointF[2];
  192. avrTick = new PointF(left + width / 2, top + majorTicksOffset);
  193. //first tick
  194. tick0[0] = avrTick;
  195. tick0[1] = new PointF(tick0[0].X, tick0[0].Y + MajorTicks.Length);
  196. double angle = 0;
  197. HorAlign horAlign = HorAlign.Middle;
  198. VertAlign vertAlign = VertAlign.Bottom;
  199. double startValue = avrValue;
  200. if (RadialUtils.IsSemicircle(Parent))
  201. {
  202. drawRight = true;
  203. drawLeft = true;
  204. if (RadialUtils.IsBottom(Parent))
  205. {
  206. angle = 180 * RadialGauge.Radians;
  207. horAlign = HorAlign.Middle;
  208. vertAlign = VertAlign.Top;
  209. majorStep *= -1;
  210. isRightPart = true;
  211. isLeftPart = false;
  212. }
  213. else if (RadialUtils.IsLeft(Parent))
  214. {
  215. angle = -90 * RadialGauge.Radians;
  216. horAlign = HorAlign.Right;
  217. vertAlign = VertAlign.Middle;
  218. isRightPart = false;
  219. isLeftPart = false;
  220. }
  221. else if (RadialUtils.IsRight(Parent))
  222. {
  223. angle = 90 * RadialGauge.Radians;
  224. horAlign = HorAlign.Left;
  225. vertAlign = VertAlign.Middle;
  226. majorStep *= -1;
  227. isRightPart = true; //false
  228. isLeftPart = true; // false
  229. }
  230. }
  231. else if (RadialUtils.IsQuadrant(Parent))
  232. {
  233. if (RadialUtils.IsTop(Parent) && RadialUtils.IsLeft(Parent))
  234. {
  235. startValue = Parent.Maximum;
  236. //angle = 180 * RadialGauge.Radians;
  237. horAlign = HorAlign.Middle;
  238. vertAlign = VertAlign.Bottom;
  239. //majorStep *= -1;
  240. //isRightPart = true;
  241. //isLeftPart = false;
  242. drawRight = false;
  243. drawLeft = true;
  244. isRightPart = false;
  245. isLeftPart = false;
  246. }
  247. else if (RadialUtils.IsBottom(Parent) && RadialUtils.IsLeft(Parent))
  248. {
  249. startValue = Parent.Minimum;
  250. angle = 180 * RadialGauge.Radians;
  251. horAlign = HorAlign.Middle;
  252. vertAlign = VertAlign.Top;
  253. drawRight = true;
  254. drawLeft = false;
  255. isRightPart = false;
  256. isLeftPart = false;
  257. }
  258. else if (RadialUtils.IsTop(Parent) && RadialUtils.IsRight(Parent))
  259. {
  260. stepValue *= -1;
  261. startValue = Parent.Maximum;
  262. angle = 0;
  263. horAlign = HorAlign.Middle;
  264. vertAlign = VertAlign.Bottom;
  265. drawRight = true;
  266. drawLeft = false;
  267. isRightPart = true;
  268. isLeftPart = true;
  269. }
  270. else if (RadialUtils.IsBottom(Parent) && RadialUtils.IsRight(Parent))
  271. {
  272. stepValue *= -1;
  273. startValue = Parent.Minimum;
  274. angle = 180 * RadialGauge.Radians;
  275. horAlign = HorAlign.Middle;
  276. vertAlign = VertAlign.Top;
  277. drawRight = false;
  278. drawLeft = true;
  279. isRightPart = true;
  280. isLeftPart = true;
  281. }
  282. }
  283. else
  284. {
  285. drawRight = true;
  286. drawLeft = true;
  287. }
  288. tick0 = RadialUtils.RotateVector(tick0, angle, center);
  289. g.DrawLine(pen, tick0[0].X, tick0[0].Y, tick0[1].X, tick0[1].Y);
  290. string text = startValue.ToString();
  291. DrawText(e, text, brush, tick0[0].X, tick0[0].Y, horAlign, vertAlign);
  292. //rest of ticks
  293. PointF[] tick = new PointF[2];
  294. angle = majorStep * RadialGauge.Radians;
  295. for (int i = 0; i < sideTicksCount; i++)
  296. {
  297. //right side
  298. if(drawRight)
  299. {
  300. tick = RadialUtils.RotateVector(tick0, angle, center);
  301. g.DrawLine(pen, tick[0].X, tick[0].Y, tick[1].X, tick[1].Y);
  302. text = Convert.ToString(Math.Round(startValue + stepValue * (i + 1)));
  303. if (i == sideTicksCount / 2)
  304. {
  305. if (RadialUtils.IsSemicircle(Parent) || RadialUtils.IsQuadrant(Parent))
  306. {
  307. if(RadialUtils.IsLeft(Parent) && RadialUtils.IsTop(Parent))
  308. {
  309. horAlign = HorAlign.Right;
  310. vertAlign = VertAlign.Middle;
  311. }
  312. else if(RadialUtils.IsLeft(Parent) && RadialUtils.IsBottom(Parent))
  313. {
  314. horAlign = HorAlign.Right;
  315. vertAlign = VertAlign.Middle;
  316. }
  317. else if (RadialUtils.IsRight(Parent) && RadialUtils.IsTop(Parent))
  318. {
  319. horAlign = HorAlign.Left;
  320. vertAlign = VertAlign.Middle;
  321. }
  322. else if (RadialUtils.IsLeft(Parent))
  323. {
  324. horAlign = HorAlign.Middle;
  325. vertAlign = VertAlign.Bottom;
  326. }
  327. else if (RadialUtils.IsRight(Parent))
  328. {
  329. horAlign = HorAlign.Middle;
  330. vertAlign = VertAlign.Bottom;
  331. }
  332. else
  333. {
  334. horAlign = HorAlign.Left;
  335. vertAlign = VertAlign.Middle;
  336. }
  337. }
  338. else
  339. {
  340. horAlign = HorAlign.Left;
  341. vertAlign = VertAlign.Middle;
  342. }
  343. }
  344. else if (i < sideTicksCount / 2)
  345. {
  346. horAlign = HorAlign.Left;
  347. if (RadialUtils.IsSemicircle(Parent) || RadialUtils.IsQuadrant(Parent))
  348. {
  349. if (RadialUtils.IsLeft(Parent) && RadialUtils.IsTop(Parent))
  350. {
  351. horAlign = HorAlign.Right;
  352. vertAlign = VertAlign.Middle;
  353. }
  354. if (RadialUtils.IsLeft(Parent) && RadialUtils.IsBottom(Parent))
  355. {
  356. vertAlign = VertAlign.Top;
  357. horAlign = HorAlign.Right;
  358. }
  359. else if (RadialUtils.IsBottom(Parent))
  360. vertAlign = VertAlign.Top;
  361. else if (RadialUtils.IsLeft(Parent))
  362. {
  363. horAlign = HorAlign.Right;
  364. vertAlign = VertAlign.Bottom;
  365. }
  366. else if (RadialUtils.IsRight(Parent))
  367. {
  368. horAlign = HorAlign.Left;
  369. vertAlign = VertAlign.Bottom;
  370. }
  371. }
  372. else
  373. vertAlign = VertAlign.Bottom;
  374. }
  375. else
  376. {
  377. horAlign = HorAlign.Left;
  378. vertAlign = VertAlign.Top;
  379. }
  380. txtPoint = GetTextPoint(tick, -1 * e.ScaleX, isNegative(i, true), isRightPart);
  381. DrawText(e, text, brush, txtPoint.X, txtPoint.Y, horAlign, vertAlign);
  382. }
  383. if(drawLeft)
  384. {
  385. //left side
  386. angle *= -1;
  387. tick = RadialUtils.RotateVector(tick0, angle, center);
  388. g.DrawLine(pen, tick[0].X, tick[0].Y, tick[1].X, tick[1].Y);
  389. text = Convert.ToString(Math.Round(startValue - stepValue * (i + 1)));
  390. if (i == sideTicksCount / 2)
  391. {
  392. if (RadialUtils.IsSemicircle(Parent) || RadialUtils.IsQuadrant(Parent))
  393. {
  394. if ((RadialUtils.IsTop(Parent) || RadialUtils.IsBottom(Parent)) && RadialUtils.IsSemicircle(Parent))
  395. {
  396. horAlign = HorAlign.Right;
  397. vertAlign = VertAlign.Middle;
  398. }
  399. else if (RadialUtils.IsLeft(Parent) && RadialUtils.IsTop(Parent))
  400. {
  401. horAlign = HorAlign.Right;
  402. vertAlign = VertAlign.Middle;
  403. }
  404. else if (RadialUtils.IsRight(Parent) && RadialUtils.IsBottom(Parent))
  405. {
  406. horAlign = HorAlign.Left;
  407. vertAlign = VertAlign.Middle;
  408. }
  409. else if (RadialUtils.IsLeft(Parent))
  410. {
  411. horAlign = HorAlign.Middle;
  412. vertAlign = VertAlign.Top;
  413. }
  414. else if (RadialUtils.IsRight(Parent))
  415. {
  416. horAlign = HorAlign.Middle;
  417. vertAlign = VertAlign.Top;
  418. }
  419. }
  420. else
  421. {
  422. horAlign = HorAlign.Right;
  423. vertAlign = VertAlign.Middle;
  424. }
  425. }
  426. else if (i < sideTicksCount / 2)
  427. {
  428. horAlign = HorAlign.Right;
  429. if (RadialUtils.IsSemicircle(Parent) || RadialUtils.IsQuadrant(Parent))
  430. {
  431. if (RadialUtils.IsRight(Parent) && RadialUtils.IsBottom(Parent))
  432. {
  433. vertAlign = VertAlign.Top;
  434. horAlign = HorAlign.Left;
  435. }
  436. else if (RadialUtils.IsTop(Parent) && RadialUtils.IsLeft(Parent))
  437. {
  438. vertAlign = VertAlign.Bottom;
  439. horAlign = HorAlign.Right;
  440. }
  441. else if (RadialUtils.IsBottom(Parent))
  442. vertAlign = VertAlign.Top;
  443. else if (RadialUtils.IsLeft(Parent))
  444. {
  445. horAlign = HorAlign.Right;
  446. vertAlign = VertAlign.Top;
  447. }
  448. else if (RadialUtils.IsRight(Parent))
  449. {
  450. horAlign = HorAlign.Left;
  451. vertAlign = VertAlign.Top;
  452. }
  453. }
  454. else
  455. vertAlign = VertAlign.Bottom;
  456. }
  457. else
  458. {
  459. horAlign = HorAlign.Right;
  460. vertAlign = VertAlign.Top;
  461. }
  462. txtPoint = GetTextPoint(tick, -1 * e.ScaleX, isNegative(i, false), isLeftPart);
  463. DrawText(e, text, brush, txtPoint.X, txtPoint.Y, horAlign, vertAlign);
  464. angle *= -1;
  465. }
  466. angle += majorStep * RadialGauge.Radians;
  467. }
  468. }
  469. private void DrawMinorTicks(FRPaintEventArgs e)
  470. {
  471. IGraphics g = e.Graphics;
  472. Pen pen = e.Cache.GetPen(MinorTicks.Color, MinorTicks.Width * e.ScaleX, DashStyle.Solid);
  473. MinorTicks.Length = width / 24;
  474. minorTicksOffset = majorTicksOffset + MajorTicks.Length / 2 - MinorTicks.Length / 2;
  475. PointF center = new PointF(left + width / 2, top + height / 2);
  476. PointF[] tick0 = new PointF[2];
  477. //first tick
  478. tick0[0] = new PointF(left + width / 2, top + minorTicksOffset);
  479. tick0[1] = new PointF(tick0[0].X, tick0[0].Y + MinorTicks.Length);
  480. double angle = 0;
  481. if (RadialUtils.IsSemicircle(Parent) || RadialUtils.IsQuadrant(Parent) )
  482. {
  483. if (RadialUtils.IsBottom(Parent) && RadialUtils.IsLeft(Parent))
  484. {
  485. angle = -180 * RadialGauge.Radians;
  486. }
  487. else if (RadialUtils.IsTop(Parent) && RadialUtils.IsLeft(Parent))
  488. {
  489. angle = 0;
  490. }
  491. else if (RadialUtils.IsTop(Parent) && RadialUtils.IsRight(Parent))
  492. {
  493. angle = 0;
  494. }
  495. else if (RadialUtils.IsBottom(Parent))
  496. {
  497. angle = 180 * RadialGauge.Radians;
  498. majorStep *= -1;
  499. }
  500. else if (RadialUtils.IsLeft(Parent))
  501. {
  502. angle = -90 * RadialGauge.Radians;
  503. }
  504. else if (RadialUtils.IsRight(Parent))
  505. {
  506. angle = 90 * RadialGauge.Radians;
  507. majorStep *= -1;
  508. }
  509. }
  510. tick0 = RadialUtils.RotateVector(tick0, angle, center);
  511. //rest of ticks
  512. PointF[] tick = new PointF[2];
  513. angle = minorStep * RadialGauge.Radians;
  514. for (int i = 0; i < MajorTicks.Count / 2 * (MinorTicks.Count + 1); i++)
  515. {
  516. if ((i + 1) % (MinorTicks.Count + 1) != 0)
  517. {
  518. if (drawRight)
  519. {
  520. tick = RadialUtils.RotateVector(tick0, angle, center);
  521. g.DrawLine(pen, tick[0].X, tick[0].Y, tick[1].X, tick[1].Y);
  522. }
  523. if (drawLeft)
  524. {
  525. angle *= -1;
  526. tick = RadialUtils.RotateVector(tick0, angle, center);
  527. g.DrawLine(pen, tick[0].X, tick[0].Y, tick[1].X, tick[1].Y);
  528. angle *= -1;
  529. }
  530. }
  531. angle += minorStep * RadialGauge.Radians;
  532. }
  533. }
  534. #endregion // Private Methods
  535. #region Public Methods
  536. /// <inheritdoc/>
  537. public override void Assign(GaugeScale src)
  538. {
  539. base.Assign(src);
  540. RadialScale s = src as RadialScale;
  541. MajorTicks.Assign(s.MajorTicks);
  542. MinorTicks.Assign(s.MinorTicks);
  543. }
  544. /// <inheritdoc/>
  545. public override void Draw(FRPaintEventArgs e)
  546. {
  547. base.Draw(e);
  548. if ((Parent as RadialGauge).Type == RadialGaugeType.Circle)
  549. {
  550. MajorTicks.Count = 11;
  551. MinorTicks.Count = 4;
  552. majorStep = 135f / 5;
  553. minorStep = 135f / 5f / 5f;
  554. }
  555. else if ((Parent as RadialGauge).Type == RadialGaugeType.Semicircle)
  556. {
  557. MajorTicks.Count = 5;
  558. MinorTicks.Count = 3;
  559. majorStep = 90f / 2;
  560. minorStep = 90f / 2 / 4;
  561. }
  562. else if ((Parent as RadialGauge).Type == RadialGaugeType.Quadrant)
  563. {
  564. MajorTicks.Count = 5;
  565. MinorTicks.Count = 3;
  566. majorStep = 90f / 2;
  567. minorStep = 90f / 2 / 4;
  568. }
  569. left = Parent.AbsLeft * e.ScaleX;
  570. top = Parent.AbsTop * e.ScaleY;
  571. height = Parent.Height * e.ScaleY;
  572. width = Parent.Width * e.ScaleX;
  573. DrawMajorTicks(e);
  574. DrawMinorTicks(e);
  575. }
  576. /// <inheritdoc/>
  577. public override void Serialize(FRWriter writer, string prefix, GaugeScale diff)
  578. {
  579. base.Serialize(writer, prefix, diff);
  580. RadialScale dc = diff as RadialScale;
  581. MajorTicks.Serialize(writer, prefix + ".MajorTicks", dc.MajorTicks);
  582. MinorTicks.Serialize(writer, prefix + ".MinorTicks", dc.MinorTicks);
  583. }
  584. #endregion // Public Methods
  585. }
  586. }