auto_gate_drawer.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from core import rotate_point_around_another
  2. from drawer.BaseDrawer import BaseDrawer, VentGraphDrawer
  3. from entity.primitives import Gate
  4. from ezdxf import math as mt
  5. from dict.model_config import _get_app_name, _global_model_configs
  6. class AutoGateDrawer(VentGraphDrawer):
  7. def __init__(self, obj, msp, style):
  8. super().__init__(obj, msp, style)
  9. self.gate_drawers = {
  10. 0: self.draw_gate_style_0,
  11. }
  12. def initialize_data(self):
  13. self.obj.color = (255, 255, 255)
  14. def draw_obj(self, center, route):
  15. self.gate_drawers[self.style](center, route)
  16. def draw_gate_style_0(self, center, route):
  17. # a1
  18. # c2(|°c1
  19. # 。a2
  20. a1 = center[0], center[1] + self.obj.width * 0.7
  21. a2 = center[0], center[1] - self.obj.width * 0.7
  22. c1 = center[0], center[1]
  23. c2 = center[0] - 0.5 * self.obj.width, center[1]
  24. mt_carc = mt.arc.ConstructionArc()
  25. arc_1 = mt_carc.from_3p(start_point=a1, def_point=c2, end_point=a2)
  26. arc = self.msp.add_arc(center=arc_1.center, radius=arc_1.radius, start_angle=arc_1.start_angle,
  27. end_angle=arc_1.end_angle,
  28. dxfattribs={"layer": f"图层{self.obj.layer_id}", "lineweight": 50})
  29. arc.rgb = self.obj.color
  30. hatch = self.msp.add_hatch()
  31. hatch.set_pattern_fill('SOLID') # 'SOLID'表示实心填充,color=1为红色
  32. # 添加边缘路径(圆形边界)
  33. edge_path = hatch.paths.add_edge_path()
  34. edge_path.add_arc(
  35. center=c1,
  36. radius=self.obj.width * 0.1,
  37. start_angle=0, # 起始角度0度
  38. end_angle=360, # 结束角度360度,形成完整圆
  39. ccw=True # 逆时针方向
  40. )
  41. edge_path.add_arc(
  42. center=c2,
  43. radius=self.obj.width * 0.1,
  44. start_angle=0, # 起始角度0度
  45. end_angle=360, # 结束角度360度,形成完整圆
  46. ccw=True # 逆时针方向
  47. )