X
返回顶部
当前位置: 首页> BIM资讯> Rhino3d论坛

Grasshopper如何开发插件?这篇文章告诉你

发布:中文网小编4号 浏览:4200人 分享
发布于:2022-04-06 16:59

本文源自公众号:Equationhouse


借助犀牛开发帮助文档,在grasshopper里面自定义运算器,可以达到事半功倍的效果。很多逻辑如果借用grasshopper原生运算器,一则效率低下,二则需要许多原生运算器的组合才能达到。而通过自定义运算器,可以大大提高效率。前提是在较为熟悉其底层逻辑的情况下。

下面是一个简单的关于偏移曲面的示例,通过两种方式(一种是借助grasshopper里面的C#或者Python运算器,另一种是借助VS IDE),介绍如何在grasshopper里面自定义运算器或者开发插件。

grasshopper里面有原生的偏移曲面运算器,其局限是功能比较基本,只能向一侧偏移曲面。

d1a7f47f6db549f560e88de668befefd.png

当然如果需要向两侧偏移也可以在输入端输入正负两个同样的数,但如果需要输出为封闭实体,如果不借助插件,则还需要提取偏移后两曲面的边进行放样组合等一连串操作,无疑效率会比较低下。

665bbda3cb158f75864dd30bafc09812.png

自定义运算器方式一:通过C#或者Python自定义。以下为grasshopper里面的代码编辑器。本文以C#为例。

5c99b1878438daebed750b3f3a180ee1.png

双击打开C#编辑界面,下图为C#主要代码区域。

99cb7961e560123ebc63885d23036b1b.png

偏移曲面的代码如下:A = Brep.FromOffsetFace(Sur.Faces[0], Distance, 0.001, both, solid);

c8a67d7ef74f63ce1fada0de99203862.png

若不熟悉相关的代码,可以通过犀牛开发者帮助文档进行查阅相关代码。地址:https://developer.rhino3d.com/api/

里面有与各种编程语言相关的帮助文档可供查阅,这里主要查阅RhinoCommon 与Grasshopper (Rhino for Windows)

238bf71f25936db278b22ca1f381d5a5.png

由于是对Surface进行操作,一般查阅Surface类,这里比较特殊,曲面偏移的方法并不能在Surface类里面找到。

73a9fb7c3b537693a6cb19332c3dfabe.png

可以查阅与Surface类比较相近的Brep类,这里需要一些经验,在RhinoCommon里面,我们认为的属于对Surface进行操作的一些方法在Brep类里面。Brep类的FromSurface 正好可以对其进行操作。

eef5daae69edbe66885e5c65315140b8.png

02d0e17c46382087110709b712f2f490.png

以下为其语法。其需要返回Brep值,所以前面需要有变量承接其值。

b23b9378a84228b5acb7579a14011027.png

故A为承接值的变量,键入以下代码,FromSurface 后键入括号(后会弹出以下消息,其中1为输入Brepface,即为输入的曲面,2为偏移距离,3为偏移误差,4为是否两侧偏移,5为是否为实体。其中BrepFace,Double,Boolean为输入物体或者数值的类型。

1a3b5e71c8040ca54e77e5bfb9b11016.png

根据括号内提示为运算器加上输入端。由于C#为强类型的编程语言,需要定义输入端的类型,根据括号内提示定义输入端类型。此处为C#基础知识,如需深究,可以参考以下入门教程

https://www.runoob.com/csharp/csharp-tutorial.html

971fbf000ce369ad59bfdd7378e3aba8.png

08e3a6f83fd387a069b517fce5d17a58.png

之后自定义运算器完成,在Rhino里面画一个曲面进行测试。

d86f2f7d215baac24a2333915c7c6548.png

使用Brep抓取曲面,距离输入20,both输入false,是否实体输入false ,得到向一侧偏移的曲面。与原生运算器功能一样。

bf5867eb025a4db405471f903dc6b727.png

both输入true,是否实体输入false ,得到向两侧偏移的曲面。与原生运算器功能一样。较原生运算器简单。

790cbc1a4d835ab69b7cad5c735200d2.png

both输入true,是否实体输入true,得到向两侧偏移的曲面,曲面形成封闭实体。grasshopper原生的offsetsurface不能直接得到。

8e803f00b27fa3deba93f4d450a10ffc.png

测试完毕后可以将自定义运算器储存以便之后方便调用。储存过程如下图所示。

baca7e9508e828703d2a83fa076da218.png

1处键入运算器名字,2处键入笔名,3处键入其功能,4和5处键入其存放栏目。点击6处为其设置运算器图像。

b31650eed9cd5a2082691ad109b26b97.png

f74e3dd28804517d8f6bddad5e811342.png

以下为运用Python自定义此运算器示例。

6e199bbb0213efd64222012043b8cc71.png

自定义运算器方式二:通过VS Code进行定义,这也是grasshopper插件开发的主要方式。打开VS Code,选择grasshopper模板,对其进行编辑。以下为本段代码的全部。

ab64890c5c84248f1c636d21d25baca5.png

其中:

1处输入运算器名称,昵称,功能描述,插件名称等。

2处定义运算器的输入端;

3处定义运算器的输出端;

4处为该运算器主要代码;5为该段代码中最主要的实现功能的代码。

6处设置运算器图标。

7处为该运算器ID。

d65ab0ec01b1117049e2efc3996f2720.png

该案例为较为基础的grasshopper代码案例,以此作为记录。如需深入研究,需深入了解犀牛开发帮助文档以及C#编程语言。


BIM技术是未来的趋势,学习、了解掌握更多BIM前言技术是大势所趋,欢迎更多BIMer加入BIM中文网大家庭(http://www.wanbim.com),一起共同探讨学习BIM技术,了解BIM应用!