123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- import math
- import ezdxf
- import core
- from core import rotate_point_around_another
- from drawer.BaseDrawer import VentGraphDrawer
- from entity.primitives import AirFlow
- class AirFlowDrawer(VentGraphDrawer):
- def __init__(self, obj, msp, style):
- self.air_flow_drawers = {
- 0: self.draw_air_flow_0,
- 1: self.draw_air_flow_1,
- }
- super().__init__(obj, msp, style)
- def draw_obj(self, center, route):
- assert isinstance(self.obj, AirFlow)
- self.air_flow_drawers[self.style](center, route)
- def draw_air_flow_0(self, center, route):
- assert isinstance(self.obj, AirFlow)
- point_end = center[0] - self.obj.width * 5 / 2, center[1]
- point_arrow = center[0] + self.obj.width * 5 / 2, center[1]
- point_s_end = center[0] - self.obj.width * 5 / 2.5, center[1]
- point_s_arrow = center[0] + self.obj.width * 5 / 5, center[1]
- arrow = ezdxf.ARROWS.closed_filled
- point_end = rotate_point_around_another(point_end, center, route)
- point_arrow = rotate_point_around_another(point_arrow, center, route)
- point_s_end = rotate_point_around_another(point_s_end, center, route)
- point_s_arrow = rotate_point_around_another(point_s_arrow, center, route)
- angle = math.degrees(route)
- # 用风类型 0:未指定 1:进风 2: 用风 3:回风
- # 0、1 是绿色箭头, 2、3是红色箭头
- if self.obj.air_type in ('2', '3'):
- d1 = core.find_point_on_line(point_s_arrow, point_s_end, 1 / 4)
- d2 = core.find_point_on_line(point_s_arrow, point_s_end, 3 / 4)
- p1, p2 = core.find_vector_on_d(d1, self.obj.width * 4 / 10, route)
- p3, p4 = core.find_vector_on_d(d2, self.obj.width * 4 / 10, route)
- color = (255, 0, 0)
- spline = self.msp.add_spline([point_s_arrow, p1, p4, point_s_end], dxfattribs={
- "layer": f"图层{self.obj.layer_id}",
- })
- spline.rgb = color
- else:
- color = (0, 255, 0)
- line = self.msp.add_line(point_end, point_arrow, {
- "layer": f"图层{self.obj.layer_id}"
- })
- line.rgb = color
- # 2d 6
- arrow = self.msp.add_arrow(arrow, point_arrow, self.obj.width, angle, {
- "layer": f"图层{self.obj.layer_id}"
- })
- def draw_air_flow_1(self, center, route):
- assert isinstance(self.obj, AirFlow)
- point_end = center[0] - self.obj.width * 5 / 2, center[1]
- point_arrow = center[0] + self.obj.width * 5 / 2, center[1]
- point_s_end = center[0] - self.obj.width * 5 / 2.5, center[1]
- point_s_arrow = center[0] + self.obj.width * 5 / 3.25, center[1]
- arrow = ezdxf.ARROWS.closed_filled
- point_end = rotate_point_around_another(point_end, center, route)
- point_arrow = rotate_point_around_another(point_arrow, center, route)
- point_s_end = rotate_point_around_another(point_s_end, center, route)
- point_s_arrow = rotate_point_around_another(point_s_arrow, center, route)
- angle = math.degrees(route)
- # 用风类型 0:未指定 1:进风 2: 用风 3:回风
- # 0、1 是蓝色箭头, 2、3是红色箭头
- if self.obj.air_type in ('2', '3'):
- d1 = core.find_point_on_line(point_s_arrow, point_s_end, 1 / 4)
- d2 = core.find_point_on_line(point_s_arrow, point_s_end, 3 / 4)
- p1, p2 = core.find_vector_on_d(d1, self.obj.width * 4 / 10, route)
- p3, p4 = core.find_vector_on_d(d2, self.obj.width * 4 / 10, route)
- color = 1
- spline = self.msp.add_spline([point_s_arrow, p1, p4, point_end], dxfattribs={
- "layer": f"图层{self.obj.layer_id}", "lineweight": 50, "color": color
- })
- else:
- color = 5
- line = self.msp.add_line(point_end, point_s_arrow, {
- "layer": f"图层{self.obj.layer_id}",
- "lineweight": 50,
- "color": color
- })
- # 2d 6
- arrow = self.msp.add_arrow(arrow, point_arrow, self.obj.width, angle, {
- "layer": f"图层{self.obj.layer_id}", "color": color
- })
- def initialize_data(self):
- assert isinstance(self.obj, AirFlow)
|