Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
On 08/07/2015 at 08:45, xxxxxxxx wrote:
Hi, I am trying to create a script that will reset all the userdata under a userdata group back to their defaults. I am a Python beginner. Any suggestions as to how I would go about this? Any help would be greatly appreciated. Thanks.
On 08/07/2015 at 09:23, xxxxxxxx wrote:
So far I have this:
import c4d for id, bc in op.GetUserDataContainer() : try: op[id] = bc[c4d.DESC_DEFAULT] except TypeError: #No or invalid default value. pass
c4d.EventAdd()
But this resets all the userdata and I want to reset only the userdata within a specific userdata group.
On 09/07/2015 at 02:10, xxxxxxxx wrote:
Any help on this would be really appreciated. Thanks.
On 09/07/2015 at 02:17, xxxxxxxx wrote:
Hello,
if you just want to reset the userdata of a specific userdata group you have to check if a given userdata parameter is part of that group. You can access DESC_PARENTGROUP to get the ID of the parent group. So your code could look something like this:
for id, bc in op.GetUserDataContainer() : if bc[c4d.DESC_PARENTGROUP][-1].id == 2: op[id] = bc[c4d.DESC_DEFAULT]
Best wishes, Sebastian
On 09/07/2015 at 03:33, xxxxxxxx wrote:
I get an error message:
Traceback (most recent call last) : File "scriptmanager", line 11 in ,module. TypeError:_setitem_expected int or bool, not None
On 09/07/2015 at 06:00, xxxxxxxx wrote:
Originally posted by xxxxxxxx I get an error message: Traceback (most recent call last) : File "scriptmanager", line 11 in ,module. TypeError:_setitem_expected int or bool, not None
Originally posted by xxxxxxxx
Hi I test code and simple print to dive in to level
for id, bc in op.GetUserDataContainer() : print bc[c4d.DESC_PARENTGROUP][-1].id if bc[c4d.DESC_PARENTGROUP][-1].id == 700: op[id] = bc[c4d.DESC_DEFAULT]
i have id in level = 700.
Try such, code works for me
On 09/07/2015 at 06:18, xxxxxxxx wrote:
I tried your code and still get the same error message.
On 09/07/2015 at 06:22, xxxxxxxx wrote:
If I try this code from the Script Manager, it works and only userdata from group 255 is reset but when it is on a Python tag, it doesn't. Any suggestions?
import c4d
for id, bc in op.GetUserDataContainer() : if bc[c4d.DESC_PARENTGROUP][-1].id == 255: try: op[id] = bc[c4d.DESC_DEFAULT] except TypeError: #No or invalid default value. pass
On 09/07/2015 at 08:02, xxxxxxxx wrote:
For a Python Tag, "op" is the Tag, not the Object. Use the variable "obj" in all places instead of "op" and add "obj = op.GetObject()" beforehand.
On 09/07/2015 at 10:57, xxxxxxxx wrote:
Thanks, Niklas, that totally worked! The last thing I need and can't get to work is the switch. Here is what I have:
obj = op.GetObject() ID_RESET_Iceland = 39 def main() : for id, bc in obj.GetUserDataContainer() : if bc[c4d.DESC_PARENTGROUP][-1].id == 255: if obj[c4d.ID_USERDATA, ID_RESET_Iceland]: obj[c4d.ID_USERDATA, ID_RESET_Iceland] = False try: obj[id] = bc[c4d.DESC_DEFAULT] except TypeError: #No or invalid default value. pass c4d.EventAdd()
if __name__=='__main__': main()
On 09/07/2015 at 11:44, xxxxxxxx wrote:
I now have this but it still doesn't work.
obj = op.GetObject() ID_RESET_Iceland = 39 def main() : for id, bc in obj.GetUserDataContainer() : if (bc[c4d.DESC_PARENTGROUP][-1].id == 255 and obj[c4d.ID_USERDATA, ID_RESET_Iceland] == False) : try: obj[id] = bc[c4d.DESC_DEFAULT] except TypeError: #No or invalid default value. pass c4d.EventAdd()
On 09/07/2015 at 17:10, xxxxxxxx wrote:
Try this instead
import c4d ID_RESET_Iceland = 39 def main() : obj = op.GetObject() if not obj[c4d.ID_USERDATA, ID_RESET_Iceland]: return obj[c4d.ID_USERDATA, ID_RESET_Iceland] = False for id, bc in obj.GetUserDataContainer() : if bc[c4d.DESC_PARENTGROUP][-1].id == 255: try: obj[id] = bc[c4d.DESC_DEFAULT] except TypeError: pass c4d.EventAdd()
Don't use that __name__ == "__main__" part in a Python Tag
On 09/07/2015 at 19:59, xxxxxxxx wrote:
It works! You are a genius! Thanks very much for this Niklas.
On 09/07/2015 at 20:19, xxxxxxxx wrote:
One problem, the script keeps looping after I activate the reset button. Is there a way to stop it?
On 09/07/2015 at 20:23, xxxxxxxx wrote:
Figured that out. Moved c4d.EventAdd() out of the for loop. But now it resets regardless of whether or not the reset switch is activated.
import c4d ID_RESET_Iceland = 39 def main() : obj = op.GetObject() if not obj[c4d.ID_USERDATA, ID_RESET_Iceland]: return obj[c4d.ID_USERDATA, ID_RESET_Iceland] = False
for id, bc in obj.GetUserDataContainer() : if bc[c4d.DESC_PARENTGROUP][-1].id == 255: try: obj[id] = bc[c4d.DESC_DEFAULT] except TypeError: pass c4d.EventAdd()
On 10/07/2015 at 15:48, xxxxxxxx wrote:
Got it working! I had the wrong userdata id number.
def main() : ID_RESET_Iceland = 121 obj = doc.SearchObject("DEEP FREEZE") #obj = op.GetObject() if obj[c4d.ID_USERDATA, ID_RESET_Iceland]: obj[c4d.ID_USERDATA, ID_RESET_Iceland] = False
for id, bc in obj.GetUserDataContainer() : if bc[c4d.DESC_PARENTGROUP][-1].id == 255: try: obj[id] = bc[c4d.DESC_DEFAULT] except TypeError: pass for id, bc in obj.GetUserDataContainer() : if bc[c4d.DESC_PARENTGROUP][-1].id == 277: try: obj[id] = bc[c4d.DESC_DEFAULT] except TypeError: pass for id, bc in obj.GetUserDataContainer() : if bc[c4d.DESC_PARENTGROUP][-1].id == 515: try: obj[id] = bc[c4d.DESC_DEFAULT] except TypeError: pass for id, bc in obj.GetUserDataContainer() : if bc[c4d.DESC_PARENTGROUP][-1].id == 516: try: obj[id] = bc[c4d.DESC_DEFAULT] except TypeError: pass c4d.EventAdd()