Created on Wed Mar 30 08:37:16 2022; Last updated on 2024-08-30T21:06:01+08:00 @author: Richie Bao

1.4.1 为什么建立模组库?为什么由设计师自己来建立模组库?

  1. 避免每次重复编写同一逻辑(不要重复造轮子)

用 GH 处理设计时,会发现很多参数构建逻辑实际上编写的代码都是处理同一问题。如果这一逻辑比较简单,应用的组件比较少,且应用的频数也不高,那么重复编写代码(重复造轮子)不是大问题。但是,如果用到的组件比较多,即使重复调用的次数少,也会感觉相当繁琐;如果应用的组件少,但是频次高,也会耗时耗力。因此将常用的逻辑代码处理成封装组件,并构建 User Object 对象(用户自定义对象,GH->File->Creat User Object),逐步积累发展成为模组库(扩展组件)是非常必要的。

  1. 封装组件与模组库的不同

Cluster封装组件,类似定义了一个函数,方便在同一文件下调用。如果要在不同文件,或不同项目中调用,则需要打开原始文件,并复制到新文件下。这个过程可能会出现:找不到原始封装组件在什么文件下;经过长时间积累了大量封装组件,忘记封装了哪些逻辑,就不会再次使用,不得不重新编写;使用时不得不打开含有这个封装组件的文件后复制。上述过程让代码编写相对繁琐,因此有必要将经常用到,或用到次数不多但繁琐重要的逻辑,不仅封装,而且要建立 User Object 对象,置于 GH 面板中,方便调用。这相当于建立了代码库(Code Library),只需安装一次就可重复调用组件。

  1. 分组梳理已有逻辑,加快设计进度

建立模组库时,要将封装组件分类置于不同子面板下,归类具有同一特征的逻辑,这不仅方便调用;同时,可以更加清晰应用 User Object 的设计过程,或者熟悉某类设计类型经常用到的逻辑类别,这样容易积累具有设计特征属性的分类模组库(例如,乡村建筑类、古建筑间梁布局、地形设计类、植被规划类、城市规划等),及设计分析、数据处理方式、数据库、算法集成、辅助设计信息等,从而有益于积累已有经验、不断探索新的算法领域,并加快设计进度。

  1. 设计、发现、更新模组库

模组库中的内容不是短时间内就能积累构建完成,而是不断在设计的过程中碰撞产生,并不断的实践调整。因此除了特殊的一些模组库外,没有必要一开始就确定具体的内容,而仅需定出所建模组库大致的目的、内容和模组库建立的标准等。设计师可以不断从设计的过程中,封装常用、主要的逻辑(组件)并不断更新纳入到模组库中。而只有不断的设计应用实践,才会发现并从这些代码中提取出用于组成模组库的代码逻辑。当不断的设计,不断的发现和建立逻辑并更新于模组库,设计的过程也因模组库的存在,使得设计效率得以提升,参数设计思想得以总结,有机会发现更多新的设计逻辑并应用于设计实践。

  1. 已有扩展组件和设计师自己的模组库,成为工具的建造者

即使 GH 下已存在至少500多个扩展组件(并不断的在拓展、更新、或者停止维护、乃至消失,促使 GH 的生态系统不断在进化、完善),涉及到方方面面,但是为什么仍旧要设计师自己来建立适用于自身的模组库?一是、已有的扩展组件通常是某一类方法的应用,例如动力学类的Kangaroo、结构分析的Karamba3D、热环境分析的Ladybug、三臂机器人建造的HAL、Mesh类的Mesh+等。而实际的设计过程因为设计内容的不同,变化万千,已有扩展组件通常很难满足所有的方向及细节深度;二是、因为 RH 和 GH 的版本更新,已有扩展组件很多缺少作者维护,已停更,无法在新版中应用;三是、数字智能化时代,设计的方法在发生更迭(或并存),算法的应用成为思考设计的一种方式,这不仅表现在设计形态构建、模拟及其思维形式上的延申;同样表现在设计工具自身的更迭,思索建立何种工具让设计过程便利及智能化,避免受制于已有软件工具的束缚,尤其避免思维创新受到束缚。

  1. 设计团队的分享与积累

模组库的建立为设计团队协作效率和总体设计能力提升,及发展新的设计协作方式提供了契机。传统的设计团队要经历调研、头脑风暴和概念方案、方案研讨、设计节点分工与深化、扩初施工图与建造跟进等过程。这个过程包括横纵联合的协调,横,是每一阶段团队设计师各自要做什么事;纵,是设计过程各阶段之间怎么连接。对于规模不大的项目,一个设计师可以是一个团队,但是综合性项目需要由设计团队来完成。在团队协作的过程中,如果加入构建和应用模组库作为团队成员之间新的一个联系纽带,不仅可以开发出具有该类项目或类型项目应用的模组库,加快日后类似项目的设计进度,也会以代码的方式标准化设计内容;同时,团队成员之间分享共建模组库,横向上,可以增加设计节点间设计特征(参数逻辑)共通关系的呈现;纵向上,可以通过建立逻辑组件沟通纵向之间的联系,减少中间转换带来的成本。

1.4.2 模组库建立的基本流程与标准制定

1)命名

  • 模组名可以不用取,而是选,这里从动物(生物)名列表中选择了Moths作为模组名。根据情况可以建立多个模组,方便归类和调用。

  • 子分类(Sub-Category)根据各组件的内容,进行特征归类,并命名。由于封装组件的不断积累,子分类会调整、合并和增减。例如Moths里子分类包括:Data Organization(数据组织类)、Database(数据库)、Design Analysis(设计分析类)、Design Content(设计内容类)、Rural Archi(乡村建筑类)、Info(相关信息类)、Algorithm N Design(算法和设计)、CH Archi Complex Layout(古建筑间梁布局)、GUI(用户交互界面)和Util(常用工具)等,并也会根据情况进行调整。

  • Use Object 对象(Cluster 封装组件)命名(类似函数名),需要根据组件功用命名,尽量反应组件功用内容,便于使用者识别应用。

  • 组件输入和输出端参数名(含 Name 和 Nickname),尽量反应参数功用,同时会增加有辅助文字说明(Description)。

  • 命名规则尽量保持与 GH 核心组件一致,每个字母的头字母大写,这包括模组名、分类名、组件名和输入输出端参数名等,例如Data Organization,中文名不受此约定。

2)图标

  • 推荐使用Affinity Designer设计图标。图标的模板可参考Ladybug Tools/artwork项目,并可以直接下载文件Ladybug.afdesign,基于该文件设计新项目的组件图标。

  • 图标最终规格为:24×24 Pixels 大小,300 Pixels 分辨率的 PNG( .png)图像。建议同时导出 450×450 Pixels 大小,300 Pixels 的 PNG 图形存档。如果不是拖动图标到组件上,而是从封装组件右键->Properties->Icon下选择图标,则会自动调整图像大小,不必事先转换为 24 Pixel 分辨率。

  • 同一模组图标设计风格尽量统一;图标内容尽量能反应组件功用,方便识别调用;图标清晰,避免模糊,应衡量线型粗细和图形大小等。

此次Moths模组封装组件(含 Python Script)的部分设计图标如图 1.4-1,为在 Affinity Designer 里的截图。

gh

图 1.4-1 Moths 图标设计(Affinity Designer)

3)封装组件属性完善(含 Python Script 部分)

  • Cluster方法封装组件后,在封装组件右键->Properties中完善名目,包括 Cluster 子类的Name(名称)、NickName(别名)、Description(描述)、Icon(图标);Author 子类的Author(作者)、Company(公司)、Copyright(版权)、Address(地址)、Website(网站)、E-Mail(邮件)、Phone(电话)等内容。其中 Cluster 类属性部分要尽量全部填写。版权类选择说明可参考Licensing a repository

  • Python Script 部分属性说明代码示例如下:

  """Provides a scripting component.
    Inputs:
        Mesh: 待展平的 Mesh 对象
        MeshTopology: 配合 MeshTopology 组件使用
        LocationPoint: 展平位置定位点,需要3个点
        Finding: 寻找不同的展平结果
        Count: 迭代
    Output:
        BoxFlatten: 展平的 Mesh 对象
        Order: 展平面顺序索引"""

__author__ = "Richie Bao"
__version__ = "2024.08.31"

ghenv.Component.Name = 'Flatten Box'
ghenv.Component.NickName = 'Flatten Box'
ghenv.Component.Description = '展平盒体Mesh面。'
ghenv.Component.Message = '0.0.1'
ghenv.Component.Category = 'Moths'
ghenv.Component.SubCategory = 'Data Organization'
  

查找 GH 自定义组件开发的信息可以从 GH->Help->Download SDK help下载获取。目前 Grasshopper SDK 帮助文件主要以 C# 和 VB 编程语言为案例说明。在组件的 GUI 中命名和标识组件(于 GH 组件基类(base)的非空构造函数(Component Constructor)),包括 Name、NickName、Description、Message、Category 和 SubCategory 等,该信息位于 Grasshopper SDK 帮助文件下Examples->Simple Component(C#)->The Component Constructor中。也可以从官网API ReferencesGrasshoppeGrasshopper->Grasshopper.Kernel内寻找相关信息。

4)建立 User Object 对象

选中封装(Cluster)或 Python Script 组件后,点击GH->File->Create User Object调出User Object Properties窗口,部分行会根据上一条属性完善的内容自动填充。注意,CategorySub-Category定义(建立新的分类)或选择(从下来菜单已有分类中选择),会影响组件出现的位置。在Exposure版块下,根据需要勾选,Hide object为是否隐藏组件;Limit to dropdown会限制组件是否只出现在下拉表中,而不出现在默认显示的有限面板下;Panel Section可以进一步划分子分类在不同区域显示(通常由不明显的浅灰色细线标识),方便进一步归类组件。确认后,则建立 Use Object 对象,并存储于GH->File->Special Folders->User Object Folder指定文件夹下。当建立了 User Object 对象,则在 GH 面板中出现自定义的模组,例如Moths,显示如图 1.4-2。

gh

图 1.4-2 Moths 模组组件图标

5)调用自定义模组组件

自定义模组组件同其它组件的使用方法。Moths模组组件中包含了“数据类型、结构与空间几何”中已经封装的组件。在后续章节代码中将会使用这些模组组件,并不断增加丰富和调整Moths模组。

Moths 组件可以从该书的“Moths 模组库”部分查看说明并下载模组库,置于`User Object Folder`文件夹下,直接调用。该部分也包含对应每个工具(封装组件)的示例,方便学习和直接使用已经配置好的参数,减少自行参数配置的负担

注释(Notes):

① Kangaroo,为一个实时物理引擎(Physics engine),可用于交互模拟(interactive simulation),形式发现(form-finding,),优化(optimization)和约束求解( constraint solving)(https://www.food4rhino.com/en/app/kangaroo-physics)。

② Karamba3D,是一个可交互,快速准确有限元分析(Finite Element Analysis,FEA)的参数化工程工具,专门为设计专业人员早期设计阶段的需求量身定制(https://www.food4rhino.com/en/app/karamba3d)。

③ Ladybug,包括Ladybug、Honeybee、Dragonfly 和Butterfly几个插件,其中 Ladybug 可以可视化并分析气候数据 ,包括日晷、风玫瑰、温湿度,及辐射分析、阴影研究和视域分析等;Honeybee 可以连接到经过验证的模拟引擎,包括 EnergyPlus/OpenStudio,可用于建筑能源,暖通空调(HVAC)尺寸,热舒适性等分析。及 Radiance,可用于采光和眩光模拟;Dragonfly 可以通过利用建筑抽象的二维对象来创建城市规模的 EnergyPlus 和 Radiance 模型。同时,可以连接到 URBANopt 能源模拟的 SDK(Software Development Kit);Butterfly,可以将 Grasshopper 连接到 OpenFOAM 引擎,用于流体力学模拟(computational fluid dynamic,CFD)(https://www.food4rhino.com/en/app/ladybug-tools)。

④ HAL,由 HAL Robotics ltd.提供的机器人控制模组(http://localhost:1313/docs/parametricdesigncoding/01_codeblock/1-4_establishmodulelibraries/)。

⑤ Mesh +,提供 Mesh 格网的编辑、创建、交互和拓扑修改等功能(https://www.food4rhino.com/en/app/mesh)。

⑥ Affinity Designer,该软件服务于插画家、设计师、游戏开发者等设计类专业人士,用于创建数字插图、概念艺术、独特的图形、徽标、品牌设计和网络模型(web mock-ups )等(https://affinity.serif.com/en-us/)。

⑦ Ladybug Tools/artwork,Ladybug 源码开发的 GitHub 代码托管仓库(https://github.com/ladybug-tools/artwork)。

⑧ Ladybug.afdesign,Ladybug 组件图标设计文件下载地址(https://github.com/ladybug-tools/artwork/tree/master/icons_components/ladybug)。

⑨ Licensing a repository,选择适合的许可证(https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/licensing-a-repository)。

⑩ API References,Rhino 和 Grasshopper 开发者手册连接地址(https://developer.rhino3d.com/api/)。

⑪ Grasshopper SDK,Grasshopper 开发者手册(https://mcneel.github.io/grasshopper-api-docs/api/grasshopper/html/723c01da-9986-4db2-8f53-6f3a7494df75.htm)。