WindFlowDrawer.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import math
  2. import time
  3. import ezdxf
  4. import numpy as np
  5. from ezdxf.enums import TextEntityAlignment
  6. import core
  7. from core import rotate_point_around_another, calculate_route, calculate_angle_with_x_axis
  8. class WindFlowDrawer:
  9. def __init__(self, msp, layer, length, center, route, type_):
  10. self.layer = layer
  11. self.msp = msp
  12. self.len = length
  13. self.center = center
  14. self.route = route
  15. self.type = type_
  16. def draw_wind_flow(self):
  17. point_end = self.center[0] - self.len / 2, self.center[1]
  18. point_arrow = self.center[0] + self.len / 2, self.center[1]
  19. point_s_end = self.center[0] - self.len / 2.5, self.center[1]
  20. point_s_arrow = self.center[0] + self.len / 5, self.center[1]
  21. point_text = self.center[0]-self.len/ 2 ,self.center[1]
  22. arrow = ezdxf.ARROWS.closed_filled
  23. point_end = rotate_point_around_another(point_end, self.center, self.route)
  24. point_arrow = rotate_point_around_another(point_arrow, self.center, self.route)
  25. point_s_end = rotate_point_around_another(point_s_end, self.center, self.route)
  26. point_s_arrow = rotate_point_around_another(point_s_arrow, self.center, self.route)
  27. point_text = rotate_point_around_another(point_text, self.center, self.route)
  28. angle = math.degrees(self.route)
  29. # 用风类型 0:未指定 1:进风 2: 用风 3:回风
  30. # 0、1 是绿色箭头, 2、3是红色箭头
  31. if self.type == '2' or self.type == '3':
  32. d1 = core.find_point_on_line(point_s_arrow, point_s_end, 1 / 4)
  33. d2 = core.find_point_on_line(point_s_arrow, point_s_end, 3 / 4)
  34. p1, p2 = core.find_vector_on_d(d1,self.len/10,self.route)
  35. p3, p4 = core.find_vector_on_d(d2,self.len/10,self.route)
  36. # p1, p2 = core.line_point_normal_distance(point_s_arrow, point_s_end, 1 / 4, self.len/200)
  37. # p3, p4 = core.line_point_normal_distance(point_s_arrow, point_s_end, 3 / 4, self.len/200)
  38. self.msp.add_spline([point_s_arrow, p1, p4, point_s_end],dxfattribs={
  39. "color": self.get_color(),
  40. "layer": f"图层{self.layer}"
  41. })
  42. # dxfattribs = {
  43. # 'insert': point_text, 'style': 'msyh', 'color': '1', "layer":f"图层{self.layer}"}
  44. # self.msp.add_text(text="S", rotation=angle - 90, dxfattribs=dxfattribs,height=0.2*self.len).set_placement(point_text, align=TextEntityAlignment.CENTER)
  45. self.msp.add_line(point_end, point_arrow, {
  46. "color": self.get_color(),
  47. "layer":f"图层{self.layer}"
  48. })
  49. # 2d 6
  50. self.msp.add_arrow(arrow, point_arrow, 6, angle, {
  51. "color": self.get_color(),
  52. "layer": f"图层{self.layer}"
  53. })
  54. def get_color(self):
  55. if self.type == '2' or self.type == '3':
  56. return '1'
  57. else:
  58. return '3'