同步更改数据
This commit is contained in:
1 parent
ecb58b2f59
commit
33ba8bb357
21 files changed
+2019472
-63
No files matched your search
@@ -0,0 +1,124 @@
|
||||
import numpy as np
|
||||
import open3d as o3d
|
||||
import math,os
|
||||
#矫正模型的方向,目前只支持水平旋转,
|
||||
#55084 55090 55092 55114 55367 55370 55372 55730 55844 55849 56559 56654 56750 75408
|
||||
|
||||
|
||||
|
||||
def rotate_vertex(x, y, z, axis, angle_degrees):
|
||||
"""
|
||||
围绕任意轴旋转顶点。
|
||||
axis是一个表示旋转轴的三元组 (ax, ay, az)。
|
||||
angle_degrees是旋转角度,以度为单位。
|
||||
"""
|
||||
# 将角度转换为弧度
|
||||
angle_radians = math.radians(angle_degrees)
|
||||
|
||||
# 将旋转轴转换为单位向量
|
||||
axis = np.array(axis)
|
||||
axis = axis / np.linalg.norm(axis)
|
||||
|
||||
# 将顶点位置转换为向量
|
||||
v = np.array([x, y, z])
|
||||
|
||||
# 应用罗德里格斯旋转公式
|
||||
v_rotated = (v * math.cos(angle_radians) +
|
||||
np.cross(axis, v) * math.sin(angle_radians) +
|
||||
axis * np.dot(axis, v) * (1 - math.cos(angle_radians)))
|
||||
|
||||
return v_rotated.tolist()
|
||||
|
||||
def transform_obj_file(source_file, target_file, axis, angle_degrees):
|
||||
"""
|
||||
读取 OBJ 文件,应用旋转,然后将结果保存到另一个文件。
|
||||
"""
|
||||
with open(source_file, 'r') as src:
|
||||
lines = src.readlines()
|
||||
|
||||
with open(target_file, 'w') as tgt:
|
||||
for line in lines:
|
||||
if line.startswith('v '):
|
||||
parts = line.split()
|
||||
x, y, z = map(float, parts[1:4])
|
||||
x_new, y_new, z_new = rotate_vertex(x, y, z, axis, angle_degrees)
|
||||
tgt.write(f"v {x_new} {y_new} {z_new}\n")
|
||||
else:
|
||||
tgt.write(line)
|
||||
|
||||
def list_files(directory):
|
||||
for root, dirs, files in os.walk(directory):
|
||||
for file in files:
|
||||
yield os.path.join(root, file)
|
||||
|
||||
# # #遍历文件夹下的所有文件
|
||||
# folder_path = 'G://obj_fix/print/wrong'
|
||||
# nums = 0
|
||||
# rotate_axis = (0, 1, 0) # 比如绕X轴旋转
|
||||
# for file_path in list_files(folder_path):
|
||||
# #print(file_path) G://obj_fix/print/around/preview\9023_preview_117.png
|
||||
# if "_preview.png" in file_path:
|
||||
# continue
|
||||
# if "_right.png" in file_path:
|
||||
# continue
|
||||
# if "_wait.png" in file_path:
|
||||
# continue
|
||||
# #获取pid 从 "G://obj_fix/print/around/preview\9023_preview_117.png" 中获取 9023 he 117
|
||||
# arrData = file_path.split('\\')
|
||||
# lastData = arrData[-1]
|
||||
# arrLastData = lastData.split('_')
|
||||
# if len(arrLastData) < 3:
|
||||
# print(lastData)
|
||||
# continue
|
||||
# pid = arrLastData[0]
|
||||
# angle = arrLastData[2].split('.')[0]
|
||||
# #判断 angle 第一个数字是否为 0
|
||||
|
||||
# source_obj = f'G://obj_fix/print/{pid}/{pid}.obj'
|
||||
# target_obj = f'G://obj_fix/print/{pid}/{pid}_new.obj'
|
||||
|
||||
# nums +=1
|
||||
# print(f"当前正在处理{pid},已处理至-{nums}",)
|
||||
# if str(angle[0]) == "0":
|
||||
# rotate_angle = -int(angle)
|
||||
# transform_obj_file(source_obj, target_obj, rotate_axis, rotate_angle)
|
||||
# else:
|
||||
# rotate_angle = int(angle)
|
||||
# transform_obj_file(source_obj, target_obj, rotate_axis, rotate_angle)
|
||||
# print(int(angle))
|
||||
# print(angle,angle[0])
|
||||
|
||||
|
||||
|
||||
# # 加载模型
|
||||
# mesh = o3d.io.read_triangle_mesh(target_obj, enable_post_processing=True)
|
||||
|
||||
# # 创建渲染窗口并添加模型
|
||||
# vis = o3d.visualization.Visualizer()
|
||||
# vis.create_window()
|
||||
# vis.add_geometry(mesh)
|
||||
|
||||
# # 设置渲染参数
|
||||
# render_option = vis.get_render_option()
|
||||
# render_option.point_size = 1.0
|
||||
|
||||
# # 渲染模型
|
||||
# vis.run()
|
||||
# vis.destroy_window()
|
||||
|
||||
|
||||
pid = "90864" # 98894 115123
|
||||
source_obj = f'G://obj_fix/auto/{pid}/{pid}.obj'
|
||||
target_obj = f'G://obj_fix/auto/{pid}/{pid}_90.obj'
|
||||
|
||||
#遍历文件夹下的所有文件 /data/datasets/temp/auto_preview_need_around
|
||||
for file_path in list_files('G://obj_fix/auto'):
|
||||
pid = file_path.split('\\')[-1].split('_')[0]
|
||||
# 使用示例:
|
||||
rotate_axis = (1, 0, 0) # 比如绕X轴旋转 0 x 轴
|
||||
rotate_angle = -90 # 以度为单位
|
||||
transform_obj_file(source_obj, target_obj, rotate_axis, rotate_angle)
|
||||
|
||||
# rotate_axis = (0, 1, 0) # 比如绕X轴旋转 0 x 轴
|
||||
# rotate_angle = 60 # 以度为单位
|
||||
# transform_obj_file(target_obj, target_obj, rotate_axis, rotate_angle)
|
||||
Reference in new issue
Block a user