import math import time import ezdxf import numpy as np from ezdxf.enums import TextEntityAlignment import core from core import rotate_point_around_another, calculate_route, calculate_angle_with_x_axis class WindFlowDrawer: def __init__(self, msp, layer, length, center, route, type_): self.layer = layer self.msp = msp self.len = length self.center = center self.route = route self.type = type_ def draw_wind_flow(self): point_end = self.center[0] - self.len / 2, self.center[1] point_arrow = self.center[0] + self.len / 2, self.center[1] point_s_end = self.center[0] - self.len / 2.5, self.center[1] point_s_arrow = self.center[0] + self.len / 5, self.center[1] point_text = self.center[0]-self.len/ 2 ,self.center[1] arrow = ezdxf.ARROWS.closed_filled point_end = rotate_point_around_another(point_end, self.center, self.route) point_arrow = rotate_point_around_another(point_arrow, self.center, self.route) point_s_end = rotate_point_around_another(point_s_end, self.center, self.route) point_s_arrow = rotate_point_around_another(point_s_arrow, self.center, self.route) point_text = rotate_point_around_another(point_text, self.center, self.route) angle = math.degrees(self.route) # 用风类型 0:未指定 1:进风 2: 用风 3:回风 # 0、1 是绿色箭头, 2、3是红色箭头 if self.type == '2' or self.type == '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.len/10,self.route) p3, p4 = core.find_vector_on_d(d2,self.len/10,self.route) # p1, p2 = core.line_point_normal_distance(point_s_arrow, point_s_end, 1 / 4, self.len/200) # p3, p4 = core.line_point_normal_distance(point_s_arrow, point_s_end, 3 / 4, self.len/200) self.msp.add_spline([point_s_arrow, p1, p4, point_s_end],dxfattribs={ "color": self.get_color(), "layer": f"图层{self.layer}" }) # dxfattribs = { # 'insert': point_text, 'style': 'msyh', 'color': '1', "layer":f"图层{self.layer}"} # self.msp.add_text(text="S", rotation=angle - 90, dxfattribs=dxfattribs,height=0.2*self.len).set_placement(point_text, align=TextEntityAlignment.CENTER) self.msp.add_line(point_end, point_arrow, { "color": self.get_color(), "layer":f"图层{self.layer}" }) # 2d 6 self.msp.add_arrow(arrow, point_arrow, 6, angle, { "color": self.get_color(), "layer": f"图层{self.layer}" }) def get_color(self): if self.type == '2' or self.type == '3': return '1' else: return '3'