跳到主要内容

Shape

ShapeNativeSession 与不透明 ShapeHandle 的不可变 Python 包装。用户应从 Model 获取 Shape;直接构造会让代码依赖底层所有权细节。

身份与所有权

即使几何等价,两个包装对象也可能引用不同原生 Handle。几何比较应使用测量、拓扑或导出证据,而不是 Python 对象身份。涉及多个 Shape 的操作要求完全相同的 Session。

with cad.Model() as model:
left = model.box(10, 10, 10)
right = model.translate(left, 20, 0, 0)
clearance = left.distance_to(right)

测量

成员返回值说明
kindstrSolid、Face、Wire 等原生形状类别
volumefloat非体积几何通常为零
areafloat模型单位平方下的表面积
lengthfloat模型单位下的曲线或边长度
center_of_mass(x, y, z)均匀密度质量属性质心
bbox六个浮点数(xmin, ymin, zmin, xmax, ymax, zmax)
topologydict[str, int]Solid、Shell、Face、Wire、Edge 与 Vertex 数量
distance_to(other)float最小距离;只允许同 Session

describe(detail="summary") 把测量组合为 JSON-safe 列表和映射;detail="mesh" 还包含三角网格。其他 detail 值会抛出 ValueError

验证

validate() 返回 OperationReport,检查测量是否有限,并为通常预期单一 Solid 的 Shape 报告异常多实体状态。这是低成本结构检查,不能替代应用自己的尺寸或可制造性验证。

report = body.validate()
if not report.ok:
raise RuntimeError(report.to_dict())

网格与预览

成员契约
mesh(deflection=0.1)返回展平的顶点与三角形索引数组
preview_mesh_buffer(deflection=0.35)返回紧凑原生预览缓冲区
preview_glb(deflection=0.35)把缓冲区转换为内存中的 GLB 字节
export_preview_glb(path, deflection=0.35)写出浏览器可用的 GLB

更小的 deflection 通常产生更密集的近似网格和更大输出。三角网格是派生显示几何;需要精确几何时使用 STEP/BREP 与原生测量。

曲面证据

face_properties(u=0.5, v=0.5) 计算 Face 上的点和法向。surface_metrics() 返回仿真预处理需要的原生 Face 测量。contact_metrics(other) 返回两个同 Session Face 的接近程度与相对方向证据。

归一化 (u, v) 的含义和返回字段取决于曲面类型,不要假定所有曲面都提供完全相同的证据。

导出

body.export_step("out/part.step")
body.export_stl("out/part.stl", binary=True)
body.export_preview_glb("out/part.glb")

STEP 保留精确交换几何;STL 与预览 GLB 是三角近似。导出方法写入给定路径并返回 None,调用方应创建父目录并验证产物。

精确签名见自动生成的 Shape 参考,选择与子形状规则见拓扑、查询与交换