目录

08 自定义端点与插件扩展

为什么要扩展 Compute

默认 Compute 暴露了大量 RhinoCommon 相关端点,也支持 Grasshopper 求解。但有些业务更适合自定义端点:

扩展方式

官方方式是在 Rhino 插件中注册 Compute 端点:

  1. 在插件项目中定义静态类。
  2. 在静态类中定义 public static 方法。
  3. 在插件 OnLoad 中调用 Rhino.Runtime.HostUtils.RegisterComputeEndPoint
  4. 在本地 Rhino 和 Compute 服务器上安装该插件。
  5. 打开 /sdk 检查新端点是否出现。

简化示例

using Rhino;
using Rhino.Geometry;
using Rhino.PlugIns;
 
static class MyCustomComputeFunctions
{
    public static double Add(double x, double y, double z)
    {
        return x + y + z;
    }
 
    public static double AdjustedArea(Curve curve, double factor)
    {
        var amp = AreaMassProperties.Compute(curve);
        return amp.Area * factor;
    }
}
 
public class MyPlugin : PlugIn
{
    protected override LoadReturnCode OnLoad(ref string errorMessage)
    {
        Rhino.Runtime.HostUtils.RegisterComputeEndPoint(
            "Rhino.CustomEndPoint",
            typeof(MyCustomComputeFunctions)
        );
 
        return base.OnLoad(ref errorMessage);
    }
}

注册后,访问:

http://localhost:6500/sdk

如果插件加载成功,应能在 SDK 页面看到自定义函数。

DWG base64 场景

如果业务系统通过 base64 上传 DWG,不建议把完整 base64 字符串直接接入 Grasshopper/Hops 画布。更稳妥的做法是先用自定义 Compute 插件端点接收、校验、解码、落盘并导入 DWG,再把 job_id3dm_path、图层摘要或几何结果交给 Grasshopper 自定义电池继续处理。

详细方案见:

方法设计原则

插件部署注意事项

服务器上的 Compute 子进程是无界面 Rhino 环境。插件能在普通 Rhino 中运行,不代表一定能在 Compute 中稳定运行。

需要检查:

调试流程

  1. 在普通 Rhino 中安装插件并确认可加载。
  2. 在普通 Rhino 中手动运行插件核心命令或测试方法。
  3. 启动本地 Compute。
  4. 访问 /sdk,确认自定义端点出现。
  5. 用最小请求调用端点。
  6. 再接入业务客户端或 Hops。
  7. 最后部署到 IIS 生产环境。

与 Grasshopper 的取舍

方案 优点 风险
Grasshopper/Hops 设计人员容易维护;可视化;快速迭代。 复杂定义可维护性下降;插件依赖多;序列化开销大。
自定义 Compute 端点 API 稳定;性能可控;易测试;适合工程化。 需要 C# 插件开发能力;部署和版本管理更严格。

实践建议:

测试建议

本章检查点

参考资料