air_flow_drawer.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import math
  2. import ezdxf
  3. import core
  4. from core import rotate_point_around_another
  5. from drawer.BaseDrawer import VentGraphDrawer
  6. from entity.primitives import AirFlow
  7. class AirFlowDrawer(VentGraphDrawer):
  8. def __init__(self, obj, msp, style):
  9. self.air_flow_drawers = {
  10. 0: self.draw_air_flow_0,
  11. 1: self.draw_air_flow_1,
  12. }
  13. super().__init__(obj, msp, style)
  14. def draw_obj(self, center, route):
  15. assert isinstance(self.obj, AirFlow)
  16. self.air_flow_drawers[self.style](center, route)
  17. def draw_air_flow_0(self, center, route):
  18. assert isinstance(self.obj, AirFlow)
  19. point_end = center[0] - self.obj.width * 5 / 2, center[1]
  20. point_arrow = center[0] + self.obj.width * 5 / 2, center[1]
  21. point_s_end = center[0] - self.obj.width * 5 / 2.5, center[1]
  22. point_s_arrow = center[0] + self.obj.width * 5 / 5, center[1]
  23. arrow = ezdxf.ARROWS.closed_filled
  24. point_end = rotate_point_around_another(point_end, center, route)
  25. point_arrow = rotate_point_around_another(point_arrow, center, route)
  26. point_s_end = rotate_point_around_another(point_s_end, center, route)
  27. point_s_arrow = rotate_point_around_another(point_s_arrow, center, route)
  28. angle = math.degrees(route)
  29. # 用风类型 0:未指定 1:进风 2: 用风 3:回风
  30. # 0、1 是绿色箭头, 2、3是红色箭头
  31. if self.obj.air_type in ('2', '3'):
  32. d1 = core.find_point_on_line(point_s_arrow, point_s_end, 1 / 4)
  33. d2 = core.find_point_on_line(point_s_arrow, point_s_end, 3 / 4)
  34. p1, p2 = core.find_vector_on_d(d1, self.obj.width * 4 / 10, route)
  35. p3, p4 = core.find_vector_on_d(d2, self.obj.width * 4 / 10, route)
  36. color = (255, 0, 0)
  37. spline = self.msp.add_spline([point_s_arrow, p1, p4, point_s_end], dxfattribs={
  38. "layer": f"图层{self.obj.layer_id}",
  39. })
  40. spline.rgb = color
  41. else:
  42. color = (0, 255, 0)
  43. line = self.msp.add_line(point_end, point_arrow, {
  44. "layer": f"图层{self.obj.layer_id}"
  45. })
  46. line.rgb = color
  47. # 2d 6
  48. arrow = self.msp.add_arrow(arrow, point_arrow, self.obj.width, angle, {
  49. "layer": f"图层{self.obj.layer_id}"
  50. })
  51. def draw_air_flow_1(self, center, route):
  52. assert isinstance(self.obj, AirFlow)
  53. point_end = center[0] - self.obj.width * 5 / 2, center[1]
  54. point_arrow = center[0] + self.obj.width * 5 / 2, center[1]
  55. point_s_end = center[0] - self.obj.width * 5 / 2.5, center[1]
  56. point_s_arrow = center[0] + self.obj.width * 5 / 3.25, center[1]
  57. arrow = ezdxf.ARROWS.closed_filled
  58. point_end = rotate_point_around_another(point_end, center, route)
  59. point_arrow = rotate_point_around_another(point_arrow, center, route)
  60. point_s_end = rotate_point_around_another(point_s_end, center, route)
  61. point_s_arrow = rotate_point_around_another(point_s_arrow, center, route)
  62. angle = math.degrees(route)
  63. # 用风类型 0:未指定 1:进风 2: 用风 3:回风
  64. # 0、1 是蓝色箭头, 2、3是红色箭头
  65. if self.obj.air_type in ('2', '3'):
  66. d1 = core.find_point_on_line(point_s_arrow, point_s_end, 1 / 4)
  67. d2 = core.find_point_on_line(point_s_arrow, point_s_end, 3 / 4)
  68. p1, p2 = core.find_vector_on_d(d1, self.obj.width * 4 / 10, route)
  69. p3, p4 = core.find_vector_on_d(d2, self.obj.width * 4 / 10, route)
  70. color = 1
  71. spline = self.msp.add_spline([point_s_arrow, p1, p4, point_end], dxfattribs={
  72. "layer": f"图层{self.obj.layer_id}", "lineweight": 50, "color": color
  73. })
  74. else:
  75. color = 5
  76. line = self.msp.add_line(point_end, point_s_arrow, {
  77. "layer": f"图层{self.obj.layer_id}",
  78. "lineweight": 50,
  79. "color": color
  80. })
  81. # 2d 6
  82. arrow = self.msp.add_arrow(arrow, point_arrow, self.obj.width, angle, {
  83. "layer": f"图层{self.obj.layer_id}", "color": color
  84. })
  85. def initialize_data(self):
  86. assert isinstance(self.obj, AirFlow)