Preparetion
To begin, I made a simple box object with a Voronoi fracture.
The geometry spreadsheet looks like below.
As you can see, there are 2 groups that are "group:inside" and "group:outside".
The primitive whose group:outside is 1 is the one that is on the object's surface.
For Each SOP
Then, I added a For Each SOP node after added a Connectivity SOP node.
Attribute Wrangle 1
In attribwrangle1, I set Run Over "Primitives" and wrote a expression below;
i@grp = @group_outside;
The expression copies Group attribute and paste them into a newly created attribute "grp".
Python
Because I couldn't figure out how to do in VEX, I decided to do in python instead.
The expression is below;
node = hou.pwd()
geo = node.geometry()lis = list(geo.primIntAttribValues("grp"));
yes = any(lis)
if yes:
geo.addAttrib(hou.attribType.Prim,"del",1)
else:
geo.addAttrib(hou.attribType.Prim,"del",0)
lis = list(geo.primIntAttribValues("grp"));
This returns all the values from "grp" attribute as a list like below;
[1,1,1,0,0,0,1,0,0]
yes = any(lis)
"any()" function returns True if there is a value 1 in the list.
If there is not the value 1 at all, then returns False.
if yes:
geo.addAttrib(hou.attribType.Prim,"del",1)
else:
geo.addAttrib(hou.attribType.Prim,"del",0)
If "yes" is True that means there is a value of 1 in the list, then add a value 1 in newly created attribute called "del".
If "yes" is False, then add 0.
So, geometry spreadsheet is below. As you can see, "del" is 1 because there is a value of 1 in "grp" at primitive number 9.
Attribute Wrangle 2
In this node, remove all the primitives whose "del" attribute is 1.
Expression is below;
Result
So, the result is below;
Successfully, all the pieces that have primitives on the surface of the box object.