本文主旨是介绍“进程间通讯”在Grasshopper中的应用。
常用场景:手头已经有一个程序,这个程序想控制Grasshopper画布中某些组件进行一些数据操作,这个程序是独立Rhino和Grasshopper之外运行的。
从另一个程序来控制 Grasshopper 中的组件。
进程之间通讯
Windows平台下,进程间通讯称为“Interprocess Communications”,具体详见msdn文档,有多重实现模式,在此就不赘述了:
https://docs.microsoft.com/en-us/windows/win32/ipc/interprocess-communications
(中文版暂未提供)
鉴于Rhino/Grasshopper是.NET Framework平台,本文选择一个最简单的实现方法来实现这一点 —— Remoting。
关于Remoting的介绍:
https://docs.microsoft.com/en-us/dotnet/api/system.runtime.remoting?view=netframework-4.8
实现方法
Grasshopper电池中新开一个 自定义线程 用来接收外部程序的调用,外部程序与Grasshopper中新建的 自定义线程 通过Remoting协议实现通讯,这个线程负责依照外部程序指令对Grasshopper进行相应操作。
本文的例子是通过外部程序使得Grasshopper中重新计算(Recompute)。

- 新建一个 .Net Framework Library项目,里面用来定义进程通讯的对象的接口。
namespace IPCLibrary
{
public interface IPCInterface
{
// 定义一个能够被外部调用的接口,具体实现在Grasshopper中完成
void Recompute();
}
}
将该项目编译,构建一个 IPCInterface.dll 文件,该文件在接下来会被引用。
- 新建一个Grasshopper电池项目,并引用步骤1中生成的 IPCInterface.dll 文件。这个项目主要是实现两个部分的内容:
(1)依据步骤1中定义的接口,实现一个对象用来对Grasshopper实现所需的操作;
(2)在SolveInstance内部开启新线程,用于实例化 步骤(1) 中的对象的静态属性以及注册通讯协议至操作系统。
using Grasshopper.Kernel;
using IPCLibrary;
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remo

本文介绍如何利用.NET Framework下的Remoting技术实现外部程序控制Grasshopper画布组件进行数据操作,包括重新计算等功能。

438

被折叠的 条评论
为什么被折叠?



