SheetMetal_Unfold方法 FreeCAD_SheetMetal deepwiki 源码笔记
FreeCAD_SheetMetal
shaise/FreeCAD_钣金 | DeepWiki --- shaise/FreeCAD_SheetMetal | DeepWiki
您询问的是 SheetMetal_Unfold 方法,这是 FreeCAD SheetMetal 工作台中用于展开钣金零件的核心功能。
核心展开方法
SheetMetal 工作台提供两个主要的展开方法:
1. 新版展开器 (V2) -unfold
函数
新版展开器位于 SheetMetalNewUnfolder.py
中,使用基于图论的方法: SheetMetalNewUnfolder.py:1226-1231
该函数接收三个参数:
shape
: 钣金零件的 Part.Shape 对象root_face_index
: 参考面的索引bac
: 弯曲余量计算器
展开过程包括:
- 构建切面图 SheetMetalNewUnfolder.py:1232
- 估算厚度 SheetMetalNewUnfolder.py:1233
- 创建最小生成树 SheetMetalNewUnfolder.py:1244
- 处理弯曲变换 SheetMetalNewUnfolder.py:1278-1280
2. 旧版展开器 (V1) -getUnfold
函数
旧版展开器位于 SheetMetalUnfolder.py
中,使用基于树结构的方法: SheetMetalUnfolder.py:2857-2876
该方法创建 SheetTree
对象来分析零件拓扑结构并执行展开。
统一接口 -SMUnfold
类
两个展开器通过 SMUnfold
类统一调用,位于 SheetMetalUnfoldCmd.py
: SheetMetalUnfoldCmd.py:276-285
系统会根据 Python 版本和 NetworkX 库的可用性自动选择合适的展开器: SheetMetalUnfoldCmd.py:282-285
新版展开器调用SheetMetalUnfoldCmd.py:223-248
旧版展开器调用SheetMetalUnfoldCmd.py:250-274
高级接口 -getUnfold
函数
新版展开器还提供了更高级的接口: SheetMetalNewUnfolder.py:1345-1379
该函数处理坐标变换、草图生成和实体创建,返回展开后的面、实体、弯曲线和法向量。
Notes
展开方法的选择是自动的,新版展开器需要 Python 3.10+ 和 NetworkX 库。两个版本都支持 K 因子计算和草图生成功能。新版展开器在处理复杂几何形状时更加稳健,而旧版展开器作为后备选项确保兼容性。
变换过程概述
在新版展开器的 unfold
函数中,系统通过以下步骤将所有面变换到参考面的投影平面:
1. 构建有向图和路径计算
首先,系统为每个面计算从参考面到该面的最短路径: SheetMetalNewUnfolder.py:1307-1309
2. 变换矩阵累积
对于每个面,系统沿着从参考面到该面的路径累积变换矩阵: SheetMetalNewUnfolder.py:1310-1319
这里使用 reduce()
函数将路径上所有的 unbend_transform
矩阵相乘,得到最终的变换矩阵。
3. 应用变换到弯曲面
对于弯曲的圆柱面,系统应用累积的变换矩阵到展开后的几何: SheetMetalNewUnfolder.py:1321-1324
4. 应用变换到平面
对于平面,系统直接将变换应用到面的边: SheetMetalNewUnfolder.py:1327-1334
5. 变换矩阵的计算
每个弯曲面的 unbend_transform
是通过 compute_unbend_transform
函数计算的: SheetMetalNewUnfolder.py:1278-1280
这个变换矩阵包含了将弯曲面展开并对齐到前一个面所需的所有几何变换。
6. 最终对齐
在 getUnfold
函数中,所有展开的几何都会通过 sketch_align_transform
进行最终对齐: SheetMetalNewUnfolder.py:1362-1367
变换链的工作原理
整个过程可以理解为一个变换链:
- 参考面保持不动
- 第一个弯曲面通过其
unbend_transform
展开到参考面平面 - 第二个面通过第一个面的变换 × 第二个面的变换展开到参考面平面
- 依此类推,每个面都通过路径上所有变换的乘积最终对齐到参考面
这种方法确保了所有面都能正确地展开到同一个平面上,保持了钣金零件的几何关系和尺寸精度。
Notes
这个变换系统是新版展开器的核心创新,它使用图论和矩阵变换来处理复杂的钣金几何,比旧版展开器更加稳健和精确。每个变换矩阵都包含了弯曲补偿、旋转和平移等所有必要的几何操作。
您询问的是 compute_unbend_transform
函数中使用的变换矩阵的具体类型和结构。
变换矩阵的组成
在 compute_unbend_transform
函数中,主要使用了四种类型的变换矩阵:
1. 对齐变换矩阵 (Alignment Transform)
这是一个 4x4 齐次变换矩阵,用于建立局部坐标系: SheetMetalNewUnfolder.py:1191-1192
该矩阵由位置向量 lcs_base_point
和旋转矩阵 lcs_rotation
组成,将局部坐标系对齐到全局坐标系。
2. 弯曲余量变换矩阵 (Allowance Transform)
这是一个简单的平移矩阵,沿 Y 轴方向平移弯曲余量: SheetMetalNewUnfolder.py:1200-1205
这是一个标准的 4x4 齐次变换矩阵,只在 Y 方向上有平移分量 bend_allowance
。
3. 旋转变换矩阵 (Rotation Transform)
绕 X 轴旋转的变换矩阵,用于展开弯曲: SheetMetalNewUnfolder.py:1206-1209
旋转角度根据弯曲方向和弯曲角度确定。
4. 平移变换矩阵 (Translation Transform)
沿 Z 轴方向的平移矩阵: SheetMetalNewUnfolder.py:1210-1215
平移距离为弯曲半径,方向根据弯曲方向确定。
最终变换矩阵的组合
所有这些变换矩阵通过以下顺序组合成最终的 overall_transform
: SheetMetalNewUnfolder.py:1218-1223
变换顺序为:
- 逆对齐变换(回到局部坐标系)
- 平移-旋转-逆平移组合(展开弯曲)
- 弯曲余量补偿
- 对齐变换(回到全局坐标系)
矩阵类型
所有这些都是标准的 4x4 齐次变换矩阵,使用 FreeCAD 的 Matrix
类表示。这种矩阵格式允许将旋转、平移、缩放等变换统一表示和组合。
Notes
这些变换矩阵都是标准的齐次变换矩阵,遵循计算机图形学中的变换矩阵规范。通过矩阵乘法的组合,可以实现复杂的几何变换,确保钣金展开的精确性。
您想要一个具体的 90 度弯曲变换例子。让我基于代码中的变换矩阵计算来给您一个具体的数值示例。
90度弯曲变换的具体例子
假设我们有一个简单的钣金零件,具有以下参数:
- 弯曲角度:90度 (π/2 弧度)
- 弯曲半径:5.0mm
- 材料厚度:2.0mm
- K因子:0.4 (ANSI标准)
- 弯曲方向:向上 (BendDirection.UP)
1. 对齐变换矩阵 (Alignment Transform)SheetMetalNewUnfolder.py:1191-1192
假设局部坐标系的基点为 (10, 0, 0),旋转为单位矩阵,则:
alignment_transform = [ 1, 0, 0, 10, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1
]
2. 弯曲余量变换矩阵SheetMetalNewUnfolder.py:1196-1205
对于90度弯曲,弯曲余量计算为:
- 弯曲余量 = K因子 × π × (半径 + K因子 × 厚度) × (角度/180°)
- 弯曲余量 = 0.4 × π × (5.0 + 0.4 × 2.0) × (90/180) ≈ 7.54mm
allowance_transform = [ 1, 0, 0, 0, 0, 1, 0, 7.54, 0, 0, 1, 0, 0, 0, 0, 1
]
3. 旋转变换矩阵SheetMetalNewUnfolder.py:1206-1209
对于向上弯曲90度,绕X轴旋转-90度:
rot = [ 1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1
]
4. 平移变换矩阵SheetMetalNewUnfolder.py:1210-1215
沿Z轴平移半径距离:
translate = [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 5.0, 0, 0, 0, 1
]
5. 最终变换组合SheetMetalNewUnfolder.py:1218-1223
变换顺序为:
alignment_transform.inverse()
- 回到局部坐标系translate * rot * translate.inverse()
- 展开弯曲allowance_transform
- 弯曲余量补偿alignment_transform
- 回到全局坐标系
最终的 overall_transform
矩阵将是这些矩阵的乘积,用于将弯曲面上的点变换到展开的平面位置。
Notes
这个例子展示了新版展开器如何通过精确的数学计算来处理90度弯曲。每个变换矩阵都有其特定的几何意义,组合后能够准确地将3D弯曲几何展开到2D平面上,同时考虑了材料的弯曲余量。
总结,用的是把所有3d图形面用累加变换矩阵得到展开图