TS3 转换 · TS

通过基准平面与目标平面创建3D空间坐标变换数据,用于LK系统构件的位置转换
📂 LK → Util 📄 UtilTS.cs 🔄 坐标变换 📐 平面到平面

📖 功能概述

该组件实现了一种最基本但非常重要的几何运算——由基准平面到目标平面的空间坐标变换

输入两个任意空间平面(位置+朝向),组件利用 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数据。

⚠️ 注意事项

📋 组件信息

名称转换
英文名TS
分类LK → Util
Exposure默认
基类GH_Component(无按钮)
文件UtilTS.cs
GUID{4DAECF98-3681-433A-A20D-D5105DB9CAB0}