目录

05 Grasshopper 与 Hops 工作流

Hops 的核心思想

Hops 把一个外部 Grasshopper 定义变成当前画布上的“函数组件”。这个外部定义可以保存在本地、网络路径、远程服务器,也可以是 REST 端点。

在教学中可以把 Hops 理解成:

外部 .gh 文件 = 函数定义
Context Get = 函数输入
Context Print / Context Bake = 函数输出
Hops 组件 = 函数调用
RhinoCompute = 执行函数的服务器

为什么使用 Hops

安装 Hops

在 Rhino 命令行输入:

PackageManager

搜索 Hops 并安装。安装后,在 Grasshopper 的 Params > Util 中可找到 Hops 相关组件。

创建 Hops 函数

一个可被 Hops 调用的 Grasshopper 定义通常分三段:

  1. 输入定义区:使用 Context Get 组件,例如 Get Number、Get String、Get Curve。
  2. 计算逻辑区:普通 Grasshopper 组件、脚本组件、插件组件。
  3. 输出定义区:使用 Context Print 或 Context Bake。

命名规则很关键:

最小示例

目标:输入半径,输出圆面积。

  1. 新建 Grasshopper 定义。
  2. 放置 Get Number,命名为 radius
  3. 用圆或表达式计算面积。
  4. 放置 Context Print,输入命名为 area
  5. 保存为 circle_area.gh
  6. 在另一个 Grasshopper 文件中放置 Hops 组件。
  7. 右键 Hops,选择 Path,指向 circle_area.gh
  8. Hops 组件会自动生成 radius 输入和 area 输出。

配置远程 Compute

在 Grasshopper 中打开:

File -> Preferences -> Solver

配置:

配置项 说明
Hops-Compute server URL 本地或远程 Compute URL,例如 http://localhost:6500/http://server-ip:80/
API Key 与服务器 RHINO_COMPUTE_KEY 匹配的 key。
Max Concurrent requests 异步时的最大并发请求数。
Hide Rhino.Compute Console Window 本地排错时建议取消勾选,方便看控制台日志。
Launch Local Rhino.Compute at Start 本地 Hops 自动启动 Compute 时使用。
Child Process Count 远程或本地 Compute 子进程数量。

Hops 组件设置

右键 Hops 组件可看到常用选项:

选项 用途
Path 设置 GH 文件、网络路径或 REST URL。
Show Input: Path 把 Path 暴露成输入,便于动态选择定义。
Show Input: Enabled 用布尔值控制是否求解。
Asynchronous 异步求解,不阻塞 Rhino/Grasshopper UI。
Parallel Computing 对列表项尝试并行求解。
Cache In Memory 本地缓存相同输入的结果。
Cache On Server 服务端缓存,具体可用性取决于部署和服务能力。

适合放进 Hops 的定义

适合:

不适合:

对于 DWG base64 上传场景,Hops 更适合接收 job_iddwg_path3dm_path 这类短参数,而不是直接传超长 base64 字符串。推荐先由自定义 Compute 插件端点完成 DWG 解码、校验和导入,再由 Hops 定义中的自定义 GH 电池继续处理。详细方案见 11 DWG Base64 与自定义插件/Hops 集成方案

性能建议

教学练习

练习 1:把“输入长宽高,输出盒子体积和 Brep”的定义封装成 Hops 函数。

练习 2:把同一 Hops 函数分别指向本地 Compute 和远程 Compute,比较第一次求解和第二次求解耗时。

练习 3:关闭 API Key 或输入错误 API Key,观察 Hops 组件和 Compute 日志中的错误表现。

本章检查点

参考资料