tun_text_drawer.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import math
  2. from ezdxf.enums import TextEntityAlignment
  3. import core
  4. from drawer.BaseDrawer import VentGraphDrawer, BaseDrawer
  5. from entity.primitives import TunText
  6. class TunTextDrawer(BaseDrawer):
  7. def initialize_data(self):
  8. pass
  9. def draw_agg(self):
  10. assert isinstance(self.obj, TunText)
  11. if self.obj.middle_line.agg_line[0][0] < self.obj.middle_line.agg_line[1][0]:
  12. route = core.calculate_angle_with_x_axis(self.obj.middle_line.agg_line[0], self.obj.middle_line.agg_line[1])
  13. from_point, to_point = core.parallel_line(self.obj.middle_line.agg_line[0],
  14. self.obj.middle_line.agg_line[1],
  15. 1.7 * self.obj.width)
  16. else:
  17. route = core.calculate_angle_with_x_axis(self.obj.middle_line.agg_line[1], self.obj.middle_line.agg_line[0])
  18. from_point, to_point = core.parallel_line(self.obj.middle_line.agg_line[1],
  19. self.obj.middle_line.agg_line[0],
  20. 1.7 * self.obj.width)
  21. angle = math.degrees(route)
  22. text_center = core.find_point_on_line(from_point, to_point, 1 / 2)
  23. dxfattribs = {
  24. 'insert': text_center, 'style': 'msyh',
  25. "layer": f"图层{self.obj.layer_id}"}
  26. text = self.msp.add_text(text=self.obj.name, rotation=angle, dxfattribs=dxfattribs,
  27. height=self.obj.width).set_placement(
  28. text_center,
  29. align=TextEntityAlignment.CENTER)
  30. text.rgb = self.obj.color
  31. def draw_div(self):
  32. assert isinstance(self.obj, TunText)
  33. if self.obj.middle_line.div_line[0][0] < self.obj.middle_line.div_line[1][0]:
  34. route = core.calculate_angle_with_x_axis(self.obj.middle_line.div_line[0], self.obj.middle_line.div_line[1])
  35. from_point, to_point = core.parallel_line(self.obj.middle_line.div_line[0],
  36. self.obj.middle_line.div_line[1],
  37. 1.7 * self.obj.width)
  38. else:
  39. route = core.calculate_angle_with_x_axis(self.obj.middle_line.div_line[1], self.obj.middle_line.div_line[0])
  40. from_point, to_point = core.parallel_line(self.obj.middle_line.div_line[1],
  41. self.obj.middle_line.div_line[0],
  42. 1.7 * self.obj.width)
  43. angle = math.degrees(route)
  44. text_center = core.find_point_on_line(from_point, to_point, 1 / 2)
  45. dxfattribs = {
  46. 'insert': text_center, 'style': 'msyh',
  47. "layer": f"图层{self.obj.layer_id}"}
  48. text = self.msp.add_text(text=self.obj.name, rotation=angle, dxfattribs=dxfattribs,
  49. height=self.obj.width).set_placement(
  50. text_center,
  51. align=TextEntityAlignment.CENTER)
  52. text.rgb = self.obj.color
  53. #
  54. # def initialize_data(self):
  55. # assert isinstance(self.obj,TunText)
  56. #
  57. #
  58. # def draw_obj(self, center, route):
  59. # assert isinstance(self.obj, TunText)
  60. # if self.obj.middle_line.agg_line[0][0] > self.obj.middle_line.agg_line[1][0]:
  61. # route = core.calculate_angle_with_x_axis(self.from_point, self.to_point)
  62. # else:
  63. # route = core.calculate_angle_with_x_axis(self.to_point, self.from_point)
  64. # angle = math.degrees(route)
  65. # from_point, to_point = core.parallel_line(self.from_point, self.to_point, 1.7 * self.width)
  66. # tun_center = core.find_point_on_line(from_point, to_point, 1 / 2)
  67. # dxfattribs = {
  68. # 'insert': tun_center, 'style': 'msyh', 'color': core.get_color_by_layer(self.layer),
  69. # "layer": f"图层{self.layer}"}
  70. # self.msp.add_text(text=self.text, rotation=angle, dxfattribs=dxfattribs, height=5).set_placement(tun_center,
  71. # align=TextEntityAlignment.CENTER)