📖 功能概述
该组件不仅仅是"给构件施加一个Transform"这么简单。它的核心在于属性同步机制——在空间变换型材构件的同时,将其所有UserDictionary属性(包括几何属性如截面、路径、孔位、切割体,以及非几何属性如编号、单元号、图层等)全部从基准单元的参考坐标系转换到目标单元的坐标系。
典型应用场景:将某个"基准单元"的构件复制/转换到"目标单元"位置时,构件本身做空间变换,其所有属性也随之更新为与目标单元对应的值(如单元号、编号、加工图号、图层路径等自动替换)。
🧠 核心算法详解
一、表皮信息追踪
该组件的工作基于"构件→基准表皮→目标表皮"的信息链路:
链路: 构件 → 它的面板ID → 基准表皮 → 目标表皮
具体流程:
1 通过构件的ReferenceID在Rhino场景中找到它的物件
2 读取构件的UserDictionary中的 面板ID 键值——这是它所属的"基准表皮"的GUID
3 通过该GUID找到基准表皮物件,获取其 单元号(例如 "A01-1")
4 通过输入"表皮"参数的ReferenceID找到目标表皮物件,获取其 单元号(例如 "B02-2")
5 用"目标单元号"替换图层路径和属性中的"基准单元号"
附加操作:如果基准表皮包含了"其他信息"(UserDictionary中),会将其复制到目标表皮的属性中。
二、几何属性同步(特殊处理列表)
以下UserDictionary键会在转换时进行特殊处理——即内容是几何体或平面,需要应用Transform变换,而非直接复制:
| 键名 | 处理方式 |
pln | 平面应用变换。如果行列式为负且型材为横向,翻转X轴方向。 |
面板ID | 直接替换为目标表皮的GUID。 |
单元号 | 直接替换为目标表皮的单元号字符串。 |
批次 | 直接替换为目标表皮的批次值。 |
拉伸-截面 | 截面Brep复制后应用变换。 |
拉伸-截面pln | 截面平面复制后应用变换。 |
拉伸-路径 | 路径Curve复制后应用变换。 |
截面-TS | 将已有的截面Transform与本次Transform复合(CompoundTransforms)。 |
起端切面 | 切面Brep复制后应用变换。 |
终端切面 | 切面Brep复制后应用变换。 |
内部切割体 | 所有切割体Brep逐一复制后应用变换。 |
圆孔 | 所有圆孔Brep逐一复制后应用变换。 |
机丝孔 | 所有机丝孔Brep逐一复制后应用变换。 |
沉头孔 | 所有沉头孔Brep逐一复制后应用变换。 |
编号 | 根据目标单元号和构件自身序号自动生成新编号,格式:{单元号字母}-{单元号数字}-{序号}。 |
加工图号 | 在自动生成的编号前加 JG- 前缀。 |
三、自动复制机制(Fallback)
除了以上特殊处理的键之外,原始构件属性中所有其他未被特别处理的键值对自动复制到输出的键值列表中。这意味着:
• 不需要在代码中逐一列出的自定义属性也会被保留
• 任意新增的UserDictionary键都能自动传递到输出
• 输出中的"键"和"值"列表包含了构件的全部属性
注意:这些值只是直接复制,不经过任何变换或替换处理。
四、图层路径替换
读取构件当前所在的图层路径(如 LK::A01-1::框架),用目标单元号(如 "B02-2")替换其中的基准单元号(如 "A01-1"),得到新的图层路径(如 LK::B02-2::框架)。
替换规则:直接字符串替换——将图层路径中出现的"基准单元号"全部替换为"目标单元号"。
五、pln 变换的特殊处理
pln(局部坐标平面)的变换有一个特殊情况:
当变换矩阵的行列式(Determinant)为负时,表示变换包含镜像。对于横向型材(横向/竖向=横向),组件会将变换后的平面X轴反转(new Plane(原点, -X轴, Y轴)),以确保平面方向与预期的型材姿态一致。
对于竖向型材,行列式<0时不需要翻转。这是因为横向型材在镜像后姿态需要额外调整,而竖向型材本身已可适应镜像结果。
⚙️ 完整执行流程
1. 数据获取:读取构件、转换矩阵、目标表皮三个输入。任一为空则退出。
2. 定位基准表皮:通过构件的"面板ID"找到基准表皮,提取基准单元号。
3. 定位目标表皮:通过目标表皮的ReferenceID找到目标表皮物件,提取目标单元号。如果基准表皮有"其他信息",复制到目标表皮。
4. 构件几何变换:复制构件Brep,施加Transform。
5. 属性处理(逐项执行):
a. 计算新图层:图层路径中替换单元号
b. 变换pln平面(含镜像特殊处理)
c. 替换面板ID为目标表皮GUID
d. 替换单元号为目标单元号
e. 替换批次为目标表皮批次
f. 变换拉伸-截面、拉伸-截面pln、拉伸-路径
g. 复合截面-TS变换
h. 变换起端/终端切面
i. 变换内部切割体、圆孔、机丝孔、沉头孔
j. 生成新编号和加工图号
k. 自动复制所有其他未处理的键值对
6. 输出:输出变换后构件、新图层路径、键列表和值列表。