一夹纫、簡單的foreach
- 代碼:
//對(duì)于體積旭咽,并非只能用Volume Wrangle
//正如Attribute Wrangle其名,有屬性就能用它;有point prim vertex就能用
// aw可以讀取和修改屬性,vw可以讀取和修改體積(體素)
float density[] = primintrinsic(0,'voxeldata',0);//獲取intrinsic屬性礁竞,
//voxeldata:體素值的浮點(diǎn)數(shù)組
float maxValue = 0; //該變量用來存放最大值
foreach(float value; density) //遍歷density數(shù)組中的每一個(gè)浮點(diǎn)value
maxValue = max(maxValue,value); // 上次的值 與 這次的值 對(duì)比,取最大的
setprimattrib(0,'name',0,sprintf('%s',maxValue));
//轉(zhuǎn)成字符串賦予給name屬性(也就是體積的名字)
//中鍵按住即可方便地觀察體素的最大值
- max函數(shù):兩個(gè)參數(shù)值進(jìn)行比較杉辙,取最大值返回
二模捂、for each 帶序號(hào)形式
- 代碼:
//下列代碼求 體積中 體素值在rangeMin~rangeMax范圍內(nèi)的體素 的數(shù)量占總體素量的百分比
float density[] = primintrinsic(0,'voxeldata',0);
float maxValue = 0; //存放最大值
float minValue = 0; //存放最小值
float rangeMax = chf('range_max'); //最大范圍
float rangeMin = chf('range_min'); //最小范圍
int sampleRate = int( rint( 1/chf('sample_rate') ) );
//采樣率(跳過體素個(gè)數(shù)):用戶輸入0~1; rint()取最近整數(shù)返回浮點(diǎn),如2.5=3.0,2.49=2.0,-0.6=-1; int()取整
//例如 用戶輸入 0 0.5 0.3 0.01 1 恰好0和1意味著完全采樣
//sampleRate = 0 2 3 100 0
int count = 0; //計(jì)數(shù)器
foreach(int id; float value; density) //遍歷density數(shù)組中的每一個(gè)浮點(diǎn)value蜘矢,
//每循環(huán)一次狂男,id+1
{
if( id % sampleRate == 0 ) // 如sampleRate = 5,則每隔5個(gè)體素運(yùn)行下列代碼一次
{
maxValue = max(maxValue,value);
minValue = min(minValue,value);
if( value < rangeMax && value > rangeMin )//如果體素值符合范圍
++count; //計(jì)數(shù)器+1
}
}
printf('max = %s\n',maxValue);
printf('min = %s\n',minValue);
printf('percent = %s\n',float(count*sampleRate)/len(density));
// 百分比 = 計(jì)數(shù)結(jié)果*跳過體素個(gè)數(shù) / 體素總數(shù)量
- rint函數(shù):進(jìn)行四舍五入