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,

Log in to reply