window_drawer.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. import core
  2. from drawer.BaseDrawer import BaseDrawer, VentGraphDrawer
  3. from entity.primitives import Window
  4. class WindowDrawer(VentGraphDrawer):
  5. def __init__(self, obj, msp, style):
  6. super().__init__(obj, msp, style)
  7. self.window_drawers = {
  8. 0: self.draw_window_0,
  9. 1: self.draw_window_1,
  10. 2: self.draw_window_2,
  11. 3: self.draw_window_3,
  12. }
  13. def initialize_data(self):
  14. self.obj.color = (255, 255, 255)
  15. def draw_obj(self, center, route):
  16. self.window_drawers[self.style](center,route)
  17. def trans_window_rate(self, n):
  18. assert isinstance(self.obj, Window)
  19. return n * self.obj.width / 16.2
  20. def create_window_points(self, center, route):
  21. assert isinstance(self.obj, Window)
  22. cx, cy = center
  23. points = []
  24. # 定义一系列点的偏移量
  25. offsets = [
  26. (-8.11, 12.63), (-8.11, 21.60), (-8.11, -12.63), (-8.11, -21.60),
  27. (8.11, 12.63), (8.11, 21.60), (8.11, -12.63), (8.11, -21.60),
  28. (-8.11, 10.02), (3.935, 10.02), (-3.935, 7.09), (8.11, 7.09),
  29. (-8.11, 4.32), (3.935, 4.32), (-3.935, 1.385), (8.11, 1.385),
  30. (-8.11, -1.39), (3.935, -1.39), (-3.935, -4.32), (8.11, -4.32),
  31. (-8.11, -7.10), (3.935, -7.10), (-3.935, -10.03), (8.11, -10.03)
  32. ]
  33. for dx, dy in offsets:
  34. x = cx + self.trans_window_rate(dx)
  35. y = cy + self.trans_window_rate(dy)
  36. rotated_point = core.rotate_point_around_another((x, y), center, route)
  37. points.append(rotated_point)
  38. return points
  39. def draw_window_0(self, center, route):
  40. points = self.create_window_points(center, route)
  41. # 绘制线条
  42. lines = [
  43. (points[1], points[3]), (points[5], points[7]),
  44. (points[0], points[4]), (points[2], points[6]),
  45. (points[8], points[9]), (points[9], points[11]),
  46. (points[10], points[11]), (points[8], points[10]),
  47. (points[12], points[13]), (points[13], points[15]),
  48. (points[14], points[15]), (points[12], points[14]),
  49. (points[16], points[17]), (points[17], points[19]),
  50. (points[18], points[19]), (points[16], points[18]),
  51. (points[20], points[21]), (points[21], points[23]),
  52. (points[22], points[23]), (points[20], points[22])
  53. ]
  54. for line in lines:
  55. l = self.msp.add_line(line[0], line[1], dxfattribs={"layer": f"图层{self.obj.layer_id}"})
  56. l.rgb = self.obj.color
  57. def draw_window_2(self, center, route):
  58. route = route + 1.57075
  59. points = self.create_window_points(center, route)
  60. # 绘制线条
  61. lines = [
  62. (points[1], points[3]), (points[5], points[7]),
  63. (points[0], points[4]), (points[2], points[6]),
  64. (points[8], points[9]), (points[9], points[11]),
  65. (points[10], points[11]), (points[8], points[10]),
  66. (points[12], points[13]), (points[13], points[15]),
  67. (points[14], points[15]), (points[12], points[14]),
  68. (points[16], points[17]), (points[17], points[19]),
  69. (points[18], points[19]), (points[16], points[18]),
  70. (points[20], points[21]), (points[21], points[23]),
  71. (points[22], points[23]), (points[20], points[22])
  72. ]
  73. for line in lines:
  74. l = self.msp.add_line(line[0], line[1], dxfattribs={"layer": f"图层{self.obj.layer_id}"})
  75. l.rgb = self.obj.color
  76. # a1
  77. # |
  78. #b1 --b2
  79. # | | |
  80. # c1--c2
  81. # |
  82. # a2
  83. def draw_window_3(self, center, route):
  84. a1 = center[0], center[1] + self.obj.width * 0.7
  85. a2 = center[0], center[1] - self.obj.width * 0.7
  86. a1 = core.rotate_point_around_another(a1, center, route)
  87. a2 = core.rotate_point_around_another(a2, center, route)
  88. b1 = center[0]-self.obj.width * 0.3, center[1] + self.obj.width * 0.3
  89. b2 = center[0]+self.obj.width * 0.3, center[1] + self.obj.width * 0.3
  90. b1 = core.rotate_point_around_another(b1, center, route)
  91. b2 = core.rotate_point_around_another(b2, center, route)
  92. c1 = center[0] - self.obj.width * 0.3, center[1] - self.obj.width * 0.3
  93. c2 = center[0] + self.obj.width * 0.3, center[1] - self.obj.width * 0.3
  94. c1 = core.rotate_point_around_another(c1, center, route)
  95. c2 = core.rotate_point_around_another(c2, center, route)
  96. self.msp.add_line(a1, a2, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
  97. self.msp.add_line(b1, b2, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
  98. self.msp.add_line(c1, c2, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
  99. self.msp.add_line(b1, c1, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
  100. self.msp.add_line(b2, c2, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
  101. # d1---d2
  102. # a1
  103. # b1-|-b2
  104. # e1
  105. # |||
  106. # c1-|-c2
  107. # e2
  108. # a2
  109. def draw_window_1(self, center, route):
  110. a1 = center[0], center[1] + self.obj.width * 0.7
  111. a2 = center[0], center[1] - self.obj.width * 0.7
  112. a1 = core.rotate_point_around_another(a1, center, route)
  113. a2 = core.rotate_point_around_another(a2, center, route)
  114. b1 = center[0]-self.obj.width * 0.3, center[1] + self.obj.width * 0.3
  115. b2 = center[0]+self.obj.width * 0.3, center[1] + self.obj.width * 0.3
  116. b1 = core.rotate_point_around_another(b1, center, route)
  117. b2 = core.rotate_point_around_another(b2, center, route)
  118. self.msp.add_line(b1, b2, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
  119. c1 = center[0] - self.obj.width * 0.3, center[1] - self.obj.width * 0.3
  120. c2 = center[0] + self.obj.width * 0.3, center[1] - self.obj.width * 0.3
  121. c1 = core.rotate_point_around_another(c1, center, route)
  122. c2 = core.rotate_point_around_another(c2, center, route)
  123. self.msp.add_line(c1, c2, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
  124. self.msp.add_line(b1, c1, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
  125. self.msp.add_line(b2, c2, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
  126. d1 = center[0]-self.obj.width * 0.7, center[1] + self.obj.width * 0.7
  127. d2 = center[0]+self.obj.width * 0.7, center[1] + self.obj.width * 0.7
  128. d1 = core.rotate_point_around_another(d1, center, route)
  129. d2 = core.rotate_point_around_another(d2, center, route)
  130. self.msp.add_line(d1, d2, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
  131. e1 = center[0], center[1] + self.obj.width * 0.3
  132. e2 = center[0], center[1] - self.obj.width * 0.3
  133. e1 = core.rotate_point_around_another(e1, center, route)
  134. e2 = core.rotate_point_around_another(e2, center, route)
  135. self.msp.add_line(a1, e1, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
  136. self.msp.add_line(a2, e2, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})