CommandData and Gedialog

On 08/12/2015 at 18:54, xxxxxxxx wrote:

Hello guys,

just a stupid but id-like-to-know question. I have a CommandData with GeDialog for user input. Usually I do stuff in GeDialog->Command->if id == BUTTON_OK. But Im not sure if it is the recommended way. So, where do I have to do stuff?

class MyDialog(gui.GeDialog) :  
  refs = None  
  def CreateLayout(self) :  
      self.GroupBegin(10001, c4d.BFH_LEFT, 1, 1)  
      self.AddEditNumberArrows(10004, c4d.BFH_LEFT, initw=150, inith=0)  
      self.AddButton(10002, c4d.BFH_LEFT, name='OK')  
      self.AddButton(10003, c4d.BFH_LEFT, name='Cancel')  
      return True  
  def InitValues(self) :  
      return True  
  def Command(self, id, msg) :  
      if id==10003: self.Close()  
      elif id==10002: pass  
      return True  
class CommandTest(plugins.CommandData) :  
  dialog = None  
  def Execute(self, doc) :  
      if self.dialog is None: self.dialog = MyDialog()  
      return self.dialog.Open(dlgtype=c4d.DLG_TYPE_ASYNC, pluginid=PLUGIN_ID, defaultw=300, defaulth=0)  
  def RestoreLayout(self, sec_ref) :  
      if self.dialog is None: self.dialog = MyDialog()  
      return self.dialog.Restore(pluginid=PLUGIN_ID, secret=sec_ref)  
if __name__ == "__main__":  
   bmp = bitmaps.BaseBitmap()  
   dir, f = os.path.split(__file__)  
   fn = os.path.join(dir, "", "icon.tif")  

Thx and greetings

On 09/12/2015 at 01:26, xxxxxxxx wrote:


depending on the stuff it is perfectly fine to do stuff in GeDialog.Command(). See for example the RSS reader plugin. If you just want to add a "OK" and "Cancel" button you could simply add a dialog group with AddDlgGroup().

Best wishes,

On 09/12/2015 at 05:22, xxxxxxxx wrote:

Hello Sebastian,

sorry, my misstake. Of course, it depends on the stuff. In case of Py-MemoryViewer it makes totally sense not to lieve gui.GeUserArea to do the stuff. But Id like to change objects in the active scene after calling button. Relating to this I like the following structur of a script with GeDialog.

import c4d  
from c4d import gui  
#Welcome to the world of Python  
class OptionsDialog(gui.GeDialog) :  
  def CreateLayout(self) :  
      self.GroupBegin(1000, c4d.BFH_LEFT, 2, 1)  
      self.AddButton(1001, c4d.BFH_SCALE, name='OK')  
      self.AddButton(1002, c4d.BFH_SCALE, name='Cancel')  
      self.ok = False  
      return True  
  def InitValues(self) :  
      return True  
  def Command(self, id, msg) :  
      if id==1002:  
      elif id==1001:  
          self.ok = True  
          self.variable = "Hallo World!"  
      return True  
def main() :  
  dlg = OptionsDialog()  
  dlg.Open(c4d.DLG_TYPE_MODAL, defaultw=100, defaulth=50)  
  if not dlg.ok: return  
  print dlg.variable  
if __name__=='__main__':  

In this structur GeDialog is just responsible for getting user input and passing to main(). In my case I also would like to use the MessageMethod of the CommandData, but Im really not sure where to put in the stuff.

Thx alot and greetings

On 10/12/2015 at 00:45, xxxxxxxx wrote:


I'm not quite sure what your question is. In your first example you use a CommandData plugin, in your second example a Script Manager script. How are these examples related to each other and your question? Why would you like to use the CommandData.Message function? Maybe it would be useful to stop talking about "stuff" and to tell us what you really want to do 😉

best wishes,