📖 功能概述
该组件不仅仅是"给构件施加一个Transform"这么简单。它的核心在于属性同步机制 ——在空间变换型材构件的同时,读取其 UserDictionary,并把属性分为变换、替换、重新生成和原样复制四类,最终以键/值并行列表 输出。组件不会在这里把整套输出属性直接写回新 Brep;但基准表皮的“其他信息”会直接写入目标表皮 Rhino 对象。
典型应用场景:将某个"基准单元"的构件复制/转换到"目标单元"位置时,构件本身做空间变换,其所有属性也随之更新为与目标单元对应的值(如单元号、编号、加工图号、图层路径等自动替换)。
🧠 核心算法详解 图 1:构件副本执行空间变换,属性按“变换、替换、生成、原样复制”分类处理;键值作为列表输出,而“其他信息”会直接写入目标表皮属性。
一、表皮信息追踪
该组件的工作基于"构件→基准表皮→目标表皮"的信息链路:
链路: 构件 → 它的面板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. 输出: 输出变换后构件、新图层路径、键列表和值列表。