Wrangle
Numbers variable
@elemnum
Value
$FF = @Frame
$PT = @ptnum
$PR = @primnum
$NPT = @ptnum
Array
float test[] = {0,1,2,3,4,5}
or
f[]@test = {0,1,2,3,4,5}
Loop
f[]@test ;
for (int i = 0; i<10; i++ ){
push(@test ,i)
}
List Match
int idlist[];
idlist = {1523,145,1738,1739,1743,1755,1756,159,1711,204,205,211,152,151,1742,1715,1706};
if(find(idlist,@id)>=0){
@Cd = {0,1,0};
}
Condition Match
int condition = (@P.x>0) ? 1:0;
example of just adding noise(possibly shorter?)
@P=set(@P[0] , noise(set(@P[0],0,@P[2])) , @P[2]);
Using Channel
Just use ch("parm")
Importing point attribute from other slot
@P = point(@OpInput2,"P",@ptnum);
or
@P = point(1,"P",@ptnum);
or
@P = @opinput1_P;
@P.y = point(@OpInput2,"test",@ptnum);
@P = point("op:../box3","P",@ptnum);
Attribute Variable Mapping
f@test = 1;
addvariablename(geoself(), "test", "TEST");
Intrinsic(float value is not supported yet)
i@test = primintrinsic(0,"typeid",@primnum);
Changing Intrinsic Attribute
setattrib(geoself(), "primintrinsic", "volumebordertype", @primnum, -1, "constant", "set");
setattrib(geoself(), "primintrinsic", "volumebordervalue", @primnum, -1, 0.0, "set");
Mix
@Cd = lerp({1,0,0},{0,1,0},0);
Centroid
vector min, max;
getbbox(min,max);
vector center = (min+max)/2;
getbbox(1,min,max);
can get from other input
Point Cloud
pcopen(@OpInput2, "P", @P, $radius, $maxpoints)
pcfilter($handle, $channel)
pcnumfound($handle)
pciterate($handle)
Format
int handle = pcopen(@OpInput2, "P", @P, 1000, 1);
@v = pcfilter(handle, "v");
pcclose(handle);
Loop
while (pciterate(handle)){
}
Loop
int closept[] = pcfind(1,"P",@P, 0.5,10);
foreach (int pt; closept){
test += point(1, "test", pt);
}
SDF push
float volsample = volumesample(1, 0, @P);
vector volumegrad = volumegradient(1, 0, @P);
vector pushOut = volumegrad * -volsample;
@P = @P + pushOut;
Noise
vector freq = {1,1,1};
vector offset = {0,0,0};
float amp = 0;
int turb = 5;
float rough = 0.5;
float atten = 1;
onoise(@P*freq - offset, turb, rough, atten) * amp
snoise(@P*freq - offset, turb, rough, atten) * amp
anoise(@P*freq - offset, turb, rough, atten) * amp
vop_correctperlinNoiseVF(@P*freq - offset, turb, rough, atten) * amp
vop_correctperlinNoiseVV(@P*freq - offset, turb, rough, atten) * amp
vop_simplexNoiseVF(@P*freq - offset, turb, rough, atten) * amp
vop_simplexNoiseVV(@P*freq - offset, turb, rough, atten) * amp
vop_perlinNoiseVF(@P*freq - offset, turb, rough, atten) * amp
vop_perlinNoiseVV(@P*freq - offset, turb, rough, atten) * amp
Remove Points(need to be cleaned. prims still exist)
if (@P.y<0){
removepoint(geoself(), @ptnum);
}
Remove by NDC
vector ndc=toNDC("/obj/cam1",@P);
float ov = 0;
@Cd = ndc;
if(ndc[0]-ov<0 || ndc[0]+ov>1 || ndc[1]-ov<0 || ndc[1]+ov>1 || ndc[2]>0){
removepoint(geoself(),@ptnum);
}
Remove Prim
if (@numvtx!=4){
removeprim(geoself(), @primnum, 1);
}
Remove by vertex UV
if(@uv.x<0.5){
int prim = vertexprim( 0, @vtxnum );
removeprim( 0, prim, 1);
}
Create centre Point(Detail)
vector min, max;
getbbox(min, max);
vector centre = (min+max)/2;
for( int i=0; i<npoints(@OpInput1); i++ ){
removepoint(geoself(), i);
}
int centPoint = addpoint(geoself(),centre);
Line to next Point
int a = addprim(geoself(), "polyline");
addvertex(geoself(), a, @ptnum);
addvertex(geoself(), a, @ptnum+1);
Isolating Edge Group
int edge_group[] = expandedgegroup(1, "group2");
for (int i = 0; i<len(edge_group); i+=2 ){
int line = addprim(0, "polyline");
int point1 = addpoint(0, vector(point(1,"P",edge_group[i])) );
int point2 = addpoint(0, vector(point(1,"P",edge_group[i+1])) );
addvertex(0, line, point1);
addvertex(0, line, point2);
}
Adding Point and Line
int pp = addpoint(geoself(), @P + set(0,1,0) );
int a = addprim(geoself(), "polyline");
addvertex(geoself(), a, @ptnum);
addvertex(geoself(), a, pp);
For Loop
for( int i=0; i<10; i++ ){
int pp = addpoint(geoself(), set(0,i,0) );
}
Neighbour Loop
f@A = 0;
for( int i=0; i<neighbourcount(0, @ptnum); i++ ){
int np = neighbour(0,@ptnum,i);
@A += point(0,"attr", np);
}
Resample (prim)
int segment = 50;
for( int i=0; i<=segment; i++ ){
vector a = primuv(0, "P", @primnum, set(float(i)/segment,0));
int pp = addpoint(geoself(), a );
addvertex(geoself(), @primnum, pp);
}
for( int i=0; i<primvertexcount(0, @primnum); i++ ){
removepoint(geoself(), primpoint(0, @primnum, i));
}
Comment Block
/*
comment
*/