WindBridgeDrawer.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import math
  2. import time
  3. import ezdxf
  4. import core
  5. from drawer import WindFlowDrawer
  6. class WindBridgeDrawer:
  7. def __init__(self, msp, center, tun1_id, tun2_id, layer_id, route, gap, color=0, is_cross=True):
  8. self.msp = msp
  9. self.gap = gap
  10. self.route = route
  11. self.is_cross = is_cross
  12. self.color = color
  13. self.layer_id = layer_id
  14. self.tun2_id = tun2_id
  15. self.tun1_id = tun1_id
  16. self.center = center
  17. def draw_wind_bridge_drawer(self):
  18. width = self.gap * 1.7
  19. line_top_middle = self.center[0], self.center[1] + width / 2
  20. line_top_left = line_top_middle[0] - width * 1.25 / 2, line_top_middle[1]
  21. line_top_left_2 = line_top_left[0] - math.cos(math.pi / 6) * width * 0.625, line_top_left[1] + math.sin(
  22. math.pi / 6) * width * 0.625
  23. line_top_right = core.symmetric_point(line_top_left, line_top_middle)
  24. line_top_right_2 = core.symmetric_point(line_top_left_2, (line_top_middle[0], line_top_middle[1] + math.sin(
  25. math.pi / 6) * width * 0.625))
  26. line_bottom_middle = self.center[0], self.center[1] - width / 2
  27. line_bottom_left = line_bottom_middle[0] - width * 1.25 / 2, line_bottom_middle[1]
  28. line_bottom_left_2 = line_bottom_left[0] - math.cos(math.pi / 6) * width * 0.625, line_bottom_left[
  29. 1] - math.sin(
  30. math.pi / 6) * width * 0.625
  31. line_bottom_right = core.symmetric_point(line_bottom_left, line_bottom_middle)
  32. line_bottom_right_2 = core.symmetric_point(line_bottom_left_2,
  33. (line_bottom_middle[0], line_bottom_middle[1] - math.sin(
  34. math.pi / 6) * width * 0.625))
  35. line_top_left = core.rotate_point_around_another(line_top_left, self.center, self.route)
  36. line_top_left_2 = core.rotate_point_around_another(line_top_left_2, self.center, self.route)
  37. line_top_right = core.rotate_point_around_another(line_top_right, self.center, self.route)
  38. line_top_right_2 = core.rotate_point_around_another(line_top_right_2, self.center, self.route)
  39. line_bottom_left = core.rotate_point_around_another(line_bottom_left, self.center, self.route)
  40. line_bottom_left_2 = core.rotate_point_around_another(line_bottom_left_2, self.center, self.route)
  41. line_bottom_right = core.rotate_point_around_another(line_bottom_right, self.center, self.route)
  42. line_bottom_right_2 = core.rotate_point_around_another(line_bottom_right_2, self.center, self.route)
  43. self.msp.add_line(line_top_left, line_top_left_2)
  44. self.msp.add_line(line_top_right, line_top_left)
  45. self.msp.add_line(line_top_right, line_top_right_2)
  46. self.msp.add_line(line_bottom_left, line_bottom_right)
  47. self.msp.add_line(line_bottom_right, line_bottom_right_2)
  48. self.msp.add_line(line_bottom_left, line_bottom_left_2)
  49. if __name__ == '__main__':
  50. doc = ezdxf.new()
  51. msp = doc.modelspace()
  52. wbd = WindBridgeDrawer(msp, (0, 0), 100, 10, 0, 0, 100)
  53. wbd.draw_wind_bridge_drawer()
  54. file_name = f'shaft{str(time.time())}.dxf'
  55. print("保存文件 " + file_name)
  56. doc.saveas(file_name)