|
@ -6,37 +6,16 @@ CAD模型处理脚本 |
|
|
- 空间信息:包围盒数据 |
|
|
- 空间信息:包围盒数据 |
|
|
""" |
|
|
""" |
|
|
|
|
|
|
|
|
import os |
|
|
|
|
|
import pickle # 用于数据序列化 |
|
|
|
|
|
import argparse # 命令行参数解析 |
|
|
|
|
|
import numpy as np |
|
|
import numpy as np |
|
|
from tqdm import tqdm # 进度条显示 |
|
|
|
|
|
from concurrent.futures import ProcessPoolExecutor, as_completed, TimeoutError # 并行处理 |
|
|
|
|
|
import logging |
|
|
|
|
|
from datetime import datetime |
|
|
|
|
|
from scipy.spatial import cKDTree |
|
|
|
|
|
from brep2sdf.utils.logger import logger |
|
|
from brep2sdf.utils.logger import logger |
|
|
import tempfile |
|
|
|
|
|
import trimesh |
|
|
import trimesh |
|
|
from trimesh.proximity import ProximityQuery |
|
|
from trimesh.proximity import ProximityQuery |
|
|
|
|
|
|
|
|
# 导入OpenCASCADE相关库 |
|
|
# 导入OpenCASCADE相关库 |
|
|
from OCC.Core.STEPControl import STEPControl_Reader # STEP文件读取器 |
|
|
|
|
|
from OCC.Core.TopExp import TopExp_Explorer, topexp # 拓扑结构遍历 |
|
|
|
|
|
from OCC.Core.TopAbs import TopAbs_FACE, TopAbs_EDGE, TopAbs_VERTEX # 拓扑类型定义 |
|
|
|
|
|
from OCC.Core.BRep import BRep_Tool # B-rep工具 |
|
|
|
|
|
from OCC.Core.BRepMesh import BRepMesh_IncrementalMesh # 网格剖分 |
|
|
|
|
|
from OCC.Core.TopLoc import TopLoc_Location # 位置变换 |
|
|
|
|
|
from OCC.Core.IFSelect import IFSelect_RetDone,IFSelect_RetError, IFSelect_RetFail, IFSelect_RetVoid # 操作状态码 |
|
|
|
|
|
from OCC.Core.TopTools import TopTools_IndexedDataMapOfShapeListOfShape # 形状映射 |
|
|
|
|
|
from OCC.Core.BRepBndLib import brepbndlib # 包围盒计算 |
|
|
|
|
|
from OCC.Core.Bnd import Bnd_Box # 包围盒 |
|
|
|
|
|
from OCC.Core.TopoDS import TopoDS_Shape, topods, TopoDS_Vertex # 拓扑数据结构 |
|
|
|
|
|
from OCC.Core.StlAPI import StlAPI_Writer |
|
|
|
|
|
|
|
|
|
|
|
# 导入配置 |
|
|
# 导入配置 |
|
|
from brep2sdf.config.default_config import get_default_config |
|
|
from brep2sdf.config.default_config import get_default_config |
|
|
from brep2sdf.data.utils import get_bbox, normalize, get_adjacency_info,load_step, preprocess_mesh,batch_compute_normals |
|
|
from brep2sdf.data.utils import batch_compute_normals |
|
|
|
|
|
|
|
|
config = get_default_config() |
|
|
config = get_default_config() |
|
|
|
|
|
|
|
@ -168,7 +147,7 @@ def sample_sdf_points_and_normals( |
|
|
|
|
|
|
|
|
# 添加调试信息 |
|
|
# 添加调试信息 |
|
|
if i == 0: # 只打印第一个批次的统计信息 |
|
|
if i == 0: # 只打印第一个批次的统计信息 |
|
|
logger.debug(f"批次统计 (首批次):") |
|
|
logger.debug("批次统计 (首批次):") |
|
|
logger.debug(f" 法向量范围: [{normals_batch.min():.4f}, {normals_batch.max():.4f}]") |
|
|
logger.debug(f" 法向量范围: [{normals_batch.min():.4f}, {normals_batch.max():.4f}]") |
|
|
logger.debug(f" 法向量长度: {np.linalg.norm(normals_batch, axis=1).mean():.4f}") |
|
|
logger.debug(f" 法向量长度: {np.linalg.norm(normals_batch, axis=1).mean():.4f}") |
|
|
logger.debug(f" 距离范围: [{batch_distances.min():.4f}, {batch_distances.max():.4f}]") |
|
|
logger.debug(f" 距离范围: [{batch_distances.min():.4f}, {batch_distances.max():.4f}]") |
|
@ -196,7 +175,7 @@ def sample_sdf_points_and_normals( |
|
|
|
|
|
|
|
|
# 验证法向量 |
|
|
# 验证法向量 |
|
|
normal_lengths = np.linalg.norm(sampled_normals, axis=1) |
|
|
normal_lengths = np.linalg.norm(sampled_normals, axis=1) |
|
|
logger.debug(f"最终法向量统计:") |
|
|
logger.debug("最终法向量统计:") |
|
|
logger.debug(f" 形状: {sampled_normals.shape}") |
|
|
logger.debug(f" 形状: {sampled_normals.shape}") |
|
|
logger.debug(f" 长度: min={normal_lengths.min():.4f}, max={normal_lengths.max():.4f}, mean={normal_lengths.mean():.4f}") |
|
|
logger.debug(f" 长度: min={normal_lengths.min():.4f}, max={normal_lengths.max():.4f}, mean={normal_lengths.mean():.4f}") |
|
|
logger.debug(f" 分量范围: x=[{sampled_normals[:,0].min():.4f}, {sampled_normals[:,0].max():.4f}]") |
|
|
logger.debug(f" 分量范围: x=[{sampled_normals[:,0].min():.4f}, {sampled_normals[:,0].max():.4f}]") |
|
@ -226,7 +205,7 @@ def sample_sdf_points_and_normals( |
|
|
|
|
|
|
|
|
# 添加SDF分布验证 |
|
|
# 添加SDF分布验证 |
|
|
final_sdf = combined_data[:, -1] |
|
|
final_sdf = combined_data[:, -1] |
|
|
logger.debug(f"最终SDF分布验证:") |
|
|
logger.debug("最终SDF分布验证:") |
|
|
logger.debug(f" 正值点数: {np.sum(final_sdf > 0)}") |
|
|
logger.debug(f" 正值点数: {np.sum(final_sdf > 0)}") |
|
|
logger.debug(f" 负值点数: {np.sum(final_sdf < 0)}") |
|
|
logger.debug(f" 负值点数: {np.sum(final_sdf < 0)}") |
|
|
logger.debug(f" 零值点数: {np.sum(np.abs(final_sdf) < 1e-6)}") |
|
|
logger.debug(f" 零值点数: {np.sum(np.abs(final_sdf) < 1e-6)}") |
|
|