Tags
EDIT: 06, December 2016
I rarely find the time to update this blog, my bad. The point cloud plucker is especially useful for removing points that are too close to one another. An implementation in VEX is a lot more faster than a Python implementation. Below is the VEX code for this:
VEX CODE:
int handle = pcopen(@OpInput1, "P", @P, chf("rad"), chi("num"));
while(pciterate(handle)){
i@many = pcnumfound(handle);
for(int i = 0; i<i@many;i++){
if(i==0)continue;//ignore myself
else{
pcimport(handle,"point.number",i@nearptnum);//import ptnum of nearpoints
/* If point is already in group exit the loop, else add point to group */
if(inpointgroup(0,"rmve_grp",i@nearptnum)==0){
setpointgroup(geoself(),"rmve_grp",i@nearptnum,1,"set");
};
};
};
};
pcclose(handle);
This python code allows one to remove points that are too close to one another in a point cloud. The result ideally should be a well spaced point cloud. A radius is specified and each point in the point cloud is tested to see if they are in proximity of the specified radius. The ‘plucked’ points are then added to a group: ‘rmve_grp’. You typically want to run this code from a python defined SOP and append a delete SOP (deleting non-selected ‘rmve_grp’) to view the points that have been plucked, or vice – versa as the case may be.
PYTHON CODE:
node = hou.pwd()
geo = node.geometry()
#Define a group that holds all points that have been removed
rmv_grp = geo.createPointGroup("rmve_grp")
rad = 1
#Iterate through all points
for pt in geo.points():
#Continue if pt is already in removed group
if pt in rmv_grp.points():
continue
else:
#otherwise, find the points close to pt and less than specified radius
for apt in geo.points():
# Don't perform test on myself
if pt == apt:
continue
else:
# find close points to pt but less than distance threshold
ptdisp = pt.position() - apt.position() # displacement vector
ptdist = ptdisp.length()
if ptdist < rad:
rmv_grp.add(apt)
break
NB: This implementation is a bit buggy. A better implementation would be to wrap this code in a recursive function. This will be addressed in a future post.