SuperAPI AI 工具集

speckle-impl-rhino-grasshopper

设计与创作

查看项目

更新于 10-16 07:05

技能介绍

该技能面向 Rhino 与 Grasshopper 到 Speckle 的连接场景,用于将 Rhino 或 Grasshopper 中的几何发布至 Speckle,以及将 Speckle 数据接收回 Rhino。其目的在于避免接收时丢失 user strings、块损坏等常见问题。

平台要求:Rhino 版本为 7、8(推荐 8.9+);操作系统为 Windows(仅限 Windows);连接器为 Rhino + Grasshopper 单一安装包;认证通过 Speckle Desktop Service。

Rhino 数据结构为 File > Layer > Sublayer > Objects。Rhino 中的对象类型包括几何对象(Point、Line、Mesh、Brep,为独立图元,无属性、无 displayValue)、块实例(带变换的块定义引用,映射为 Instance Objects,含 definitionId 与 4x4 变换)、数据对象(带用户数据的对象,映射为 DataObject,含属性与 displayValue)。Rhino 使用的代理类型包括 RenderMaterial(颜色 RGB、不透明度、金属度、粗糙度)、Color(十六进制 #RRGGBB)、Group(对象的功能分组)、Definition(块几何只存储一次,由实例复用)。

关键警告:不要尝试从 Grasshopper 创建原生 BIM 元素(Revit 墙、梁、柱),Grasshopper 只能创建几何对象、块对象和数据对象,加载到 Revit 时始终变为 Direct Shapes;不要指望平行投影视图能够发布,Rhino 和 Grasshopper 只发布会透视命名视图,平行投影会被静默排除;不要依赖 Grasshopper 参数 GUID 进行变更追踪,因为 Grasshopper 每次求解周期都会生成新 GUID,会破坏 Speckle 的变更追踪,应始终使用 passthrough 节点修改已加载的对象;使用 Rhino 8 时应采用 8.9+,更早的 8.x 版本与 Speckle 连接器存在已知框架问题。

Rhino 连接器方面,发布内容包括几何(所有可见几何类型)、Hatches(图案填充)、Text(文本对象与标注)、Blocks(块定义与实例)、User strings(附加到对象上的自定义键值属性)、命名视图(仅透视视图,排除平行投影)、Layers(完整层级保留为 Collections)。每个发布对象包含名称、颜色、渲染材质和 user strings。发布设置可进行图层过滤(仅发布所选图层上的对象)和可视化属性控制(包含顶点法线、颜色、纹理坐标,会增加文件体积)。

加载到 Rhino 时:几何加载为原生 Rhino 几何;文本加载为文本对象;块加载为块定义加实例;渲染材质、颜色、名称均被保留和应用;自定义属性加载为 user strings;命名视图自动创建,且从不覆盖同名现有视图。

User Strings 往返:发布时,附加到 Rhino 对象的 user strings 会出现在 Speckle 服务器上的属性中;加载时,Speckle 对象的属性会写回为接收到的 Rhino 几何上的 user strings。这一往返适用于 Rhino 到 Rhino 的工作流,其他连接器(Revit 参数、Tekla 报告数据)的属性也会在 Rhino 中加载为 user strings。

Grasshopper 连接器组件包括:认证与配置类(Sign-In 用于账户认证,必须在任何发布/加载前完成;Speckle Model URL 用于项目/模型选择,右键可切换账户);发布工作流类(Create Collection 将对象组织为层级集合,映射 Rhino 图层,支持通过 TAB+pipe 嵌套,自动排除空输入;Publish 将 Collection + Model URL 发送到服务器,需要 Collection 与 Model URL 输入;Create Properties 创建键值属性字典,支持字符串、数字、布尔、向量、平面、列表、嵌套属性;Speckle Properties Passthrough 作为替代属性创建方式,含 Merge(默认)、Remove、Replace 三种模式);加载工作流类(Load 从服务器获取模型,默认最新版本或指定版本;Query Objects 获取所有对象的扁平列表,输出可按几何类型过滤;Collection Selector 显示完整子集合路径,搜索模式有 ?(单字符)、<(开头为)、>(结尾为)、;(多模式);Expand Collection 一次一层遍历层级,需迭代用于深层级;Deconstruct 访问单个对象字段,返回字段名、值与类型);对象操作类(Speckle Geometry Passthrough 向几何添加元数据,接受原生 GH 几何或已有 Speckle Geometry,添加 Name、Properties、Color、Material;Block Definition Passthrough 创建块定义,输入几何列表,输出可复用定义;Block Instance Passthrough 创建块实例,输入定义加变换矩阵;Data Object Passthrough 创建数据对象,输入几何列表加属性字典;Filter Objects 过滤已加载对象,可按名称、属性键、材质名、Application ID、Speckle ID 过滤)。

Grasshopper 中的三类对象:几何对象为单个可选元素,可直接转换原生 Grasshopper 几何(Point、Curve、Mesh、Brep、Surface),烘焙时保留图层路径、名称、颜色、材质、属性(作为 user strings),使用 Speckle Geometry Passthrough 附加元数据;块对象分定义(通过 Block Definition Passthrough 创建的几何集合)与实例(通过 Block Instance Passthrough 创建,含定义加变换),镜像原生 Rhino 块结构,应始终先创建定义再创建引用它的实例;数据对象为带丰富属性字典的几何组,用于从 Revit、Navisworks、IFC、Archicad、Civil 3D、Tekla、ETABS 接收的 BIM/结构/土木工作流,仅当恰好包含一个几何时才能转换为单个几何,不要将含多个几何的数据对象转换为单个几何,否则会静默丢失几何。

集合嵌套通过 TAB+pipe 命名创建,例如 Collection "Architecture" 下的子集合 "Walls" 命名为 "Architecture | Walls",管道符(|)前加 TAB 创建层级级别,组织从 Grasshopper 发布的数据应始终使用此模式。属性创建使用 Create Properties 构建属性字典,支持字符串、数字、布尔、向量、平面、列表、嵌套属性字典等值类型;应始终在发布前通过 Create Properties 或 Speckle Properties Passthrough 附加属性,发布后无法添加属性。

块处理:从 Rhino 发布块时,块定义作为 Definition 代理存储在根 Collection 级别,每个块实例成为带 definitionId + 4x4 变换矩阵的 Instance Object,定义几何只存储一次,实例引用它以去重。在 Grasshopper 中创建块的步骤为:第一步,创建几何列表 → Block Definition Passthrough → 定义;第二步,定义 + 变换 → Block Instance Passthrough → 实例;第三步,实例 → Create Collection → Publish。加载块时,块作为原生 Rhino 块定义加实例加载,支持嵌套块(定义引用其他定义),加载时应用变换矩阵定位实例。

Grasshopper 变更追踪:问题在于 Grasshopper 参数每次求解周期都会生成新 GUID,而 Speckle 使用 applicationId 进行变更追踪,新 GUID 会使 Speckle 将每次求解都视为全新对象,只能新增无法更新。解决方案是:创建对象一次并发布,将发布的模型加载回 Grasshopper,使用 passthrough 节点修改已加载对象(保留 applicationId),再发布修改后的对象,从而跨版本保留 applicationId,实现正确的变更追踪与版本比较。对于新模型,应始终遵循以下顺序:创建初始几何与属性 → 发布到 Speckle → 将发布版本加载回来 → 对所有后续修改使用 passthrough 节点 → 重新发布。

可复用组件:团队可创建标准化 User Objects(.ghuser 文件),预定义命名约定、属性结构、集合层级、发布配置,并将 .ghuser 文件分发给团队成员,以在 Grasshopper 定义间实现一致的项目交付。

跨连接器行为:Rhino 到 Revit 时,Rhino 几何始终变为 Revit Direct Shapes;user strings 不会导入 Revit(Revit 不加载自定义属性);块变为 Direct Shapes 或族(取决于 Revit 的 "Receive Blocks as Families" 设置);命名视图变为 Revit 中的 3D 视图。Revit 到 Rhino 时,RevitObjects 变为带属性(作为 user strings)的几何;Revit 参数变为 Rhino user strings(可读可编辑);材质工程量变为 user string 属性;层级关联变为 user string 属性。Grasshopper 到 Revit 时,几何对象、块对象、数据对象均变为 Direct Shapes,绝不会变成原生 BIM 元素,这是根本性限制。

参考链接包括 references/methods.md(Grasshopper 组件签名与 Rhino 连接器 API)、references/examples.md(发布、加载与往返的工作流示例)、references/anti-patterns.md(不应做的做法及原因说明),以及官方来源文档:https://docs.speckle.systems/connectors/rhino/rhino.md、https://docs.speckle.systems/connectors/grasshopper/grasshopper.md、https://docs.speckle.systems/connectors/grasshopper/grasshopper-objects.md、https://docs.speckle.systems/connectors/grasshopper/grasshopper-collections.md、https://docs.speckle.systems/connectors/grasshopper/grasshopper-properties.md、https://docs.speckle.systems/connectors/grasshopper/grasshopper-recommendations.md、https://docs.speckle.systems/developers/data-schema/connectors/rhino-schema.md。