Parameters for commandData Plugin
-
Hi!
Is it possible to add a commandData plugin multiple times to a menu, but label it differently and pass a parameter to Execute()? Or is the only way to do that via GetSubContainer()?
I'm thinking of something like
menu.InsData(c4d.MENURESOURCE_COMMAND, "PLUGIN_CMD_12345, menuLabel1, menuParam1) menu.InsData(c4d.MENURESOURCE_COMMAND, "PLUGIN_CMD_12345, menuLabel2, menuParam2)
to then do something like this in Execute
def Execute(self, doc, param): if param == x: doX() elif param == y: doY()
Thanks!
-
Hello,
you cannot add a new argument to the
Execute()
function.Instead, you could write a more generic CommandData plugin that stores an internal value. You could register different versions of that command using different plugin IDs and then call these different versions. Something like this:
class DynamicCommand(plugins.CommandData): # internal value _setting = 0 def __init__(self, setting): # set internal value on creation self._setting = setting def Execute(self, doc): # use internal value on execution print(self._setting) return True
Which can be registered using constructors with different arguments:
plugins.RegisterCommandPlugin(id_a, "Command A", c4d.PLUGINFLAG_HIDEPLUGINMENU, bitmaps.BaseBitmap(), "", DynamicCommand(123)) plugins.RegisterCommandPlugin(id_b, "Command B", c4d.PLUGINFLAG_HIDEPLUGINMENU, bitmaps.BaseBitmap(), "", DynamicCommand(456))
Best wishes,
Sebastian -
Hi Sebastian!
Thanks for your answer. I was looking for something a little more flexible than registering multiple plugins, but I guess GetSubContainer will have to do