AirDuctDrawer.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import math
  2. from ezdxf.enums import TextEntityAlignment
  3. import core
  4. class AirDuctDrawer:
  5. def __init__(self,msp,layer,from_,to,width):
  6. self.msp = msp
  7. self.layer = layer
  8. self.from_ = from_
  9. self.to = to
  10. self.width = width
  11. # a1 b1
  12. # c1----------c2|F|c3
  13. # center a2 b2
  14. def draw_air_duct_list(self):
  15. distance = core.distance(self.from_,self.to)
  16. ad_len = self.get_draw_air_duct_len()
  17. from_ = self.from_
  18. route_ = core.calculate_angle_with_x_axis(self.from_,self.to)
  19. while distance > ad_len:
  20. to_ = core.find_point_on_segment(from_,self.to,ad_len)
  21. center_ = core.find_point_on_line(from_,to_,1/2)
  22. self.draw_air_duct(center_,route_)
  23. from_ = to_
  24. distance = distance - ad_len
  25. self.msp.add_line(from_, self.to,
  26. dxfattribs={"layer": f"图层{self.layer}", "color": core.get_color_by_layer(self.layer)})
  27. def get_draw_air_duct_len(self):
  28. return self.width * 3
  29. def draw_air_duct(self,center,route):
  30. c1 = center[0]-self.width*1.5,center[1]
  31. c2 = center[0]+self.width*1,center[1]
  32. c1 = core.rotate_point_around_another(c1,center,route)
  33. c2 = core.rotate_point_around_another(c2,center,route)
  34. self.msp.add_line(c1, c2,
  35. dxfattribs={"layer": f"图层{self.layer}", "color": core.get_color_by_layer(self.layer)})
  36. a1 = center[0]+self.width*1,center[1]+self.width*1/6
  37. a2 = center[0]+self.width*1,center[1]-self.width*1/6
  38. a1 = core.rotate_point_around_another(a1,center,route)
  39. a2 = core.rotate_point_around_another(a2,center,route)
  40. self.msp.add_line(a1, a2,
  41. dxfattribs={"layer": f"图层{self.layer}", "color": core.get_color_by_layer(self.layer)})
  42. f = center[0]+self.width*1.25,center[1]
  43. f = core.rotate_point_around_another(f, center, route)
  44. angle = math.degrees(route+math.pi)
  45. dxfattribs = {
  46. 'insert': f, 'style': 'msyh', 'color': core.get_color_by_layer(self.layer),
  47. "layer": f"图层{self.layer}",
  48. }
  49. self.msp.add_text("F", rotation=angle, dxfattribs=dxfattribs, height=self.width/6).set_placement(f, align=TextEntityAlignment.MIDDLE_CENTER)
  50. b1 = center[0]+self.width*1.5,center[1]+self.width*1/6
  51. b2 = center[0]+self.width*1.5,center[1]-self.width*1/6
  52. b1 = core.rotate_point_around_another(b1,center,route)
  53. b2 = core.rotate_point_around_another(b2,center,route)
  54. self.msp.add_line(b1, b2,
  55. dxfattribs={"layer": f"图层{self.layer}", "color": core.get_color_by_layer(self.layer)})