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})