TunDrawer.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import math
  2. from ezdxf.enums import TextEntityAlignment
  3. import core
  4. class TunDrawer:
  5. def __init__(self, msp, layer, vec12, vec34, from_point, to_point, text, width,head_vec_from=None,head_vec_to=None):
  6. self.width = width
  7. self.text = text
  8. self.msp = msp
  9. self.layer = layer
  10. self.vec12 = vec12
  11. self.vec34 = vec34
  12. self.from_point = from_point
  13. self.to_point = to_point
  14. self.head_vec_from = head_vec_from
  15. self.head_vec_to = head_vec_to
  16. def draw_tun(self):
  17. color = core.get_color_by_layer(self.layer)
  18. for i in range(0, len(self.vec12), 2):
  19. pair = self.vec12[i:i + 2]
  20. point1 = pair[0][0], pair[0][1]
  21. point2 = pair[1][0], pair[1][1]
  22. # 取出每两个元素
  23. self.msp.add_line(point1, point2, dxfattribs={
  24. 'color': color,
  25. 'layer': f'图层{self.layer}'
  26. })
  27. for i in range(0, len(self.vec34), 2):
  28. pair = self.vec34[i:i + 2] # 取出每两个元素
  29. point1 = pair[0][0], pair[0][1]
  30. point2 = pair[1][0], pair[1][1]
  31. self.msp.add_line(point1, point2, dxfattribs={
  32. 'color': color,
  33. 'layer': f'图层{self.layer}'
  34. })
  35. if self.head_vec_from is not None and self.head_vec_to is not None:
  36. self.msp.add_line(self.head_vec_from, self.head_vec_to , dxfattribs={
  37. 'color': color,
  38. 'layer': f'图层{self.layer}'
  39. })
  40. # self.draw_tun_text()
  41. # self.draw_middle_line()
  42. def draw_tun_text(self):
  43. length = core.distance(self.from_point, self.to_point)
  44. text_len = len(self.text) * 6.5
  45. if length * 0.8 > text_len:
  46. if self.to_point[0] > self.from_point[0]:
  47. route = core.calculate_angle_with_x_axis(self.from_point, self.to_point)
  48. else:
  49. route = core.calculate_angle_with_x_axis(self.to_point, self.from_point)
  50. angle = math.degrees(route)
  51. from_point, to_point = core.parallel_line(self.from_point, self.to_point, 1.7*self.width)
  52. tun_center = core.find_point_on_line(from_point, to_point, 1 / 2)
  53. dxfattribs = {
  54. 'insert': tun_center, 'style': 'msyh', 'color': core.get_color_by_layer(self.layer), "layer": f"图层{self.layer}"}
  55. self.msp.add_text(text=self.text, rotation=angle, dxfattribs=dxfattribs,height=5).set_placement(tun_center, align=TextEntityAlignment.CENTER)
  56. # self.msp.add_circle(tun_center, 2, {"color": "1"}) # red
  57. # self.msp.add_circle(core.find_point_on_line(self.from_point, self.to_point, 1 / 2), 2, {"color": "1"}) # red
  58. def draw_middle_line(self):
  59. self.msp.add_line(self.from_point, self.to_point, dxfattribs={
  60. 'color': '1',
  61. 'layer': f'图层{self.layer}'
  62. })