SheetMetal_Unfold方法 FreeCAD_SheetMetal deepwiki 源码笔记

打印 上一主题 下一主题

主题 2130|帖子 2130|积分 6390

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),旋转为单位矩阵,则:
  1. alignment_transform = [  
  2.     1, 0, 0, 10,  
  3.     0, 1, 0, 0,  
  4.     0, 0, 1, 0,  
  5.     0, 0, 0, 1  
  6. ]  
复制代码
2. 弯曲余量变动矩阵SheetMetalNewUnfolder.py:1196-1205

对于90度弯曲,弯曲余量计算为:


  • 弯曲余量 = K因子 × π × (半径 + K因子 × 厚度) × (角度/180°)
  • 弯曲余量 = 0.4 × π × (5.0 + 0.4 × 2.0) × (90/180) ≈ 7.54mm
  1. allowance_transform = [  
  2.     1, 0, 0, 0,  
  3.     0, 1, 0, 7.54,  
  4.     0, 0, 1, 0,  
  5.     0, 0, 0, 1  
  6. ]  
复制代码
3. 旋转变动矩阵SheetMetalNewUnfolder.py:1206-1209

对于向上弯曲90度,绕X轴旋转-90度:
  1. rot = [  
  2.     1,  0,  0, 0,  
  3.     0,  0,  1, 0,  
  4.     0, -1,  0, 0,  
  5.     0,  0,  0, 1  
  6. ]  
复制代码
4. 平移变动矩阵SheetMetalNewUnfolder.py:1210-1215

沿Z轴平移半径距离:
  1. translate = [  
  2.     1, 0, 0, 0,  
  3.     0, 1, 0, 0,  
  4.     0, 0, 1, 5.0,  
  5.     0, 0, 0, 1  
  6. ]  
复制代码
5. 最终变动组合SheetMetalNewUnfolder.py:1218-1223

变动顺序为:

  • alignment_transform.inverse() - 回到局部坐标系
  • translate * rot * translate.inverse() - 展开弯曲
  • allowance_transform - 弯曲余量补偿
  • alignment_transform - 回到全局坐标系
最终的 overall_transform 矩阵将是这些矩阵的乘积,用于将弯曲面上的点变动到展开的平面位置。
Notes

这个例子展示了新版展开器怎样通过精确的数学计算来处置处罚90度弯曲。每个变动矩阵都有其特定的几何意义,组合后能够正确地将3D弯曲几何展开到2D平面上,同时思量了材料的弯曲余量。



总结,用的是把所有3d图形面用累加变动矩阵得到展开图

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表