当前课程知识点:Grasshopper参数化设计与建模 > 第四章 Grasshopper数据结构(一) > 4.1 Grasshopper数据结构基础 > 4.1
返回《Grasshopper参数化设计与建模》慕课在线视频课程列表
返回《Grasshopper参数化设计与建模》慕课在线视频列表
本节我们将给大家介绍
grasshopper当中一种基本的数据结构
也就是列表的基本操作
作为学习数据结构的开始
我们首先需要学习一下
如何生成或者获取多个数据
如何在grasshopper里面
生成或获取多个数据
比如说我们已经用过的
这个叫做range的这个运算器
我们把它放大看一下
Range左面输入的是一个domain
一个范围
Range左面输入的是一个domain
一个范围
和一个steps
就是我把这个范围切分成多少份
右边就会相应得到多个数据点
比如说我们在这里输入3
将0到1的这个范围切分成3份
我们在右边就会得到
这样的三个数据点
我们可以把它可视化出来
可以用xyz的方式
把这样一个Xyz的点的坐标的方式
把这个切分的数据
作为x的坐标输入进去
这样的话我们就得到了Range
它能够对一个区间进行切分的可视化
我们可以增加它的数据量
或者减少它的数据量
那么与range相似的
有一个叫做series的运算器
Series
那么Series呢
它是需要我们给定一个start
就是起点
然后一个Steps
指的它得到步长以及它的count
就是有多少个点
我们也可以做一下 演示一下
我们有四个点 步长是0.1
那么它的起点是0.3
同样我们把这些复制过来看一下
两个数据列重在一起了
我们把这儿的y值给它set成1
那么这个就是
我们在这里用series生成的数据点
它是从0.3开始
间距0.1然后有4个点
我们可以增加这个点的数量
间距0.1然后有4个点
我们可以增加这个点的数量
可以改变它的起点
包括这里我们也可以设定它比较大
或者比较小 都可以
这儿就不调了
那么我们还可以用一种什么方式呢
就是比如说如果
在rhino里我有若干个点
这种方式我们以前使用过
Pt
我们可以set multiple points
可以框选
这样可以获得多个点
我们也可以用panel来输入多个数据
至于Panel输入多个数据的时候
我们前面用过比如说
我们输入1
回车3 4 2 5
这个时候虽然我们输入多个数字
但是其实grasshopper认为这是一个
多行的数据是一个文本数据
所以这里我们要改变它的一个设置
在这里multiline data
这个现在已经是选中的状态把它取消
取消以后呢
每一行都会变成一个单独的数据
就变成了5个数字
每一行都会变成一个单独的数据
就变成了5个数字
那么除了这种方式我们还可以用random
随机的方式
那么可以生成一系列的随机数
在这里可以输入多少个随机数
比如说4个随机数
在右面就得到了
4个从0到1之间这个区间内的随机数
那么这些都是我们获取
各种数据列的一种方式
或者叫做列表的方式
在rhino里面多个数据
我们一般叫做list
就是在Sets里面我们看到这儿
有专门的针对List做操作的
一系列的这个电池
有专门的针对List做操作的
一系列的这个电池
一会儿我们会做介绍
那么对于List来讲
比如说我在这里拾取了5个点
我可能是框选的
但是我其实并不知道
有的时候你会选择很多个点
也不知道它到底有多少个点
所以当我们有一个List以后
可能马上会想到需要做一个运算就是
知道比如说这个地方这个List有多长
有多少个数据
所以有一个电池叫做List Length
我们输入Length 长度
这里有很多个长度
我们选择List Length
是一个列表它的长度
我们把这个接上去
看看List Length是多少
鼠标放在这儿就可以看到是5个
因为我刚才选了5个点
这样就可以求出来
List Length是5个
好 然后当然我们可以去做其他的
比如说这边都可以做List Length
有了这个长度以后我们就会想到的是
那我能不能提取其中的某一个元素
比如说在这里头
那我能不能提取其中的某一个元素
比如说在这里头
我想提取其中的第3个
可不可以呢
有一个电池叫做List Item
也是在List这个相关的这些type里头
我们把这个List输入进去
把这个List输入进去然后
在这里输入一个Slider
刚才说的第3个 第3个是多少
就是这个2 编号3的
在这里头编号3的这个是2
注意在grasshopper里面
List的顺序号是从0开始
这个大家如果对编程比较熟悉
在很多的编程语言里头
一个序列或者一个List或者一个数组
它的标号都是从0开始
那么这样我们就可以比如说改变滑动条
就可以得到List里面任意一个数据
提取它的任意一个数据
当然如果我们已经有了比如说这个3
这边的这个3
我们又想知道这个3
它在这个list的里面的位置
实际上是跟List Item做一个运算
那我们就有一个叫做Index
这个叫Item Index的运算器
我们把刚才的这个List
这是我们的List
把List输入到这边
然后把Item从这里放进去
我们就会得到Item它的编号
Item的编号是1
注意在这里有一点是需要大家注意的
有可能你会想
我在用这样一个List Item的运算器的时候
有可能你会想
我在用这样一个List Item的运算器的时候
我不是这种使用方式
而是比如说我想知道3在这里面排第几
所以我可能会输入一个Panel
然后输入3
所以我想看看3在这个List里面是第几个
但是这个结果其实并不是我们想要的
大家看到它显示-1
-1的意思是没找到
为什么没找到呢
这不是3吗应该是一样的呀
这个意思是说
这个List Index它其实是找的
我们通过这种List Item的方式
提取出来的一个数据
它在Index里面的位置
所以如果你输入一个数字
虽然跟它大小一样
它依然不可能在List里面找到
实际上是说
如果我们用List Item的方式
提取出来这个元素
那么它在内存里头是有一个位置的
是有一个惟一的位置
那么我们再去找这个惟一的数据
它在这个List里面的顺序号
就可以找到
同样你也可以这样去想
如果我这个List里面
如果还有一个3的话
那么照理说我会用这种方式找到
两个序列号 这样就有矛盾
所以其实它不是这样使用的
这个List Index不是这样使用的
对于一个List来讲
我们也可以对它进行一个排序的工作
比如说对于像这样和这样的
顺序混乱的这种List
我们可以去做一个排序的工作
sort sort list
把这个list从这儿输入进去
我们看一下右边得到的结果
那么就是由小到大的排序的一个list
那么可以排序就可以颠倒顺序
reverse reverse list
可以把一个list的顺序
给它颠倒过来
这是经过颠倒的从大到小的这个list
所以实际上对于
像reverse这样的操作呢
我们是可以在很多的电池的
输入或者输出的地方都可以
鼠标右键可以找到reverse
这里我们就可以需要reverse
跟这个reverse的模块
它的作用是一样的
跟这个reverse的模块
它的作用是一样的
大家可以回去试一下
好 那么对一个list来讲
我们还可以做一些调整它的顺序的事
比如说我们有一个series
这里得到了一个list
是0,1,2,3,4
这里得到了一个list
是0,1,2,3,4
我们可以做一个叫shift的操作
shift是什么意思呢
就是对list让它做一个偏移
我们看一下偏移以后的结果
变成了1,2,3,4,0
它的意思是把这个list向前推移一个
向前推移多少呢
在这个地方我们可以输入2
用一个slider去改变shift的幅度
现在如果我偏移2的话
那么就会跨过两个数据以后
从第三个数据开始2,3,4
完了以后呢会把前面两个0,1呢
补在最后
2,3,4,0,1
就是从这个0,1,2,3,4变成2,3,4,0,1
shift如果是1的话就是这种情况
shift这有一个叫wrap的选项
wrap的意思是说如果我经过shift以后
shift这有一个叫wrap的选项
wrap的意思是说如果我经过shift以后
那么我需不需要把原来前面那个
比如说把0,1补到这个list的后面去
那么我需不需要把原来前面那个
比如说把0,1补到这个list的后面去
这个就是wrap
我们可以在这设定false
我们看一下它的结果就是
当我们shift越多
这个列表就会越来越短
这个是shift
我们也可以对这个list做一个叫
replace的操作
replace items
这是一个list 2,3,4
我们可以比如说
这是一个list 2,3,4
我们可以比如说
我们想把中间这个3替换成别的
那么在这我们就要首先输入一个1
输入一个位置
这里输入它的位置在这里 在indices
这里输入它的位置
以及我们要把它换掉的
比如想把3换成5
经过替换以后
2,5,4
变成这样一个结果
我们也可以做insert
插入一个item
对这个list
同样我们把这边的slider拷贝过来
我们要在这个位置上插入一个6
看一下插入的结果
注意到这里这个indices太大
它比这个序列的长度还大
所以我们把它拖小一点
我们把它插入到第一个位置上
6就插入到了这个list的第一个位置上
得到这个结果
6就插入到了这个list的第一个位置上
得到这个结果
接下来我们还可以做
就是把这样一个list进行切分
比如说我们有split
就是把这样一个list进行切分
比如说我们有split
split一个list
有各种各样的split
我们split一个list
有各种各样的split
我们split一个list
把这个list给它
然后我们给它一个位置
比如说这里输入2
slider
我们看一下这边就会得到两个list
它们分别是
这样一个list和这样一个list
就在2的位置上把它切分开
这是split
我们还可以做一个事情就是sub list
所谓子list
我们可以从这个list上面去取一个范围
这里我们要构造一个domain
一个范围
construct domain
构造一个范围
在这边输入2
上面是缺省的0
所以0到2
我们就会得到一个sub list
2,6,5
就是这个子list
我们可以调整上下界
得到它的子list
有了sub list或者有了这些list以后
我们还可以把list合并在一起
比如说用merge
merge是一个非常强大的运算器
或者说是非常有用的运算器
我们把3个list merge在一起
然后看一下最后的结果
它把3个list都接在一起了
按这个顺序
按我们接入的顺序
2,6,5,2,6,5,4
好我们来总结以下
这以节的学习内容
首先我们学习了如何
获取多个数据的不同方式
这里包括使用range
sries等
这样的模块
sries等
这样的模块
来生产多个数据的方式
我们也以Set multiple points这种操作为例
介绍了从reverse当中
输入多个集合物体的方式
还有如何Panel当中设定多个数据的方式
以及使用Random的方式
来得到多个随机数
接下来我们也学习了列表当中的常用操作
包括如何计算列表的长度
如何提取特定数据
如何对数据进行偏移
替换数据、插入数据
以及合并列表等
-1.1 参数化设计简介
--1.1
--模型文件
-2.1 Grasshopper简介
--2.1
-2.2 Grasshopper界面与基本操作
--2.2
-2.3 Bake与Internalize Data操作
--2.3
-第二章习题--作业
-3.1 Math运算器
--3.1.1
-3.2 点与向量
--3.2.1
--3.2.2
-3.3 Grasshopper曲线运算器
--3.3.1
--3.3.2
-3.4 Grasshopper曲面运算器
--3.4.1
--3.4.2
-3.5 案例:水波
--3.5
-3.6 案例:螺旋曲面
--3.6
-第三章习题--作业
-4.1 Grasshopper数据结构基础
--4.1
-4.2 数据流匹配
--4.2
-4.3 Dispatch运算器
--4.3.1
--4.3.2
-4.4 案例:项链
--4.4.1
--4.4.2
--4.4.3
-第四章 Grasshopper数据结构(一)--第四章习题
-5.1 Nurbs原理简介
--5.1
-5.2 Nurbs建模演示
--5.2
-5.3 Evaluate操作
--5.3
-5.4 由点建立曲线
--5.4
-5.5 Nurbs与向量
--5.5.1
--5.5.2
-5.6 案例:凤凰中心曲线环廊
--5.6.1
--5.6.2
-5.7 案例:鸟巢表皮钢结构
--5.7.1
--5.7.2
-第五章习题(一)--作业
-第五章 Nurbs曲线与曲面建模-- 第五章习题(二)
-期中作业:工艺品设计
--期中作业
-6.1 Grasshopper树状数据结构(1)
--6.1.1
--6.1.2
--6.1.3
-6.2 案例:2016年BIG事务所蛇形画廊
--6.2.1
--6.2.2
-6.3 Grasshopper参数化表皮
--6.3.1
--6.3.2
-6.4 案例:凤凰中心表皮结构
--6.4.1
--6.4.2
-第六章 Grasshopper数据结构(二)--第六章习题
-7.1 Image Sampler
--7.1.1
--7.1.2
-7.2 案例:望京soho表皮
--7.2
-7.3 Vironoi运算器
--7.3
-7.4 Metaball运算器
--7.4
-7.5 参数化设计在大型项目中的应用案例-“红飘带”景观装置
--7.5
--第七章 Grasshopper建模技巧--第七章习题
-8.1 Mesh原理
--8.1
-8.2 SubDivision与银河Soho案例
--8.2
-8.3 地形建模
--8.3
-8.4 面板划分:以银河soho为例
--8.4.1
--8.4.2
-第八章 Mesh建模基础--第八章习题
-9.1 Kangaroo插件简介
--9.1
-9.2 悬链线
--9.2.1
--9.2.2
--9.2.3
--9.2.4
-9.3 张拉膜,充气膜与可受弯面
--9.3.1
--9.3.2
-9.4 CirclePacking
--9.4
-结语
--9.5
-第九章 Kangaroo物理模拟--第九章习题
-期末作业: 综合运用
--期末大作业