算法更新: delivery v1.2.1、平整度v1.5、测距v2.2、整车配准v1.3 适配器: vehicle-registration 新增、各算法 manifest 和 adapter 更新 后端: taskCadFiles/source 字段迁移、derivedPointClouds 注册、取消任务联动 前端: ElapsedTime 时长显示、两步算法流程、canRun 逻辑修复 文档: 新增5份算法性能分析报告
55 lines
2.4 KiB
Python
55 lines
2.4 KiB
Python
from OCC.Core.STEPControl import STEPControl_Reader
|
||
from OCC.Core.IFSelect import IFSelect_RetDone
|
||
from OCC.Core.BRepMesh import BRepMesh_IncrementalMesh
|
||
from OCC.Core.StlAPI import StlAPI_Writer
|
||
import time
|
||
import argparse # 命令行参数解析
|
||
|
||
def step2lightweight_stl(mesh_precision, input_step, output_stl):
|
||
"""STEP转轻量化STL,纯后台处理,无显示,体积暴减"""
|
||
start_total = time.time()
|
||
# 1. 读取STEP文件
|
||
print(f"【1/3】读取STEP文件:{input_step}")
|
||
step_reader = STEPControl_Reader()
|
||
if step_reader.ReadFile(input_step) != IFSelect_RetDone:
|
||
raise Exception("STEP文件读取失败!检查路径/文件完整性")
|
||
step_reader.TransferRoots()
|
||
shape = step_reader.OneShape()
|
||
print(f"【1/3】读取完成,耗时:{time.time()-start_total:.2f}秒")
|
||
|
||
# 2. 核心:网格离散化
|
||
print(f"【2/3】网格离散化(精度{mesh_precision}mm),开始轻量化...")
|
||
mesh = BRepMesh_IncrementalMesh(shape, mesh_precision, False)
|
||
mesh.Perform()
|
||
if not mesh.IsDone():
|
||
raise Exception("网格离散化失败!")
|
||
print(f"【2/3】轻量化完成,耗时:{time.time()-start_total:.2f}秒")
|
||
|
||
# 3. 保存为STL
|
||
print(f"【3/3】保存轻量化STL:{output_stl}")
|
||
stl_writer = StlAPI_Writer()
|
||
stl_writer.Write(shape, output_stl)
|
||
|
||
total_time = time.time() - start_total
|
||
print(f"✅ 转换完成!总耗时:{total_time:.2f}秒")
|
||
print(f"💡 提示:STL文件可直接用FreeCAD/MeshLab/3D Viewer打开")
|
||
|
||
if __name__ == "__main__":
|
||
# ========== 命令行参数定义 ==========
|
||
parser = argparse.ArgumentParser(description="STEP 转 轻量化 STL (命令行args版)")
|
||
parser.add_argument("--precision", "-p", type=float, default=1.0, help="网格精度 MESH_PRECISION (mm),越大文件越小")
|
||
parser.add_argument("--input", "-i", type=str, default="High_Speed_Data/CAD/11.step", help="输入STEP文件路径 INPUT_STEP_PATH")
|
||
parser.add_argument("--output", "-o", type=str, default="High_Speed_Data/Mesh/11.stl", help="输出STL文件路径 OUTPUT_STL_PATH")
|
||
|
||
# 解析参数
|
||
args = parser.parse_args()
|
||
|
||
# 调用转换函数
|
||
try:
|
||
step2lightweight_stl(
|
||
mesh_precision=args.precision,
|
||
input_step=args.input,
|
||
output_stl=args.output
|
||
)
|
||
except Exception as e:
|
||
print(f"❌ 处理失败:{str(e)}") |