from core import rotate_point_around_another from drawer.BaseDrawer import BaseDrawer, VentGraphDrawer from entity.primitives import Gate from ezdxf import math as mt from dict.model_config import _get_app_name, _global_model_configs class AutoGateDrawer(VentGraphDrawer): def __init__(self, obj, msp, style): super().__init__(obj, msp, style) self.gate_drawers = { 0: self.draw_gate_style_0, } def initialize_data(self): self.obj.color = (255, 255, 255) def draw_obj(self, center, route): self.gate_drawers[self.style](center, route) def draw_gate_style_0(self, center, route): # a1 # c2(|°c1 # 。a2 a1 = center[0], center[1] + self.obj.width * 0.7 a2 = center[0], center[1] - self.obj.width * 0.7 c1 = center[0], center[1] c2 = center[0] - 0.5 * self.obj.width, center[1] mt_carc = mt.arc.ConstructionArc() arc_1 = mt_carc.from_3p(start_point=a1, def_point=c2, end_point=a2) arc = self.msp.add_arc(center=arc_1.center, radius=arc_1.radius, start_angle=arc_1.start_angle, end_angle=arc_1.end_angle, dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50}) arc.rgb = self.obj.color hatch = self.msp.add_hatch() hatch.set_pattern_fill('SOLID') # 'SOLID'表示实心填充,color=1为红色 # 添加边缘路径(圆形边界) edge_path = hatch.paths.add_edge_path() edge_path.add_arc( center=c1, radius=self.obj.width * 0.1, start_angle=0, # 起始角度0度 end_angle=360, # 结束角度360度,形成完整圆 ccw=True # 逆时针方向 ) edge_path.add_arc( center=c2, radius=self.obj.width * 0.1, start_angle=0, # 起始角度0度 end_angle=360, # 结束角度360度,形成完整圆 ccw=True # 逆时针方向 )