projection.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import json
  2. import time
  3. import ezdxf
  4. import requests
  5. # with open('tunLtsMap2.json', 'r',encoding='utf-8') as file:
  6. # data = json.load(file)
  7. def hex_to_rgb(hex_color):
  8. # 确保输入以 '#' 开头并且长度为 7
  9. if hex_color.startswith('#') and len(hex_color) == 7:
  10. # 去掉 '#' 并将字符串拆分为 RGB 部分
  11. hex_rgb = hex_color[1:]
  12. # 每两个字符一组转换为十进制数
  13. r = int(hex_rgb[0:2], 16)
  14. g = int(hex_rgb[2:4], 16)
  15. b = int(hex_rgb[4:6], 16)
  16. return r, g, b
  17. else:
  18. raise ValueError("Invalid hex color code")
  19. def request_graph_point(url):
  20. response = requests.get(url, timeout=10)
  21. print(f"请求耗时 {response.elapsed.total_seconds()} 秒")
  22. cad_json = {}
  23. if response.status_code == 200:
  24. cad_json = response.json() # 将响应内容解析为JSON格式
  25. else:
  26. print(f"请求失败,状态码:{response.status_code}")
  27. return cad_json
  28. data = request_graph_point("http://192.168.183.216:8008/tunCAD?modelid=1868855086453813249")
  29. # with open("tunLtsMap.json",encoding='utf-8') as r:
  30. # data = json.loads(r.read())
  31. layers_dict = {}
  32. for layer in data['layerMap']:
  33. layers_dict[layer[0]] = layer[1]
  34. vecL_points = []
  35. vec_points = []
  36. vecR_points = []
  37. plg_list = []
  38. for obj in data['tunLtsMap']:
  39. obj = obj[1]
  40. plg= {}
  41. vecL_series = [
  42. (obj['vecL1']['x'],- obj['vecL1']['z']),
  43. (obj['vecL2']['x'],- obj['vecL2']['z']),
  44. (obj['vecL3']['x'],- obj['vecL3']['z']),
  45. (obj['vecL4']['x'],- obj['vecL4']['z'])
  46. ]
  47. plg['vecL'] = vecL_series
  48. vecR_series = [
  49. (obj['vecR1']['x'],- obj['vecR1']['z']),
  50. (obj['vecR2']['x'],- obj['vecR2']['z']),
  51. (obj['vecR3']['x'],- obj['vecR3']['z']),
  52. (obj['vecR4']['x'],- obj['vecR4']['z'])
  53. ]
  54. plg['vecR'] = vecR_series
  55. vec_series = [
  56. (obj['vec1']['x'],- obj['vec1']['z']),
  57. (obj['vec2']['x'],- obj['vec2']['z']),
  58. (obj['vec3']['x'],- obj['vec3']['z']),
  59. (obj['vec4']['x'],- obj['vec4']['z'])
  60. ]
  61. plg['vec'] = vec_series
  62. plg['color'] = hex_to_rgb(layers_dict[obj['nlayerid']]['ncolor'])
  63. plg_list.append(plg)
  64. doc = ezdxf.new('R2018')
  65. msp = doc.modelspace()
  66. def draw_plg(color,points):
  67. hatch = msp.add_hatch()
  68. hatch.rgb=color
  69. hatch.layer =1
  70. edge_path = hatch.paths.add_edge_path()
  71. for i in range(3):
  72. edge_path.add_line(points[i], points[i+1])
  73. edge_path.add_line(points[-1], points[0])
  74. for plg in plg_list:
  75. color = plg['color']
  76. draw_plg((0,0,0), plg['vec'])
  77. draw_plg(plg['color'],plg['vecL'])
  78. draw_plg(plg['color'],plg['vecR'])
  79. doc.saveas(f'save/tuns{str(time.time())}.dxf')