I have a large number of metaballs which each one of them having its own group.
Now I want to use the MetaGroups SOP and automatically populate it with all the groups, one entry per group. Is that possible?
Automatically create list of groups in MetaGroups
3695 2 0- Soothsayer
- Member
- 874 posts
- Joined: Oct. 2008
- Offline
- pclaes
- Member
- 257 posts
- Joined: Nov. 2007
- Offline
yes, you can do that.
if you look at what the metagroups actually does:
It creates a detail attribute called:
metaExpression
with a value like:
max(sum(“grp_01”),sum(“grp_02”))
(you can do exactly the same by adding a string details attribute with that max(sum….) string in it as it's string value).
So this has now become an exercise in string concatenation.
with the primgroupmask() expression you get your grouplist:
“grp_01 grp_02”
with the arg(list,argnum) you tokenize the list.
with argc(list) you count the total number of elements (so you can use this as the final number in the foreach - making sure the foreach starts at 0)
with an attribcreate you generate the start of the string and update it inside the foreach.
attribcreate -> final_expr (string)
stringvalue: max(
inside the foreach:
attribcreate -> final_expr (string)
stringvalue:
`$FINAL_EXPR`sum(“`arg(primgroupmask(”../../START“,”grp_*“),stamp(”..“, chs(”../forstamp“), 0) )`”)
with a switch statement that specifies to add a comma or not:
switch expression:
stamp(“..”, chs(“../forstamp”), 0) != ch(“../numrange2”)
attribcreate -> final_expr (string)
stringvalue:
`$FINAL_EXPR`,
This really is more of a python expression kind of thing as it deals with strings better. But you can do it with a foreach as well.
if you look at what the metagroups actually does:
It creates a detail attribute called:
metaExpression
with a value like:
max(sum(“grp_01”),sum(“grp_02”))
(you can do exactly the same by adding a string details attribute with that max(sum….) string in it as it's string value).
So this has now become an exercise in string concatenation.
with the primgroupmask() expression you get your grouplist:
“grp_01 grp_02”
with the arg(list,argnum) you tokenize the list.
with argc(list) you count the total number of elements (so you can use this as the final number in the foreach - making sure the foreach starts at 0)
with an attribcreate you generate the start of the string and update it inside the foreach.
attribcreate -> final_expr (string)
stringvalue: max(
inside the foreach:
attribcreate -> final_expr (string)
stringvalue:
`$FINAL_EXPR`sum(“`arg(primgroupmask(”../../START“,”grp_*“),stamp(”..“, chs(”../forstamp“), 0) )`”)
with a switch statement that specifies to add a comma or not:
switch expression:
stamp(“..”, chs(“../forstamp”), 0) != ch(“../numrange2”)
attribcreate -> final_expr (string)
stringvalue:
`$FINAL_EXPR`,
This really is more of a python expression kind of thing as it deals with strings better. But you can do it with a foreach as well.
Cg Supervisor | Effects Supervisor | Expert Technical Artist at Infinity Ward
https://www.linkedin.com/in/peter-claes-10a4854/ [www.linkedin.com]
https://www.linkedin.com/in/peter-claes-10a4854/ [www.linkedin.com]
- Druidl
- Member
- 4 posts
- Joined: Nov. 2012
- Offline
-
- Quick Links