📖 功能概述
该组件实现了一种最基本但非常重要的几何运算——由基准平面到目标平面的空间坐标变换。
输入两个任意空间平面(位置+朝向),组件利用 Transform.PlaneToPlane(基准平面, 目标平面) 计算出从第一个平面坐标系到第二个平面坐标系的4x4变换矩阵。这个输出可以直接接入 ObjTS(OTS) 组件或其他Grasshopper的Transform运算中。
虽然该组件的代码非常简洁,但它是整个LK系统构件转换流程中的关键上游组件——它为 ObjTS 提供了变换数据,而 ObjTS 则负责将变换应用到构件及其所有属性上。
配套使用: UtilTS(生成Transform)→ ObjTS(应用Transform到构件+更新属性)→ 构件的空间位置和所有关联属性同步转换。
📥 输入参数
| 名称 | 类型 | 必填 | 说明 |
| 基准平面 |
Plane |
必填 |
变换的源平面——即构件的当前位置和朝向。代表构件所在的"来源坐标系"。 |
| 目标平面 |
Plane |
必填 |
变换的目标平面——即构件转换后的位置和朝向。代表构件要去的"目标坐标系"。 |
📤 输出参数
| 名称 | 类型 | 说明 |
| 转换数据 |
Transform |
由基准平面到目标平面的4x4空间变换矩阵。可直接用于 ObjTS 组件或GH的 Transform 运算节点。 |
🧠 核心算法详解
一、PlaneToPlane 变换原理
Transform.PlaneToPlane(基准平面, 目标平面) 是Rhino Common提供的一种标准变换方法。其数学本质是:
变换矩阵 M = T₂ · R · T₁⁻¹
其中:
• T₁⁻¹ 将基准平移到原点并旋转对齐到世界XY平面
• R 可选的旋转缩放(如果两个平面的坐标系方向不同)
• T₂ 再从世界XY平面平移到目标平面的位置和朝向
这意味着:
• 基准平面上的点 (0,0,0) 会映射到目标平面的原点
• 基准平面的 X 轴方向会映射到目标平面的 X 轴方向
• 基准平面的 Y 轴方向会映射到目标平面的 Y 轴方向
• 平面之间的所有平移、旋转、缩放都会被正确计算
二、在LK系统中的典型应用
场景:将A单元的构件复制到B单元
步骤:
1 确定A单元的位置平面 P₁(基准平面)
2 确定B单元的位置平面 P₂(目标平面)
3 UtilTS 输出 Transform(P₁→P₂)
4 ObjTS 接收 构件(A单元) + Transform + 表皮(B单元)
5 ObjTS 输出变换后的构件,属性同步更新为B单元的单元号、编号、图层等
📦 附加类:LK_Transform
UtilTS.cs 文件中还定义了一个 LK_Transform 包装类,它扩展了Rhino标准Transform的功能:
LK_Transform 的特性:
• 同时保存变换矩阵、源平面、目标平面三个信息
• 支持隐式转换:LK_Transform 可以直接当 Transform 使用
• 支持显式转换:Transform 也可以转换回 LK_Transform(用于恢复平面信息)
用途:
虽然当前 UtilTS 组件直接输出标准 Transform,但 LK_Transform 类为未来的扩展提供了基础——如果需要追踪变换的源和目标平面信息,可以直接使用这个类。
⚙️ 执行流程
1. 输入获取:从DA读取基准平面和目标平面。任一为空则退出。
2. 计算变换:调用 Transform.PlaneToPlane(pln1, pln2)
3. 结果输出:将计算得到的Transform输出到"转换数据"参数。
整个过程只有3步,线性复杂度 O(1)。
🧪 典型使用场景
| 场景 | 详细说明 |
| 单元体构件复制 |
在装配建模中,当需要将基准单元的一组构件复制到其他单元时,使用该组件生成基准单元到目标单元的Transform,配合ObjTS完成构件复制和属性更新。 |
| 任意平面定位 |
基准平面和目标平面可以是任意空间位置和朝向(不限于正交坐标平面)。可用于将构件从一个非标准位置变换到另一个非标准位置。 |
| 批量转换 |
在Grasshopper中利用平面运算动态生成多个目标平面,一个基准平面对应多个目标平面,快速批量生成多个Transform数据。 |
⚠️ 注意事项
- PlaneToPlane 是刚性变换:它包含旋转和平移,但不包含缩放(行列式为1)。如果两个平面的比例不一致(如单位不同),需要额外处理。
- 平面方向影响结果:Transform的计算依赖于平面X轴和Y轴的方向。如果输入平面的X/Y轴方向不符合预期,输出的变换也会不同。
- 配合 ObjTS 使用:该组件单独使用时只生成变换矩阵,不直接修改任何模型。必须与ObjTS或其他Transform节点配合才能看到变换效果。
- 非正交平面同样适用:PlaneToPlane 支持任意空间平面,包括非正交、带旋转的平面。
- 性能:该组件计算量极小,可在循环中高频调用而不会产生性能问题。
📋 组件信息
| 名称 | 转换 |
| 英文名 | TS |
| 分类 | LK → Util |
| Exposure | 默认 |
| 基类 | GH_Component(无按钮) |
| 文件 | UtilTS.cs |
| GUID | {4DAECF98-3681-433A-A20D-D5105DB9CAB0} |