调用 RhinoCompute 有四种常见方式:
| 方式 | 适合场景 |
|---|---|
| Python 客户端库 | 数据脚本、自动化、研究计算、后台任务。 |
| JavaScript 客户端库 | Web 前端、Node.js 服务、浏览器几何预览。 |
| .NET 客户端 | C# 服务、桌面工具、企业内部系统。 |
| 直接 REST | 非官方语言、调试、网关服务、最小化依赖。 |
无论哪种方式,本质都是把几何和参数序列化为 JSON,通过 HTTP 发给 Compute,再把结果反序列化为客户端语言中的几何对象或数据结构。
服务端配置:
RHINO_COMPUTE_KEY=your-secret-key
客户端请求 header:
RhinoComputeKey: your-secret-key
本地开发可以临时不配置 API Key,但生产环境必须配置,并且不要把 key 写死在浏览器前端源码中。浏览器应用应通过自己的后端代理 Compute 请求。
安装:
pip install rhino3dm compute-rhino3d
典型结构:
import rhino3dm import compute_rhino3d.Util import compute_rhino3d.Mesh compute_rhino3d.Util.url = "http://localhost:6500/" compute_rhino3d.Util.authToken = "local-dev-key" sphere = rhino3dm.Sphere(rhino3dm.Point3d(0, 0, 0), 12) brep = sphere.ToBrep() meshes = compute_rhino3d.Mesh.CreateFromBrep(brep) print("mesh count:", len(meshes))
教学重点:
rhino3dm 在客户端构造和读写基础几何。compute_rhino3d 调远程 RhinoCommon 能力。compute-rhino3d,导入时是 compute_rhino3d。Node.js 安装:
npm install rhino3dm compute-rhino3d
Node.js 典型结构:
import rhino3dm from 'rhino3dm' import RhinoCompute from 'compute-rhino3d' const rhino = await rhino3dm() RhinoCompute.url = 'http://localhost:6500/' RhinoCompute.authToken = 'local-dev-key' const sphere = new rhino.Sphere([0, 0, 0], 12) const brep = sphere.toBrep() const meshes = await RhinoCompute.Mesh.createFromBrep(brep) console.log(meshes.length)
浏览器端也可以使用 rhino3dm.js 和 compute-rhino3d.js,但生产架构中不建议浏览器直接持有 Compute API Key。推荐:
浏览器 -> 业务后端 API -> RhinoCompute
.NET 项目通常使用:
Rhino3dm NuGet 包。Newtonsoft.Json NuGet 包。RhinoCompute.cs 客户端源文件。典型结构:
using Rhino.Geometry; using Rhino.Compute; class Program { static void Main() { ComputeServer.WebAddress = "http://localhost:6500/"; ComputeServer.ApiKey = "local-dev-key"; var sphere = new Sphere(Point3d.Origin, 12); var brep = sphere.ToBrep(); var meshes = MeshCompute.CreateFromBrep(brep); Console.WriteLine($"mesh count: {meshes.Length}"); } }
如果客户端库 API 名称与当前版本略有差异,以你项目引入的 RhinoCompute.cs 为准。
直接 REST 适合调试协议或做语言无关集成。基本模式:
POST http://server/path/to/compute/endpoint Header: Content-Type: application/json RhinoComputeKey: your-secret-key Body: JSON encoded arguments
直接 REST 的难点不在 HTTP,而在几何序列化。建议优先用官方客户端库生成请求格式,确认端点路径和 JSON 结构,再封装自己的调用层。
Grasshopper 求解通常使用 Resthopper 数据结构:
*.gh 或已经上传/缓存的定义引用。这类请求非常适合:
但它也要求定义本身可在无界面服务器中稳定运行。不要在定义中依赖人工交互、弹窗、屏幕选择或本机绝对路径。
rhino3dm 和 compute-rhino3d?rhino3dm 和 compute-rhino3d?RhinoComputeKey header?