tun_text_drawer.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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, height=self.obj.width).set_placement(
  27. text_center,
  28. align=TextEntityAlignment.CENTER)
  29. text.rgb = self.obj.color
  30. def draw_div(self):
  31. assert isinstance(self.obj, TunText)
  32. if self.obj.middle_line.div_line[0][0] < self.obj.middle_line.div_line[1][0]:
  33. route = core.calculate_angle_with_x_axis(self.obj.middle_line.div_line[0], self.obj.middle_line.div_line[1])
  34. from_point, to_point = core.parallel_line(self.obj.middle_line.div_line[0],
  35. self.obj.middle_line.div_line[1],
  36. 1.7 * self.obj.width)
  37. else:
  38. route = core.calculate_angle_with_x_axis(self.obj.middle_line.div_line[1], self.obj.middle_line.div_line[0])
  39. from_point, to_point = core.parallel_line(self.obj.middle_line.div_line[1],
  40. self.obj.middle_line.div_line[0],
  41. 1.7 * self.obj.width)
  42. angle = math.degrees(route)
  43. text_center = core.find_point_on_line(from_point, to_point, 1 / 2)
  44. dxfattribs = {
  45. 'insert': text_center, 'style': 'msyh',
  46. "layer": f"图层{self.obj.layer_id}"}
  47. text = self.msp.add_text(text=self.obj.name, rotation=angle, dxfattribs=dxfattribs, height=self.obj.width).set_placement(
  48. text_center,
  49. align=TextEntityAlignment.CENTER)
  50. text.rgb = self.obj.color
  51. #
  52. # def initialize_data(self):
  53. # assert isinstance(self.obj,TunText)
  54. #
  55. #
  56. # def draw_obj(self, center, route):
  57. # assert isinstance(self.obj, TunText)
  58. # if self.obj.middle_line.agg_line[0][0] > self.obj.middle_line.agg_line[1][0]:
  59. # route = core.calculate_angle_with_x_axis(self.from_point, self.to_point)
  60. # else:
  61. # route = core.calculate_angle_with_x_axis(self.to_point, self.from_point)
  62. # angle = math.degrees(route)
  63. # from_point, to_point = core.parallel_line(self.from_point, self.to_point, 1.7 * self.width)
  64. # tun_center = core.find_point_on_line(from_point, to_point, 1 / 2)
  65. # dxfattribs = {
  66. # 'insert': tun_center, 'style': 'msyh', 'color': core.get_color_by_layer(self.layer),
  67. # "layer": f"图层{self.layer}"}
  68. # self.msp.add_text(text=self.text, rotation=angle, dxfattribs=dxfattribs, height=5).set_placement(tun_center,
  69. # align=TextEntityAlignment.CENTER)