1. /// <summary>
    2. /// 承压环、底环板均分函数
    3. /// </summary>
    4. /// <param name="maxr">外圆半径</param>
    5. /// <param name="platewid">排版板宽</param>
    6. /// <param name="totalang">均分总角度</param>
    7. /// <param name="divnum">最优均分数量</param>
    8. /// <param name="divnum2">均分数量</param>
    9. private static void PlateDiv(double maxr, int platewid, double totalang, out int divnum, out int divnum2)
    10. {
    11. double widang = 2 * Math.Atan2(platewid / 2.0, Math.Sqrt(Math.Pow(maxr, 2) - Math.Pow(platewid / 2.0, 2)));
    12. divnum = (int)(totalang / widang);
    13. int divnum1 = divnum;
    14. double divang = totalang / divnum1;
    15. //计算拼接数量
    16. while (maxr * Math.Sin(divang / 2.0) > (platewid / 2.0))
    17. {
    18. divnum1++;
    19. divang = totalang / divnum1;
    20. }
    21. divnum2 = divnum1;
    22. divang = totalang / divnum2;
    23. while (maxr * Math.Sin(divang / 2.0) < (platewid / 2.0))
    24. {
    25. divnum2--;
    26. divang = totalang / divnum2;
    27. }
    28. //确定拼接数量
    29. divnum = divnum1 > divnum ? divnum1 : divnum2;
    30. }
    31. /// <summary>
    32. /// 创建圆环均分及文字
    33. /// </summary>
    34. /// <param name="maxr">圆环最大直径</param>
    35. /// <param name="minr">圆环最小直径</param>
    36. /// <param name="cen">圆环圆心点</param>
    37. /// <param name="divnum">圆环等分数量</param>
    38. /// <param name="divang">圆环等分后,每分角度(弧度)</param>
    39. /// <param name="atpy">焊缝编号,A10X,B20X</param>
    40. private static void MakeRingDivWeldText(double maxr, double minr, Point3d cen, int divnum, double divang, string atpy)
    41. {
    42. for (int i = 0; i < divnum; i++)
    43. {
    44. double lang = (divang / 2.0) + (i * divang);
    45. db.AddLineToModelSpace(cen.PolarPtOfDegree(lang, minr), cen.PolarPtOfDegree(lang, maxr));
    46. string str = $"{atpy}-{i + 1}";
    47. TextHorizontalMode thm;
    48. if (Math.Abs(lang - (Math.PI * 0.5)) < (0.5 * divang) || Math.Abs(lang - (Math.PI * 1.5)) < (0.5 * divang) || lang == Math.PI * 0.5 || lang == Math.PI * 1.5)
    49. thm = TextHorizontalMode.TextCenter;
    50. else if (lang > (Math.PI * 0.5) && lang < (Math.PI * 1.5)) thm = TextHorizontalMode.TextRight;
    51. else thm = TextHorizontalMode.TextLeft;
    52. Point3d tpt = cen.PolarPtOfDegree(lang, maxr + fonthig);
    53. bool angpart = (lang > 0 && lang <= (Math.PI * 0.5)) || (lang > Math.PI && lang <= (Math.PI * 1.5));
    54. double tang = (divang / 2.0) + (i * divang), bigang, smlang;
    55. if (lang <= Math.PI * 0.5)
    56. {
    57. smlang = 0;
    58. bigang = Math.PI * 0.5;
    59. }
    60. else if (lang <= Math.PI)
    61. {
    62. smlang = Math.PI * 0.5;
    63. bigang = Math.PI;
    64. }
    65. else if (lang <= Math.PI * 1.5)
    66. {
    67. smlang = Math.PI;
    68. bigang = Math.PI * 1.5;
    69. }
    70. else
    71. {
    72. smlang = Math.PI * 1.5;
    73. bigang = Math.PI * 2;
    74. }
    75. Point3d prpt1 = tpt;
    76. int n = angpart ? -1 : 1;
    77. Point3d prpt2 = cen.PolarPtOfDegree((divang / 2.0) + ((i + n) * divang), maxr + fonthig);
    78. while (Math.Abs(prpt1.Y - prpt2.Y) <= (1.1 * fonthig) && ((divang / 2.0) + ((i + n) * divang)) > smlang && ((divang / 2.0) + ((i + n) * divang)) <= bigang)
    79. {
    80. if (lang > 0 && lang < Math.PI)
    81. {
    82. tpt = tpt.PolarPtOfDegree(lang, Math.Abs((prpt2.Y + (1.1 * fonthig) - prpt1.Y) / Math.Sin(tang)));
    83. }
    84. else
    85. {
    86. tpt = tpt.PolarPtOfDegree(lang, Math.Abs((prpt2.Y - prpt1.Y - (1.1 * fonthig)) / Math.Sin(tang)));
    87. }
    88. prpt1 = prpt2;
    89. if (angpart) n--;
    90. else n++;
    91. prpt2 = cen.PolarPtOfDegree((divang / 2.0) + ((i + n) * divang), maxr + fonthig);
    92. }
    93. if (pted2.Y > tpt.Y) pte0 = pted2 = new Point3d(pted2.X, tpt.Y - (0.5 * fonthig), 0);
    94. db.AddTextToModelSpace(tpt, str, fonthig, thm, TextVerticalMode.TextVerticalMid);
    95. }
    96. }