obj_slcer.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import os
  2. import time
  3. from PIL import Image
  4. from selenium import webdriver
  5. from selenium.webdriver.common.by import By
  6. import pywinauto
  7. import pyautogui
  8. def slcer_3Dtiles(root, file):
  9. browser = webdriver.Chrome()
  10. browser.maximize_window()
  11. browser.get('http://localhost:9003/index.html#/data/model')
  12. # 选择 通用模型切片
  13. time.sleep(2)
  14. browser.find_element(By.XPATH, '//*[@id="right_box"]/div/div[1]/ul/a[8]/li/button').click()
  15. time.sleep(2)
  16. # 选择输入文件 obj
  17. browser.find_element(By.XPATH, '//*[@id="input_button"]/button[1]').click()
  18. time.sleep(1)
  19. # 使用pywinauto来选择文件
  20. app = pywinauto.Desktop()
  21. # 选择文件上传的窗口
  22. dlg = app["打开"]
  23. # 选择文件地址输入框,点击激活
  24. # dlg["Toolbar3"].click()
  25. # 键盘输入上传文件的路径
  26. # send_keys(r"D:\osg\wenxingyuan\test\tyzzkcc001.obj")
  27. # 键盘输入回车,打开该路径
  28. # send_keys("{VK_RETURN}")
  29. # 选中文件名输入框,输入文件名
  30. dlg["文件名(&N):Edit"].type_keys(os.path.join(root, file))
  31. # dlg["文件名(&N):Edit"].type_keys(r'D:\osg\wenxingyuan\test\tyzzkcc001.obj')
  32. # 点击打开
  33. dlg["打开(&O)"].click()
  34. time.sleep(2)
  35. # obj设置取消翻转YZ
  36. browser.find_element(By.XPATH, '//*[@id="setting_general"]').click()
  37. time.sleep(2)
  38. input = browser.find_element(By.XPATH, '//*[@id="switch_style"]')
  39. time.sleep(2)
  40. if not input.is_selected():
  41. browser.find_element(By.XPATH,
  42. '//*[@id="all_right"]/div[3]/div/div/div[2]/div/div/div[3]/div[1]/div[1]').click()
  43. time.sleep(2)
  44. browser.find_element(By.XPATH, '//*[@id="all_right"]/div[3]/div/div/div[3]/button[2]').click()
  45. # 操作鼠标选择存储类型
  46. # 获取鼠标位置(x,y)
  47. # pyautogui.position()
  48. time.sleep(2)
  49. pyautogui.moveTo(3552, 667)
  50. pyautogui.click()
  51. time.sleep(2)
  52. pyautogui.moveTo(3553, 732)
  53. pyautogui.click()
  54. time.sleep(2)
  55. # 数据存储
  56. browser.find_element(By.XPATH,
  57. '//*[@id="all_right"]/div[1]/div/div[16]/div/div[3]/div[4]/div[1]/button').click()
  58. app = pywinauto.Desktop()
  59. # 选择文件上传的窗口
  60. dlg = app["选择文件夹"]
  61. # print(dlg.print_control_identifiers())
  62. # 选择文件地址输入框,点击激活
  63. dlg["Toolbar3"].click()
  64. # 键盘输入上传文件的路径
  65. # send_keys(r"D:\osg\wenxingyuan\test\111")
  66. # 键盘输入回车,打开该路径
  67. # send_keys("{VK_RETURN}")
  68. # 选中文件名输入框,输入文件名
  69. if not os.path.exists(os.path.join(root, file.split('.')[0])):
  70. os.makedirs(os.path.join(root, file.split('.')[0]))
  71. time.sleep(3)
  72. dlg["文件夹:Edit"].type_keys(os.path.join(root, file.split('.')[0]))
  73. # 点击打开
  74. dlg["选择文件夹2"].click()
  75. time.sleep(1)
  76. # 提交处理
  77. browser.find_element(By.XPATH, '//*[@id="newfile_button"]/button').click()
  78. if __name__ == '__main__':
  79. input_path = r'C:\Users\admin\Desktop\新建文件夹'
  80. output_path = r'C:\Users\admin\Desktop\新建文件夹'
  81. # dds旋转转png、osg转obj
  82. for root, dirs, files in os.walk(input_path):
  83. for file in files:
  84. if os.path.splitext(file)[-1] in ['.dds']:
  85. im = Image.open(os.path.join(root, file))
  86. im2 = im.transpose(Image.Transpose.FLIP_TOP_BOTTOM)
  87. if not os.path.exists(os.path.join(output_path)):
  88. os.makedirs(os.path.join(output_path))
  89. im2.save(os.path.join(output_path, file.replace('dds', 'png')))
  90. if os.path.splitext(file)[-1] in ['.osg']:
  91. cmd = r'osgconv.exe {osg_input_path} {osg_output_path}'.format(osg_input_path=os.path.join(root, file),
  92. osg_output_path=os.path.join(output_path,
  93. file.replace('osg', 'obj')))
  94. os.system(cmd)
  95. # mtl文件 dds替换为png
  96. for root, dirs, files in os.walk(output_path):
  97. for file in files:
  98. if os.path.splitext(file)[-1] in ['.mtl']:
  99. with open(os.path.join(root, file), 'r') as f:
  100. mtl_data = f.read()
  101. with open(os.path.join(root, file), 'w') as f1:
  102. f1.write(mtl_data.replace('dds', 'png'))
  103. # 3Dtiles 切片
  104. for root, dirs, files in os.walk(output_path):
  105. for file in files:
  106. if os.path.splitext(file)[-1] in ['.obj']:
  107. if file.split('.')[0] not in os.listdir(os.path.join(root)):
  108. slcer_3Dtiles(root, file)