通知:E拓建筑网正式更名为拓筑在线!

拓筑在线

 找回密码
 快速注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

Grasshopper中的数据控制——Dixon


[版块:参数化设计] [分类:经验教程] [复制链接] 报告无效帖子查看: 5842|回复: 12   
拓邦元帅|DanielJin 发表于 2014-10-20 20:56:20 | 显示全部楼层
发帖得20e币  e币充值  开通VIP会员  快速免费获取e币
本帖最后由 DanielJin 于 2014-10-20 21:02 编辑

这是Rhino原厂工程师Dixon前辈之前的帖子。今天正好又看到了,发过来供大家品鉴。由于内容众多插图众多且文字格式等都已经排好版了,为了尊重前辈的工作我只按照原帖对部分文字颜色和字体进行了二次编辑。如果将来图片报错无法显示,请立刻站内信我。以后大家发帖也要力争这么工整干净。原帖地址:http://shaper3d.cn/2012/05/30/grasshopper-data-control/


Grasshopper中的数据控制
———–Rhino原厂工程师 Dixon

【为了让不同程度的使用者包括初学者也可以阅读这篇文章。本文使用的范例程序结构简单但足够典型。着重于介绍思路的分析,反映设计过程中遇到的数据处理及如何解决问题的思维过程。对涉及的工具就使用不做细致的介绍,敬请见谅】

在使用参数化设计工具辅助设计的过程中用户需要解决两个阶段的问题:
·根据设计要求规划合理的编程逻辑顺序。(编程思维过程)
·使用参数化设计工具实现设计功能。(技术处理过程)

在这几年接触学习参数化设计的学员的过程中,我们发现大部分学员会在这两个阶段遇到不同的问题。

其中,第一个阶段属于使用者编程思维方式主导的部分。由于大部分设计背景的学员之前并没有接受过系统的编程课程的训练,因此普偏在编程逻辑思维方面较为欠缺。本文的范例中对实际的设计要求有简单的编程逻辑思维方法的解释可作为参考。

第二个阶段属于技术细节的部分。我们注意到大部分GH用户遇到的技术细节问题可以归类于以下三方面:

1.对GH的工具的运行原理和使用方法不够理解。这是比较初级的问题。

2对GH工具涉及到的曲面造型技术缺乏足够了解。具体为:对Nurbs的几何特性、Nurbs数据的编程控制方法和曲面造型思路缺乏了解。因此程序中涉及曲线曲面控制处理的部分较难深入和灵活运用。这部分较为欠缺的用户建议可以参加rhino原厂开设的曲面造型课程的短期学习班做系统的补充。

3.除了以上两个参见的问题之外,大部分学员都会在学习到一个阶段后遇到GH树形据结构数据管理的理解和控制方面的困难。这通常是所有学习GH者都需要跨过的一道坎。

和其他的参数化设计软件和编程软件不同,GH采用的树形据结构的数据管理是很特别的,,它可以让用户更容易的管理和控制庞大和复杂的数据,以实现用参数化控制复杂的功能甚至是系统的设计(如一整栋建筑),但前提是使用者必须对这种数据管理和控制的原理有对应的了解,才能对其进行合理和灵活的控制。这部分是很多人学习中遇到的难点或者难以深入到的部分。

为了帮助GH使用者GH的理解树形数据结构在参数化设计过程中起到的作用,以及如何配合设计需求处理和控制它,我们使用GH原厂课程中的一个范例来做介绍。

范例
我要设计一座悬挂结构的桥!

这是一个悬挂结构的桥,如图是整个桥的侧面结构。黑色矩形方框是桥体。桥体上10个红色点桥体的固定点。用钢丝悬挂固定。顶上的两个蓝色矩形代表悬挂桥的两个立柱,每个立柱上各有3个钢丝固定点。我们需要解决的问题就是如何在桥体和柱子的固定点之间拉钢丝。

这个设计中遇到的实际问题可以被简化为点连线的问题,即:

如何在下面10个点和上面6个点(2*3结构)之间做各种连线方式的设计。

为了理清设计思路,我们先看两种最极端的连线方式:
          1.最稳固的方式(连线最复杂)
          2.和最省材料的方式(连线最简单)

最稳固的连线方式(连线最复杂)
所谓最稳固的方式(并且是合理的),也即是:
   
桥体的每个点(地下的10个)都和柱子上的每个点(顶上的6个)都做连线
   
这个连线方式题就可以简化为:10个点和6个点之间的连线组合,很明显会有60条线(10*6)。

虽说是最复杂的连线方式,但是在编程逻辑中却是最简单的,程序如下图:

                               
登录/注册后可看大图
为了集中表述问题的关键部分,图片中去掉了点生成的程序部分。

在程序处理细节方面注意line工具的内部必须切换成cross的数据对应方式,这在程序外部看不出来。
连接效果如图:

                               
登录/注册后可看大图

虽然这是最稳固的连接方式,逻辑上来讲很简单,程序处理也很容易。但连接的视觉效果却不够好,因为桥体每个点都有6跟连线,因此连线过于密集(60根连线),造价也较贵(很多更多钢缆)。

最省材料的方式(连线最简单)

再来看最省材料的连接方式:
即:桥体上的每个点(10个点)只使用一根钢丝做固定。从连接的角度可以理解为:

底部的10个点每个点都和上面的6个点的其中之一做连接。
那么具体和顶部的哪一个点做连接呢?我认为和最近的一个点连接是最合理的,因为最省材料而且钢缆牵引的角度也更趋近于垂直向上,力学上来说较为合理。 所以,整个连线的逻辑就是:

底部的10个点中每个点与顶上的6个点中最近的一个点做连线。

这个逻辑就稍微复杂一点了,从编程逻辑考虑实现这个效果可以分为两个步骤实现:
1.首先分别做出底部的每个点和顶上6个点的连线。
2.然后从每个底部点的6个连线中挑选出最短的一根。

在这个编程逻辑中要特别注意:第一步骤的程序输出的数据是有结构分支做管理的,因为第一步实际上仍然是得到60根线(10个点其中每个点6根线),但是如果这60根线是混在一起的,那么在第二步骤中就无法找出属于某一点的6根连线,因此也无法完成第二个步骤中规划的逻辑效果。因此这60跟线应该是依据底部的10个点来做分支处理的,也即是:第一步输出的数据结构应该包含有10个分支,对应的是底部的10个点,而每个分支里面有6个数据,代表连接到某个点的6根线。这种数据结构可以反映60跟线中那些线是连接那个点的,数据结构图和GH中的Param Viewer观察输出结构应该如下图所示:

                               
登录/注册后可看大图
Param Viewer是用于检查树形结构常用的工具,用户应该熟悉如何去阅读它

第一个步骤的程序如下图所示:

                               
登录/注册后可看大图

程序处理细节:为了保证输出结果是分组树形结构,因此根据GH的数据对应法则,必须把B端的数据做Graft处理,这样数据的对应方式就变成每个点和顶部的六个点做数据对应连接线。
<用户应该了解:做Graft之后数据产生什么样的结构变化?为什么要把B端做Graft,而不是把A端做Graft?如果对A端做Graft数据会变成什么样的数据结构?为什么需要这样的数据结构?>

接下来的程序实现第二个步骤:从得到的60根条线中,找出连接每个点的6条线中最短的一根。

这个功能从编程逻辑角度思考可以这样解决:首先对每个点的六条线的长度做从小到大的排序,然后从中挑第一条线,因为第一条线必定是每个点的六条线中最短的一根。这部分并不涉及数据结构的处理,理解工具运作的原理就可以做出来,程序如下。

                               
登录/注册后可看大图

效果如下图,每条线都是底部的每个点与顶部6个点中最近的一个点的连线:

                               
登录/注册后可看大图
在这个例子中,如何控制程序将输出的60根线使用树形结构做正确的归属管理是程序实现正确连线效果的关键。

综合优化的方案
在实际设计中,很多时候采用的解决方案都不是那么极端的,例如第一个方案安全性自然是最好,但是因为连线很多意味着实际项目中钢缆也必须使用很多因此造价很贵。而第二种方案虽然造假最便宜,但是因为每个桥体上的固定点子只有一根钢缆固定,因此安全性最差。而且可以试想如果其中有一根柱子断了,那么整个桥就有一半的区域完全没有支撑,因此很可能整个桥立马就垮了。所以有时候我们会综合造价、成本等因素来考虑解决方案。
因此从加强安全性角度考虑可以使每个桥体的固定点都有2根钢缆固定,且两根钢缆分别连接不同的立柱。再从造价和力学角度考虑让每根钢缆连接对应的立柱中最短的一个点,这样可以在安全性和造价方面获得一个不错的平衡。
因此这个设计的要求就是:
找出底部10个点的每个点分别跟两个立柱连接的3根线中最短的一根。
这个设计从逻辑上来讲其实和第二个方案比较接近,区别在于第二个设计仅仅要求找出每个点的6个连线中最短的一个,而这个设计要求还需将每个点的6根线按照立柱的归属分成2组,然后再找出每一组中的最短的线。因此输出的60根线应该是按照如下的树形结构管理:

                               
登录/注册后可看大图

在明确希望得到的数据结构后,来看程序:

                               
登录/注册后可看大图
首先在程序的立柱点输入端输入的数据必须按照立柱归宿做树形结构的管理,两个分支对应两个立柱,每个分支里面3个数据对应每个立柱的三个固定点。
<立柱的树形数据结构依赖于前端的程序对应生成>

在接下来的连线程序部分会遇到数据对应方面的控制问题,当前程序部分结构如下:

                               
登录/注册后可看大图

现在A和B组数据的结构与之前不同(并非单分支对单分支),按照GH的数据对规则来看,事实上这里无论怎么调整都不可能直接得到我们要的数据结构。<想想为什么>

因此我们的考虑就是退而求其次:如果没有办法直接得到60根线的:10个点—2个立柱—-3根线 的树形结构方式,那么我也可以接受其他的树形结构管理方式,只要60跟线的数据没有混在一起,我们就可以在后面做树形结构的的调整。

因此在这里我们的考虑变成:怎么样处理程序让得到的60根线的树形结构可以体现出:分别属于桥体10个点、分别属于2个立柱、分别属于立柱的3个固定点的结构?也即是树形结构中必须体现出:10,3,2的结构,无论顺序如何。
<这里根据排列原则有六种树形结构是符合要求的>

当前的程序从输入数据的树形结构来分析唯一可以做到这个效果的方法就是:将A组的数据做Graft,<用户可以去思考为什么其他方式都不可以?>如下图所示。

                               
登录/注册后可看大图

读一下输出的数据接结构,我们看到目前的数据结构是这样管理的:

                               
登录/注册后可看大图

其数据管理逻辑是:

这个树形结构可以体现2,3,10的结构,因此他是合理的。但我们希望树形结构管理是这样:底部10个点中的每个点分别于两个立柱的3条线中最短的一条。因此数据结构应该是:

                               
登录/注册后可看大图

因此接下来我们需要在GH中把当前的树形结构做对应调整:

                               
登录/注册后可看大图
<在这里为调整树形结构使到的工具是Path Mapper,Path Mapper在调整树形结构方面有非常多的用途,但是如何灵活运用它依赖于用户必须能看懂树形结构,读懂树形结构代表的数据管理逻辑,还必须明确自己需要的树形结构是什么样,才能配合Path Mapper做对应的调整。>

一旦树形结构调整正确了,后面的部分就很容处理了,跟之前的部分完全一样:对个分支中的三条线的长度做从小到大的排序,根据排序把对应第一条线跳出来即可。完整程序如下。

                               
登录/注册后可看大图

可以看到,虽然整个程序编写过程涉及的树形管理的理解和控制需要非常多的思考,但是写出来的程序是很简单的。
效果如下图所示:

                               
登录/注册后可看大图

因为程序本身可以处理立柱点输入端的多分枝数据结构,因此对于更加复杂的设计,例如我们需要将立柱数量变成5个,仅仅需要从输入端将对应的5个分支的数据输入即可,程序不需要做任何修改,仍然是简单的结构但是可以处理复杂的数据,如下图所示:

                               
登录/注册后可看大图

                               
登录/注册后可看大图


题外话

该部分并不是这个范例中的教学,而是花点篇幅解释一种我们认为不够好的编程思路。虽然这也是一种方法。
例如刚才我们提到的第三种方案:

找出底部10个点的每个点分别跟两个立柱连接的3根线中最短的一根。
遇到这种需要处理复杂的树形结构的程序的时候,我们经常见到这种做法:
1,程序仅考虑处理单根柱子的情况,这样程序会较为简单,程序如下:

                               
登录/注册后可看大图
效果如下

                               
登录/注册后可看大图

这个程序几乎可以沿用最简化方案的程序,但输入仅仅是3个点(第一根柱子)。
当需要处理多根立柱的数据的时候,将整个程序复制一个,输入端接入另一根柱子的3个点,最后再把数据合并在一起如下图所示。

                               
登录/注册后可看大图
这种做法虽然也可以做到本例中的效果,但是其的本质是用多个一模一样的程序并排分别处理不同立柱中的数据,然后再把每个程序得到的数据合并在一起。

这种做法如果要说好处,应该是可以少费一点脑力把。但是缺点是很明显的,如果柱子数量较多,那么就需要对应数量的完全一样的程序来并排处理,程序会因此变得很复杂,不利于修改和管理程序,程序执行效率也会变得比较低。例如前例中最后提到的:如果设计变动成5跟立柱,那么程序就必须复制出5个一模一样的,分别处理每根跟立足的数据,如下图所示:

                               
登录/注册后可看大图
另外这种方式还有一个致命缺点:如果柱子数量本身是一个设计中考虑的变量,那么如果柱子数量发生变动,每次都必须手动修改程序,否则程序运行就会出错。

也即是说,这种方法是因为程序无法处理输入端的树形结构数据,因此把数据结构拆开让多个程序分别处理,因此这种程序往往显得不够“聪明”,它不能适应输入的数据分支结构发生变化的情况。

我们希望学员可以掌握能够处理复杂的树形结构的程序的方法,写出高效而聪明的程序辅助设计。


Dixon
2012-5-30



我司提供建筑方案设计/全流程BIM设计/参数化设计
有兴趣欢迎站内信或在https://www.jianzhu.us进行商务洽谈
我的《Grasshopper从入门到进阶》课程购买地址为https://www.tuozhu123.com/course-54.html
拓邦元帅|WAY1936 发表于 2014-10-21 08:22:33 | 显示全部楼层
发帖得20e币  e币充值  开通VIP会员  快速免费获取e币
不明觉厉,强势支持!嘿嘿~
人生有两条路,一条需要用心走,叫做梦想;一条需要用脚走,叫做现实。
拓土新兵|archimark 发表于 2014-10-23 15:32:15 | 显示全部楼层
发帖得20e币  e币充值  开通VIP会员  快速免费获取e币
好好学习
拓城校尉|yubaoriyue 发表于 2014-10-28 15:14:09 | 显示全部楼层
发帖得20e币  e币充值  开通VIP会员  快速免费获取e币
学习学习  膜拜大神
这个网站不错啊  希望做好了能够坚持免费交流的原则
拓邑团练|淡语夕林 发表于 2015-2-7 19:55:36 | 显示全部楼层
发帖得20e币  e币充值  开通VIP会员  快速免费获取e币
写的好棒!感谢分享
拓邑团练|toplay 发表于 2015-2-7 20:28:56 | 显示全部楼层
发帖得20e币  e币充值  开通VIP会员  快速免费获取e币
同样不明觉厉啊,学习学习
拓邑团练|Sherlock_fan 发表于 2015-2-9 10:46:37 | 显示全部楼层
发帖得20e币  e币充值  开通VIP会员  快速免费获取e币
打错帖子了...
拓邑团练|h_____0 发表于 2015-3-20 17:37:33 | 显示全部楼层
发帖得20e币  e币充值  开通VIP会员  快速免费获取e币
很棒的教程,学习了!
拓城校尉|bearisland 发表于 2015-4-11 16:40:29 | 显示全部楼层
发帖得20e币  e币充值  开通VIP会员  快速免费获取e币
没想通,第三个案例为啥是graft A数据而不是graft B 数据。感觉应该graft B把B分成10组 ,再去和已经分组的A数据去运算呀
拓乡士官|梦蝶游 发表于 2015-11-6 22:00:40 | 显示全部楼层
发帖得20e币  e币充值  开通VIP会员  快速免费获取e币
bearisland 发表于 2015-4-11 16:40
没想通,第三个案例为啥是graft A数据而不是graft B 数据。感觉应该graft B把B分成10组 ,再去和已经分组的 ...

A数组只有两个分支,graftB后就有十个分支,数据首先就对应不上了,
QQ截图20151106220025.jpg
拓邑团练|1728093819 发表于 2018-3-14 10:05:06 | 显示全部楼层
发帖得20e币  e币充值  开通VIP会员  快速免费获取e币
问一下 怎么在line工具的内部必须切换成cross的数据对应方式
拓邑团练|1728093819 发表于 2018-3-18 11:18:45 | 显示全部楼层
发帖得20e币  e币充值  开通VIP会员  快速免费获取e币
哦 我看明白了 通过graft改变树形数据以此来改变数据对应方式
拓土新兵|Swanke 发表于 2018-3-27 16:42:11 | 显示全部楼层
发帖得20e币  e币充值  开通VIP会员  快速免费获取e币
厉害厉害,支持,看完明白了许多
您需要登录后才可以回帖 登录 | 快速注册 微信登录

最近刚做好的城市综合体,还热乎着。。
最近刚做好的城市综合体,还热乎着。。
高层城市综合体设计,本人大四了,都没上传过自己的作业,上周交了图,也没法再改了,传上来大家看看,希望大家多多批评指正! [hr] 最后又画了几条线,不知
  六月问天  阿白47923最后回复于 2024-12-22 课程设计·作业库

西欧法瑞德山地建筑考察之 新天鹅城堡、瓦杜兹、因特拉肯
西欧法瑞德山地建筑考察之 新天鹅城堡、瓦杜兹、因特拉肯
西欧法瑞德山地建筑考察之新天鹅城堡、瓦杜兹、因特拉肯 本人因做一山地旅游建筑项目,去西欧考察山地建筑,考察前准备了有关这方面的资料,考
  mzdyf  阿白47923最后回复于 2024-12-22 大学生讨论区

【加肥猫】25G万科小区cad精选(含部分文本及效果图)
【加肥猫】25G万科小区cad精选(含部分文本及效果图)
如题,最近得到的25G的万科资料,拿来和拓友们分享 注意:本人也属于转载性质,大家请勿用于商业用途 截图很多不一 一上传
  liupeiyu1235  阿白47923最后回复于 2024-12-21 设计文本

新余文化健身广场
新余文化健身广场
不知道有没有需要这方面资料的学友哦,不过我是用到了,在风景园林课上,感觉还是挺有意思的设计。
  josieven  阿白47923最后回复于 2024-12-21 设计文本

顶级水平文本,每页看起来都是享受和启发!
顶级水平文本,每页看起来都是享受和启发!
就一个文本,深圳西岸城市更新项目竞赛的文本,95页,每页看起来都是享受和启发!话不多说,直接上图! 百度网盘下载链接(收
  成之歌  阿白47923最后回复于 2024-12-21 精选合集

《Grasshopper参数模型构建PD-B》(基础级)
《Grasshopper参数模型构建PD-B》(基础级)
资料收集于网络,仅供学习研究。百度网盘下载链接: [sell]链接:https://pan.baidu.com/s/1fN-ryt0Nx86CZEJlOsDDLw 提取码:6xwh[/sell]
  我是大嘴猴  canxingbb最后回复于 2024-12-21 参数化设计

【E拓参数化论坛】精品贴汇总导读
【E拓参数化论坛】精品贴汇总导读
本帖主要是E拓参数化论坛的各种汇总贴。 其中官方公告的一些精品贴和资源帖在主贴附出 E拓参数化论坛各作者的教程在1楼至8楼 预留前20楼以备后期编辑添加新内
  DanielJin  canxingbb最后回复于 2024-12-21 参数化设计

【By DanielJin】由浅入深学Grasshopper 中级02
【By DanielJin】由浅入深学Grasshopper 中级02
大家好,我的《Grasshopper从入门到进阶》课程已经开课了。 有兴趣欢迎关注:https://www.tuozhu123.com/course-54.html 【By DanielJin】由浅入深学Grassho
  DanielJin  canxingbb最后回复于 2024-12-21 参数化设计

《Grasshopper参数化逻辑构建过程PD-A》(入门级)
《Grasshopper参数化逻辑构建过程PD-A》(入门级)
资料收集于网络,仅供学习研究。百度网盘下载链接: [sell]链接:https://pan.baidu.com/s/1pBVszY-gTOWdnslq0Twn8w 提取码:pqaz[/sell]
  我是大嘴猴  canxingbb最后回复于 2024-12-21 参数化设计

【E拓参数化论坛】Grasshopper完全学习手册V1.0
【E拓参数化论坛】Grasshopper完全学习手册V1.0
重磅来袭!中秋献礼! 你们的“小黄人君”DanielJin携E拓参数化论坛团队提前祝大家节日快乐并送上大礼! Grasshopper完全学习手册V1.0正式版终于和大家见面了
  DanielJin  canxingbb最后回复于 2024-12-21 参数化设计

scu再设计教室
scu再设计教室
scu再设计
  渡边绿子.  阿白47923最后回复于 2024-12-21 快速发帖

卫星影像和3D模型
卫星影像和3D模型
请问各位大神,卫星影像可以转化成3D模型吗
  123232176  阿白47923最后回复于 2024-12-21 快速发帖

Enscape高级渲染参数预设合集(宝藏参数)
Enscape高级渲染参数预设合集(宝藏参数)
和所有软件的参数预设类似,仅仅需要在场景中简单加载渲染参数,即可得到已经调整好的渲染效果。让效果更上一层楼! 包含百余款渲染
  sadapple  herowang7828最后回复于 2024-12-21 虚拟化表现

20套商业综合体CAD(免费分享)
20套商业综合体CAD(免费分享)
百度网盘下载链接: **** 本内容被作者隐藏 ****
  深圳老梁  frank2020最后回复于 2024-12-20 参考素材

PSD排版正图最强合集  14.7GB
PSD排版正图最强合集 14.7GB
搜集一些PSD排版,供学生党参考学习~ 百度网盘下载链接: [sell=9]链接: https://pan.baidu.com/s/1VKU_WmYTLIA0l2wmRt5g4Q 提取码: m1nk[/
  邢素平  阿白47923最后回复于 2024-12-20 图形化处理

PS实用小技巧分享,推荐收藏!
PS实用小技巧分享,推荐收藏!
PS是设计师最常用的一款软件,但工作中经常会遇到一些小问题不知道如何解决,今天就跟大家分享几个PS实用小技巧,推荐收藏哦! 快速打开文件 双击Phot
  闪闪的星仔  阿白47923最后回复于 2024-12-20 图形化处理

建筑师如何甩出一份让老板满足的PPT(162页,免费领取)
建筑师如何甩出一份让老板满足的PPT(162页,免费领取)
建筑师如何甩出一份让老板满足的PPT(162页,免费领取) 非常不错的一份资料哦,希望对大家有帮助! 百度网盘下载链接
  小迷妹建筑梦  建筑新人最后回复于 2024-12-20 建筑师讨论区

ps常用高级插件打包分享
ps常用高级插件打包分享
一贯的风格,不喜欢多说,如题,ps常用的插件,打包分享给各位,觉得好给个赞,继续分享更多好资源。 下面是网盘链接[sell=2]链接:https://pan.baidu.com/s/1j
  linlvhao  yanqianjin333最后回复于 2024-12-20 图形化处理

官方综合交流QQ群(更多):

240721746

拓筑在线——面向建筑师群体的

设计交流论坛、软件学习社区、资料下载网站及企业服务平台!

微信扫一扫关注我们

微信公众号

拓筑小助手

GMT+8, 2024-12-22 17:07 , Processed in 0.070863 second(s), 38 queries , Gzip On.    拓筑在线 ( 粤ICP备11043922号 )

Powered by Discuz! X3.4  © 2011-2023 拓筑在线

快速回复 返回顶部 返回列表