idx++ 相当于idx+1
之所以vex表达式要在detail层级下运行,是因为要保持数据的轻量化,同一行表达式,如果在point层级下运行,那么有多少个点,这行表达式就会运行多少次,但是在detail层级下运行,这行表达式就只会运行一次。 在这里因为要写For循环语句,For循环语句运行一次就会循环五百零一遍,如果在point层级下写For循环语句,计算量会非常非常巨大
for(init; condition;change){ statement }循环语句格式,先运行init,再进行条件判断,判断为真,便执行大括号里边的statement,再执行change,进行条件判断,判断为假便退出循环;
for(int i = 0; i < npoints(0); i++){
setpointattrib(0, "aaa", i, i, "set");
} 这个是for循环的标准写法; 先定义一个临时的int形式的变量,名字随便起,在这里起名为 i ; 数值是0,然后给一个条件,这个条件就是 i < npoints(0),当这个条件满足,即代表是真,那么就执行下边大括号里面的操作。
setpointattrib函数是给点设置一个属性,因为这是在Detail层级下运行,如果直接创建属性,这个属性会写入Detail层级下,所以需要用到这个函数,才能把属性写入point层级。 第一空填要把属性设置到哪一个对象,0即是代表自身;第二空是要设置的属性的名称;第三空是要设置属性的点的序号;第四空是要将属性设置为多少的值;第五空是用哪一种方式来设置属性。在这里,因为这是第一次循环,i 已经在上边设置为0,那么要设置属性的点的序号是0号,设置的属性的值是0。
完成第一次循环,进入第二次循环 i 的值会加1,此时 i 的值是0+1,等于1,进行条件判断,条件依然满足,输出依然为真,再执行一遍大括号里的操作,此时要设置属性的点的序号是1号,设置的属性的值是1。完成第二次循环,剩下的循环都是以此类推,当条件不再满足,那么便会退出循环
int temp_array[] = point(0, "taken_already", 0); 这句话是创建一个临时的整数型变量数组,读取的是0号点的i@already_taken[]属性的数值
vex中写for loop:
for(int idx=0;idx<10; idx++){
}
for循环需要三个参数,用分号结尾,设置一个整数idx,从0开始(第一次迭代);运行这个loop多久(知道idx<10结束) ;从第一次循环开始,每次增量多少(idx每次+1)
setepointattrib(0, "test_ptnum", idx, idx, "set")
输入接口0,创建了一个叫test_ptnum的属性,使用idx作为点编号,使用idx set(设置)到idx上
好记性不如烂笔头
for(int i ;i<npoints(0);i++{
vector cd = point(0,"Cd",i);//读取 cd
vector position = point(0,"P",i);//读取@P
}
要分清楚 赋值 和读取的 分别
pc cloud中 许多情况需要 一个个id来进行 某一个的 操作 也就是我们常用的 for 函数
或者可以用for each
定义一个 初始 inter 和一个数组 array
for each (int ps;pts) ;
组 里面 可以是 float intger vector
pts[0]
数组 也就相当于一个选集 在一个选集里面进行循环 就需要 在选集数组里面进行迭代了
比如我们有数组 pts[] 在其中迭代就是
要设置 for loop 或者 for each
for loop (int i ;i<npoints;i++){
读取数值 ;cd p aa(自定义)
指向数值;a=b b=c
赋予数值(修改数值);
}关于之前的疑惑
如何快速的获得一些数组 比如
int pts[] = nearpoints() 找到一些符合半径 符合点数量的 点 第0个几何体上 但是并没有说 在哪一个点上执行搜索;
int pts[] = pcfind()