Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Recent
    • Tags
    • Users
    • Login

    CommandData and Gedialog

    Scheduled Pinned Locked Moved PYTHON Development
    4 Posts 0 Posters 372 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      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.SetTitle('Commandtest')  
            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')  
            self.GroupEnd()  
            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")  
         bmp.InitWith(fn)  
         plugins.RegisterCommandPlugin(id=PLUGIN_ID,   
                                      str="CommandTest",  
                                      info=0,  
                                      help="CommandTest",   
                                      dat=CommandTest(),  
                                      icon=bmp)
      

      Thx and greetings
      rownn

      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

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

        Hello,

        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,
        Sebastian

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          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.GroupEnd()  
                self.ok = False  
                return True  
            
            def InitValues(self) :  
                return True  
             
            def Command(self, id, msg) :  
                if id==1002:  
                    self.Close()  
                elif id==1001:  
                    self.ok = True  
                    self.variable = "Hallo World!"  
                    self.Close()  
                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__':  
            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
          rownn

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

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

            Hello,

            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,
            Sebastian

            1 Reply Last reply Reply Quote 0
            • First post
              Last post