123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- import core
- from drawer.BaseDrawer import BaseDrawer, VentGraphDrawer
- from entity.primitives import Window
- class WindowDrawer(VentGraphDrawer):
- def __init__(self, obj, msp, style):
- super().__init__(obj, msp, style)
- self.window_drawers = {
- 0: self.draw_window_0,
- 1: self.draw_window_1,
- }
- def initialize_data(self):
- self.obj.color = (255, 255, 255)
- def draw_obj(self, center, route):
- self.window_drawers[self.style](center,route)
- def trans_window_rate(self, n):
- assert isinstance(self.obj, Window)
- return n * self.obj.width / 16.2
- def create_window_points(self, center, route):
- assert isinstance(self.obj, Window)
- cx, cy = center
- points = []
- # 定义一系列点的偏移量
- offsets = [
- (-8.11, 12.63), (-8.11, 21.60), (-8.11, -12.63), (-8.11, -21.60),
- (8.11, 12.63), (8.11, 21.60), (8.11, -12.63), (8.11, -21.60),
- (-8.11, 10.02), (3.935, 10.02), (-3.935, 7.09), (8.11, 7.09),
- (-8.11, 4.32), (3.935, 4.32), (-3.935, 1.385), (8.11, 1.385),
- (-8.11, -1.39), (3.935, -1.39), (-3.935, -4.32), (8.11, -4.32),
- (-8.11, -7.10), (3.935, -7.10), (-3.935, -10.03), (8.11, -10.03)
- ]
- for dx, dy in offsets:
- x = cx + self.trans_window_rate(dx)
- y = cy + self.trans_window_rate(dy)
- rotated_point = core.rotate_point_around_another((x, y), center, route)
- points.append(rotated_point)
- return points
- def draw_window_0(self, center, route):
- points = self.create_window_points(center, route)
- # 绘制线条
- lines = [
- (points[1], points[3]), (points[5], points[7]),
- (points[0], points[4]), (points[2], points[6]),
- (points[8], points[9]), (points[9], points[11]),
- (points[10], points[11]), (points[8], points[10]),
- (points[12], points[13]), (points[13], points[15]),
- (points[14], points[15]), (points[12], points[14]),
- (points[16], points[17]), (points[17], points[19]),
- (points[18], points[19]), (points[16], points[18]),
- (points[20], points[21]), (points[21], points[23]),
- (points[22], points[23]), (points[20], points[22])
- ]
- for line in lines:
- l = self.msp.add_line(line[0], line[1], dxfattribs={"layer": f"图层{self.obj.layer_id}"})
- l.rgb = self.obj.color
- # a1
- # b1-|-b1
- # |||
- # c1-|-c2
- # a2
- def draw_window_1(self, center, route):
- a1 = center[0], center[1] + self.obj.width * 0.7
- a2 = center[0], center[1] - self.obj.width * 0.7
- a1 = core.rotate_point_around_another(a1, center, route)
- a2 = core.rotate_point_around_another(a2, center, route)
- self.msp.add_line(a1, a2, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
- b1 = center[0]-self.obj.width * 0.3, center[1] + self.obj.width * 0.3
- b2 = center[0]+self.obj.width * 0.3, center[1] + self.obj.width * 0.3
- b1 = core.rotate_point_around_another(b1, center, route)
- b2 = core.rotate_point_around_another(b2, center, route)
- self.msp.add_line(b1, b2, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
- c1 = center[0] - self.obj.width * 0.3, center[1] - self.obj.width * 0.3
- c2 = center[0] + self.obj.width * 0.3, center[1] - self.obj.width * 0.3
- c1 = core.rotate_point_around_another(c1, center, route)
- c2 = core.rotate_point_around_another(c2, center, route)
- self.msp.add_line(c1, c2, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
- self.msp.add_line(b1, c1, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
- self.msp.add_line(b2, c2, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
|