ObjTS LK模型转换 · OTS

对LK单元体构件施加空间坐标变换,同时同步更新其所有关联属性(图层、单元号、孔位、截面、切割体等)
📂 LK → Util 📄 ObjTS.cs 🔄 空间变换 🏷️ 属性更新

📖 功能概述

该组件不仅仅是"给构件施加一个Transform"这么简单。它的核心在于属性同步机制——在空间变换型材构件的同时,将其所有UserDictionary属性(包括几何属性如截面、路径、孔位、切割体,以及非几何属性如编号、单元号、图层等)全部从基准单元的参考坐标系转换到目标单元的坐标系。

典型应用场景:将某个"基准单元"的构件复制/转换到"目标单元"位置时,构件本身做空间变换,其所有属性也随之更新为与目标单元对应的值(如单元号、编号、加工图号、图层路径等自动替换)。

📥 输入参数

名称类型必填说明
构件 Brep 必填 需要转换的LK系统构件模型。必须存在于Rhino场景中且有ReferenceID。其属性中的"面板ID"用于定位基准表皮。
转换 Transform 必填 空间变换数据(4x4矩阵),通常由 UtilTS(TS) 组件根据基准平面和目标平面生成。
表皮 Brep 必填 目标位置的表皮模型。用于提取目标单元号、批次等信息,赋值给转换后的构件。

📤 输出参数

名称类型说明
构件 Brep 应用空间变换后的构件模型(几何形体已变换到目标位置)。
图层 Text 基于目标单元号替换后的完整图层路径。例如:原图层 LK-A01- → 替换为 LK-B02-
Text 转换后构件UserDictionary中所有键名的列表(包括特殊处理和自动复制的)。列表
Generic 与"键"对应的所有值列表,一一对应。列表

🧠 核心算法详解

一、表皮信息追踪

该组件的工作基于"构件→基准表皮→目标表皮"的信息链路:

链路: 构件 → 它的面板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. 输出:输出变换后构件、新图层路径、键列表和值列表。

🧪 典型使用场景

场景详细说明
单元体构件复制到目标位置 在装配工作中,从基准单元复制一组构件到多个目标单元时,对每个目标单元使用该组件+对应的Transform+对应的目标表皮,自动完成构件旋转平移和属性更新。
图层自动分类 转换后的构件图层路径自动更新为目标单元的图层路径,无需手动调整图层分配。
属性批量重编号 通过编号和加工图号的自动生成逻辑,每个复制到目标单元的构件自动获得新的编号和加工图号,无需手工逐个修改。

⚠️ 注意事项

📋 组件信息

名称LK模型转换
英文名OTS
分类LK → Util
Exposure默认
基类GH_Component (无按钮)
文件ObjTS.cs
GUID{EF53EACD-1E29-48AE-8F65-37CB9911ED46}