1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import math
- from ezdxf.enums import TextEntityAlignment
- import core
- class AirDuctDrawer:
- def __init__(self,msp,layer,from_,to,width):
- self.msp = msp
- self.layer = layer
- self.from_ = from_
- self.to = to
- self.width = width
- # a1 b1
- # c1----------c2|F|c3
- # center a2 b2
- def draw_air_duct_list(self):
- distance = core.distance(self.from_,self.to)
- ad_len = self.get_draw_air_duct_len()
- from_ = self.from_
- route_ = core.calculate_angle_with_x_axis(self.from_,self.to)
- while distance > ad_len:
- to_ = core.find_point_on_segment(from_,self.to,ad_len)
- center_ = core.find_point_on_line(from_,to_,1/2)
- self.draw_air_duct(center_,route_)
- from_ = to_
- distance = distance - ad_len
- self.msp.add_line(from_, self.to,
- dxfattribs={"layer": f"图层{self.layer}", "color": core.get_color_by_layer(self.layer)})
- def get_draw_air_duct_len(self):
- return self.width * 3
- def draw_air_duct(self,center,route):
- c1 = center[0]-self.width*1.5,center[1]
- c2 = center[0]+self.width*1,center[1]
- 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.layer}", "color": core.get_color_by_layer(self.layer)})
- a1 = center[0]+self.width*1,center[1]+self.width*1/6
- a2 = center[0]+self.width*1,center[1]-self.width*1/6
- 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.layer}", "color": core.get_color_by_layer(self.layer)})
- f = center[0]+self.width*1.25,center[1]
- f = core.rotate_point_around_another(f, center, route)
- angle = math.degrees(route+math.pi)
- dxfattribs = {
- 'insert': f, 'style': 'msyh', 'color': core.get_color_by_layer(self.layer),
- "layer": f"图层{self.layer}",
- }
- self.msp.add_text("F", rotation=angle, dxfattribs=dxfattribs, height=self.width/6).set_placement(f, align=TextEntityAlignment.MIDDLE_CENTER)
- b1 = center[0]+self.width*1.5,center[1]+self.width*1/6
- b2 = center[0]+self.width*1.5,center[1]-self.width*1/6
- 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.layer}", "color": core.get_color_by_layer(self.layer)})
|