attribwrangle(VEX)
自定义数据类型
例如:float vScale = chf(‘vel_scale’);
其中float 是浮点数据类型 vScale是定义的名称 ch代表通道,f代表通道类型为浮点,()内部为浮点名称,'字符串',分号结尾
整理可得:float 空格 name 空格=空格chf(单引号+字符串)分号结尾
类似的有:
字符串类型 string stringParm = chs(‘string_example’);
整数类型 int intExample = chi('int_example');
矢量类型 vector vecExample = chv('vector_example');
v@v = {0,1,0};
前面的v是vector矢量,@v是获取速度velocity 空格 = 空格 {x,y,z}对应矢量的方向和大小
v@v = @N*vScale
同样的v@v = 出现时会覆盖掉之前的定义,即重定义,如上第一次定义了一个方向Y轴大小为1的速度 第二次重新定义沿着法线方向 大小为浮点数vScale与法线大小的乘积
v@Cd = {0,1,0};矢量获取Cd颜色为{红,绿,蓝},分号;结束
v@Cd = rand(seed num); 其中 seed num = @primnum /fit01(@float,min,max)
如果float name = chf(“”),变成了f@name = chf(“”);
在调用的时候前面直接写成@name 如:v@v = @N*@vScale
在属性函数中
point(inputnum,“P”,@ptnum)点的模型输入端数字(0/1/2/3),获取Poistion“位置”信息,获取点ID数量
set(0,0,0) 设置对应的是XYZ或者 红绿蓝,也可以是rand变量或者fit01(@pscale,min,max)
又如:
float randomize = rand(@id);定义浮点数 命名为randomize 赋予值为随机id值
f@inheritvel = 0.5; 浮点获取继承速度值并赋值为0.5
v@nearbyEdgepos = minpos(2,@P); 定义矢量名称为nearbyEdgepos的值为 点到第二个输入端模型最近距离点位置
v@edgeDist = distance(@nearbyEdgepos,@P);定义矢量名称为edeDist的距离值为nearbyRdgepos 到点的距离
即先寻找最近距离点,再求出点到点的距离
条件函数 Condition Statements
if(//This condition is true) >Greater than >=Greater than or equals
{ < Less than <= Less than or equals
//Run this code; == Equals != Does not equal
} & And
|| Or
例如:
if(@ptnum>1000)
{
@Cd = {0,0,1};
}
如果点序号大于1000 那么这些点序号大于1000的点颜色为蓝
函数嵌套,如:
if(@ptnum>1000)
{
@Cd = {0,0,1};
if(@ptnum>1500&@ptnum<2000)
{
@Cd = (0,1,0);
}
}
else
{
@Cd = {1,0,0};
}
第二个if成立的条件是建立在第一个if条件下的
----------------------------------------------------------------------
while&do 循环函数
while(//This condition is true)
{
//Run this code;
}
尝试用while 写一个颜色的案例 例如:
v@v = {0,1,0};
while(@P.y<100)
{
@Cd.g -= .1;
@Cd.b -= .1;
if(@Cd.g<=0);
{
pointremove(0,@ptnum);
}
break;
}
首先设置一个矢量方向为Y轴的速度,在条件函数while 下,如果位置信息小于100时,那么颜色green 和颜色blue 值会一直-1循环,直到小于或等于0被排除掉,即只剩下红色,嵌套条件函数if 当绿色green信息值 小于或等于0时,这些点会被移除,最后用break来终止本次循环。书写的过程要注意规范。
do循环案例:
do
{
@P.y += .1;
@icounter +=1;
}
while(@P.y<1000);
执行do循环函数,当y位置信息<1000时,点y位置循环+0.1,数量同时+1,直到y位置信息>1000时候,停止循环。
条件语句的简写形式:
@Cd = @ptnum<24 ? {1,0,0}:{0,1,0};
即当点数小于24时,我们将颜色设置为红或者绿
-------------------------------------------------
数组(矩阵)Arrays ForEach Loop 例子
阵列:i[]@exampleArray = {1,2,3,4};
foreach循环:foreach(int x;@examplearray)
v[]@colors = {{1,0,0},{0,1,0},{0,0,1}};
foreach(vector x;@colors)
{
if(x={1,0,0})
{
@colors[0] = set(rand(@ptnum+123),rand(@ptnum+12),rand(@ptnum+2))
}
}
@Cd = @colors[0];
三元矩阵--矢量颜色为红绿蓝叠加色=白色
for 循环
int x;
for(x=0;x<3;x++)
{
//do this;
}
取整X ,开始X=0,当X 小于3时,执行 循环,完成一次循环X+1 当X>=3时,循环停止
由此我们可以看出foreach 循环与for循环的区别:foreach 需要数组,而for 循环不需要。
for循环想使用数组的时候,需要使用len()函数,以保证数组里面的数据能被循环到,如:
for(x=0;x<len(@examplearrray);x++)
网友评论