
Grasshopper开发基础
文章平均质量分 94
Grasshopper二次开发的基础知识
几何螃蟹
Wonder is mother of all science.
展开
-
【Grasshopper基础15】“右键菜单似乎不太对劲”
距离上一篇文章已经过去了挺久的,很长时间没有写GH基础部分的内容了,原因其一是本职工作太忙了,进度也有些落后,白天工作累成马,回家只想躺着;其二则是感觉GH基础系列基本上也介绍得差不多了,电池二次开发的一些基本操作(功能/外观)都介绍得差不多了,再加上前几期写的数据类型,这基本上就囊括了所有二次开发需要用到的内容。不过,理论知识和实践总归是有一些差距的,在优快云上还是会偶尔收到私信问一些细节问题的二开爱好者们。原创 2023-08-29 17:46:42 · 1776 阅读 · 8 评论 -
【Grasshopper基础14】创建可在画布上自由传递的自定义类型数据(下)—— 电池与自定义IGH_Goo的交互
2022年3月至今,这段日子真是一段令人印象深刻的时光。总之,居家这么久了,忙了一阵终于可以来写点东西了。首先要对上一期【基础13】内的两个小错误进行一个勘误:在 class Pudge 中对 IGH_Goo 接口的实现方法中,CastFrom(object source) 和 CastTo<T>(out T target) 函数体内对于目标类型的判断有错误。不应该直接判断int、double或者Circle类型,而是应该判断其GH_xxxx类型,故依次应为GH_Integer、GH_Nu原创 2022-05-04 06:35:02 · 2799 阅读 · 11 评论 -
【Grasshopper基础13】创建可在画布上自由传递的自定义类型数据(上)—— IGH_Goo接口的重要性及其实现
接下来的两章,我们来介绍一下在之前章节尚未介绍到的,但却在Grasshopper中占据极其重要地位的另一批我们早就虎视眈眈但却还没想到理由要去触碰的电池们(左侧红色框指示):是的,就是这一些带黑底的电池们经过仔细思考,笔者还是决定将该部分内容拆分为上下两篇。上篇主要讲为什么要存在自定义类型数据,IGH_Goo接口对于我们日常使用 Rhino + Grasshopper 这两个工具而言,到底解决了什么问题。下篇则是直接介绍如何制作一个自己的数据类型来实现这个接口,并且借助 Grasshopper原创 2022-02-14 12:01:02 · 3186 阅读 · 2 评论 -
【Grasshopper基础12】打造自定义可复用的有按钮电池外观模版
【Grasshopper基础12】打造自定义可复用的有按钮电池外观模版作者:“咕咕咕?下一篇马上就写好了”上一篇【基础11】向大家介绍了怎么在Grasshopper里制作自己的带有按钮的电池外观。从反馈来看,挺多读者对这个例子十分感兴趣,同时也私信联系到我问了一些更详细的需求细节。其中一位“风起云淡”网友提到了下面的问题:“如果这个自定义属性类是单独写的一个类,想要这个自定义属性类写成通用的是否可以?”“我在构造函数里面传入的IGH_ComponentOwner接口,但是到了在GH_Attribu原创 2021-12-23 14:51:13 · 2856 阅读 · 11 评论 -
【Grasshopper基础11】如何在GH电池上增加一个自己的按钮
作者:“咕咕咕?下一篇马上就写好了”通过上一篇【基础10】的文章,大家已经了解到一个GH电池在画布上的样式是由其背后的 GH_Attribute 类实例来决定的,而大部分的GH电池都使用了它的一个派生类 GH_ComponentAttribute 来配置电池的外观。今天我们就继续上一篇的内容,通过它来给我们的电池配置一个按钮,当我们的按钮被按下去的时候,可以切换我们今天例子中电池的工作模式。首先我们来介绍一下今天的例子,它将会是一个简单的求 某个数的平方根 的电池:public class SqrtR原创 2021-09-13 15:52:12 · 4466 阅读 · 15 评论 -
【Grasshopper基础10】GH_Attribute简介 —— 自定义电池样式的终极后台
距离上次的【基础9】已经过去了又有差不多1个月了,工作上的事情越来越多,能抽出空来(主要是要找到“有空并且有舒适的心情来写”的时间挺难的…)的时间也变少了。笔者最近在做的工作跟Grasshopper本身也没有特别多的联系,但是对于Grasshopper的兴趣还是依然存在,这也是笔者能够一直坚持这个系列创作的最重要的原因吧,希望平日大家在设计工作之余,也能做出更多好玩有意思的东西来。好了,闲话少说,【基础1~9】基本上可以算是把GH_Component这个类能做的所有事情都囊括了进去,这其中包括了数据的类型原创 2021-04-23 16:13:17 · 4712 阅读 · 10 评论 -
【Grasshopper基础9】添加右键菜单
其实经过【基础2】~【基础6】、以及【基础8】的内容,几乎所有插件的后台数据处理流程都可以实现了(往往也是最关键的业务核心内容):从RegisterInputParam和RegisterOutputParam中注册数据的入口和出口在SolveInstance中处理及传递数据在Read和Write中进行数据的序列化与反序列化这也是为什么很多时候,目前大部分的GH教程也是大致到这个节点步骤就结束了。因为依靠这些内容,一套完整的业务逻辑可以完成,无非就是电池样子长得平平无奇一点嘛。不过,很多时候我们原创 2021-03-31 18:00:26 · 2367 阅读 · 21 评论 -
【Grasshopper基础8】电池的序列化与反序列化 Serilization of Grasshopper Component
这篇文章的内容是介绍GH_Component中另外一对可以被 override 的函数:ReadWrite当我们在自己的电池中直接 override 时,Visual Studio会帮我们添加基类实现:public override bool Read(GH_IReader reader){ return base.Read(reader);}public override bool Write(GH_IWriter writer){ return base.Write原创 2021-02-20 03:56:23 · 3578 阅读 · 8 评论 -
【Grasshopper基础7】如何重写Grasshopper电池的预览 DrawViewportWires / DrawViewportMeshes
经过【基础1~6】的介绍,相信大家对Grasshopper电池的开发的框架已经大致了解了。无论是在电池上修改原有功能还是增加新的功能,都是通过继承自GH_Component类,再在其基础上要么override原来的默认实现,要么就是继承新的接口。在这里对前面的内容小小地总结一下:一个自定义GH电池必须实现的overrides有RegisterInputParams // 用于注册输入参数RegisterOutputParams // 用于注册输出参数SolveInstance // 用于真正实现电原创 2021-02-09 16:35:14 · 3067 阅读 · 19 评论 -
【Grasshopper基础6】输入/输出参数可变的电池 / 如何让电池支持参数增加和减少
相信大家一定在Grasshopper中见过输入或者输出参数可以自由变化的电池,例如,笔者常用的电池“Entwine”就可以在电池的输入端添加一个参数或者减少参数,用来支持更多的电池接入,如下图所示。如果我们想要在电池中实现这样的功能,应该要怎么做呢?本文包含C#语言中的“接口(interface)”的概念,如果你对接口的概念还不是特别清楚的话,可以参考更多优快云资料: 搜索 “C# 接口”MSDN官方C#文档: 接口编程指南文章最后有电池的cs源码。声明实现 IGH_VariableP原创 2021-01-27 18:41:50 · 6190 阅读 · 5 评论 -
【Grasshopper基础5】在GH里看基金? —— 简单电池项目实战
经过前面【Grasshopper基础1~4】的介绍,相信读者已经了解了如何在Visual Studio里创建电池、如何获取数据、如何传出数据。那么在了解这些原理之后,就让我们来一起实现一个小的项目,来看看一个电池从头到尾到底如何制作吧。正如标题中所述的,我们今天就来做一个 “在GH里看基金净值” 的小电池,大致就是实现一个“给定基金代码,通过网络API调用获取基金净值信息,并输出该基金的所有净值信息”。要实现这个功能,首先我们需要首先进行需求分析,然后确定实现的逻辑,最后进行代码编写和简单的测试。需原创 2021-01-24 17:32:11 · 2444 阅读 · 9 评论 -
【Grasshopper基础4】如何在同一个项目中添加多个电池
笔者在前文中已经介绍了如何使用Grasshopper(一下简称GH)模板搭建一个电池组件项目,并进行一些简单的项目配置,相信各位读者已经在进行各种自定义功能电池的开发了。不过,随着想要制作的电池的增多,每次都从项目模板创建新电池的话,会导致有许许多多的项目存在。倘若这些电池都是服务于同一个目的,将这些电池分散在不同的项目会导致不太方便管理。其次,对于这些电池如果使用到了一些共同的依赖项,还需针对每个项目重新配置一遍,十分费时费力。如何 在同一个项目中实现多个电池 ?从项目模板中创建的但却一直被我们忽略的原创 2021-01-20 15:58:03 · 4910 阅读 · 10 评论 -
【Grasshopper基础3】在SolveInstance中获取数据和传出数据
在RegisterInputParams和RegisterOutputParames中添加数据的输入端/输出端之后的下一步就是我们如何在电池的SolveInstance中拿到我们的数据并进一步处理了。我们先来看看SolveInstance方法重写(override)时的方法定义protected override void SolveInstance(IGH_DataAccess DA) { }方法的传入参数为IGH_DataAccess接口类,返回类型void。当看到返回类型是void时我们就想到原创 2021-01-13 18:47:33 · 3780 阅读 · 5 评论 -
【Grasshopper基础2】Grasshopper电池的输入和输出不是那么详的解/进一步了解Params
我们在之前已经介绍过了如何创建自己的第一个电池,其中里面提到了我们制作的大部分电池都需要至少完成下面三个部分的代码RegisterInputParamsRegisterOutputParamsSolveInstance其中 RegisterInputParams 和 RegisterOutputParams 是用来声明电池的输入和输出的两个部分,重要程度不言而喻,本文我们就来看看他们俩到底是什么。进一步认识RegisterInputParam和RegisterOutputParamsPar原创 2020-12-23 15:40:21 · 11038 阅读 · 7 评论 -
【Grasshopper基础1】怎样制作一个Grasshopper电池 / 二次开发基础
本文旨在介绍如何使用C#编写一个Grasshopper内的Hello World电池,包括如何使用和安装Grasshopper电池模板,如何配置Visual Studio来生成.gha电池,如何配置Grasshopper以识别编译的电池,如何Debug等。后续章节会讲到如何配合多个电池、多个项目、多个Rhino/Grasshopper SDK。以下Grasshopper简称GH。如何制作一个Grasshopper电池制作Grasshopper电池的主要步骤及准备工作安装GH电池项目模板并创建一原创 2020-12-15 17:42:05 · 21668 阅读 · 21 评论