今天呢,咱们不去画一些稀奇古怪,酷炫的图形。回归本真,咱们回到数据结构上,这也是GH最核心,最重要的部分,通过对一些不常用的原生运算器用法的剖析,让大家感受一下数据结构能被玩坏到什么程度,咱们话不多说,走着。
这次咱们来个倒序:
难度爆表系列:
split tree
其有两个数据输入端口
Data:数据输入端
Mask:处理数据的规则
两个输出端
Positive:符合处理规则的数据会在这里被输出
Negative:不符合处理规则的数据会在这里被输出
其难点就在于处理数据的规则的书写,当然它方便也方便在这里,你可以根据自己的需要,以自己喜欢的方式,在panel运算器中输入规则去调用数据,这里给大家总结出一些数据处理的规则。
单独筛选出一个分支数据,你就可以直接输入组名称:
筛选出所有0开头的分支,如、。当然也可以是、 …………
筛选出所有以0开头,以0或1结尾的分支
筛选出所有以0开头,以0到2结尾的分支(0、1、2)
筛选出所有0开头的数据组,不管后面有几级数据,都能一并给你筛选出来。
筛选出以0开头,二级数据结构除了0之外的所有数据
筛选出以0开头,二级数据为所有奇数的数据(偶数同理)
筛选出所有0开头,0到6的偶数(奇数同理)
[2] 筛选出(0;0)组中的第三项的数值
总结一下:
?——任意单个整数
* —— 任意数量的整数(如(0,*)也就是后面随便有几个数据结构,我都可以给你选出来)
!——除去(如 !0 为选择除去0之外的数据)
(0,1,2)——任意一组数字
(0 to 5) —— 0到5的所有整数
(0,2,...)——所有偶数(奇数同理)
(0,2,... ,50)——有限区间内的所有偶数(奇数同理)
or——合并两种规则(如(0,1,2)or(3,8))
[ ]——筛选出数据组中的第几项
因此,根据这种书写规律,就有了千变万化的筛选数据的方式
如:开头为偶数,中间为非4或5,结尾为0到2区间的所有分支
{!(1,3,...);!(4,5);(0to2)}等等
大家可随意组合,绝对好玩,哈哈哈哈哈!!!
Path mapper
额……,就这么说吧,path mapper在数据结构处理方面很强,但是作为艺术大师的我们可能一时间不太能理清这种计算机语言的运算思路。
首先呢,就是右键这个运算器,有六种选项
create null mapping:就是啥也不干,不对数据结构进行处理。
create flatten mapping:就是拍平数据,在这里我们就能看到拍平数据的本质,就是把所有数据归到一个数据集中,这里默认的叫,当然叫什么不重要、……都可以,你可以双击进去修改,关键是所有数据在一个数据结构中。
create graft mapping:就是将数据集中的每一个数据都归为一类,自己独享一个数据分支,不与其他数据同流合污,和graft tree运算器是一个用法。
create trim mapping:向上砍一级数据,从到。
create reverse mapping:创建反转数列。
create renumber mapping:无视原数据结构分级,将所有数据结构按照012345的顺序排列。
咱们接着看他有什么优势:
更改路径名(突出一个随心所欲):
翻转数据结构(从中我们可以看出,当数据结构复杂时,flip matrix就不能胜任翻转数据的工作了,因为已经红红的了)
原始连线方式:
第一种反转数据方式(i)到(B):
第二种翻转数据方式(i)到(A):
除法的用法(floor/ceiling/int)
floor:小数部分取整为0
ceiling:小数部分取整为1
int:正常的四舍五入(round同样也是四舍五入)
这里解释一下:
item_count 意思是这一分支中的数据量是多少
path_count 意思是该数据有几个分支数据结构
path_index 意思是当前数据的分支编号
%n的意思是按照奇偶路径分为几组
没啥难度系列:
1.“0”与“-1”
我们拿list item来举例,输入“0”可以选择第一个数据,但同时输入“-1”可以很方便的选择最后一个数据。
2.合并数据的三种方式:merge、weave、entwine
merge可将具有同一结构的数据合并到一起,而不具有同一结构的数据,它只会把这些数据工工整整的摆在一起,不会合并到一起,因此在输入端最好把所有数据都simplify一下,让他们的数据结构一致。
具有同一数据路径:
数据路径不同:
weave可以将不同数据流中的数据按照你指定的提取方式提取出来,并重新编成一个组,比如默认的pattern是0 1,就是说在stream 0中提取一个数据,在stream 1 中提取一个数据,以此类推。当然,你可以修改pattern的形式,也可以增加或减少stream的数量。下图分为数据结构相同和数据结构不同两种形式。
entwine默认将输入端的多组数据进行flatten处理,之后根据输入端的数据结构形式,重新把这些数据划分进不同的数据组中,你可增加或减少输入端。当然你也可以右键运算器不勾选flatten inputs,这样运算器会自动增加数据结构(不过一般不太常用)。
3.清理重复数据:create set
合并同类项,并且在map端返还所选择数据的序号值,其实就可以应用于删除一些多余重复的数据。可以合并所有类型的数据,矢量,数字,文字,点坐标,图形,等等等等。
4.flatten tree与 unflatten tree
这组运算器就有意思了,flatten是将数据拍平(其中的path端口是规定拍平后数据结构名称的),unflatten是将拍平的数据再找回来
有点难度系列(感谢David Rutten和蒯神的讲解):
relative item与relative items
类似斜向连线的数据处理的神器,lunchbox插件中的分割其实就是这个原理
首先看一下,如果正常连线,连线方式是这样的
那如果我们想斜向连线呢:其实仔细思考原理,我们就会知道,如果想斜向连线,其实就是第1组数据中的第1个数据和第2组数据中的第2个数据相连,第2组数据中的第2个数据和第3组数据中的第3个数据相连。同时,第1组数据中的第2个数据和第2组数据中的第3个数据相连,也就是每一根线是由[+1]前后的两个数据相连得到的。
PS:因为这里的数据结构是未被简化的,是的结构,因此,这里的offset端是这么写的,要根据相应数据结构,进行相应的改变。
如果更复杂一点呢
是不是和luncbox中的网格划分有点像
relative items的原理和relative item是一样的,只不过是在两组数据之间处理,这里便不再赘述。
终于写完了,下一期咱们继续,小伙伴们…………