我们都知道,Grasshopper中一个很重要的概念就是数据结构,把数据输入到电池某个端口时,根据数据的结构的不同(列表/数据树),电池对数据会做出不同的响应。这也是为什么在我们在Grasshopper中进行参数化建模时,经常会使用到电池两端输入/输出参数的几个改变数据结构的选项 —— Flatten 和 Graft。
我们在任何一个Grasshopper电池的输入、输出端参数上,或者是某个数据存储电池上点击鼠标右键,都会看到一个菜单弹出,里面包含了几种改变数据结构的选项。

这种数据结构的快速改变的确会方便电池使用者快速实现数据操作,但对于Grasshopper不熟练的使用者,或者某种电池机制不需要数据树来构建具有深度的数据结构时,数据树这样一种结构可能会造成电池运行效率很低,甚至出错的情况。相信大家在Grasshopper学习过程中也遇到过很多次这种情况。
在某些情况,作为电池的开发者,我们不希望电池会收到数据树作为输入,我们希望电池永远是以“列表”形式处理数据。此时,我们第一反应的解决方案会是:
- 在电池的
RegisterInputParams中,注册输入参数为 GH_ParamAccess.tree - 在
SolveInstance中,执行DA.GetDataTree获得输入端的数据树后,直接使用FlattenData函数获取其列表形式的数据,并加以处理。
这种方法没有任何问题,但其最大的问题是在于作为用户在使用时,尤其是对Grasshopper数据结构有比较好的理解的用户往往会感到困惑。“为什么数据是以数据树的结构输入,但输出却是一个列表?”此时我们就需要用某种方式传达给用

博客围绕Grasshopper中的数据结构展开,介绍了数据结构不同时电池的响应差异,以及Flatten和Graft选项的作用。指出数据树可能导致电池运行效率低或出错的问题,重点讲解了让电池以列表形式处理数据的方法,还说明了利用电池内事件实现输入参数扁平化的操作。
最低0.47元/天 解锁文章
3212





