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
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Make a toggle-button with image on in GeDialog

    Scheduled Pinned Locked Moved PYTHON Development
    11 Posts 0 Posters 1.2k 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

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 02/10/2011 at 03:31, xxxxxxxx wrote:

      I cant find how I am supposed to make AddBitmapButton in Python or how to toggle a button.

      Actually I also want to add the standard toggeling buttons: Move/Scale/Rotate and so on to the GUI of my Script.
      I try to build my own toggling button and I found I can get hold of a standard icon by gui.GetIcon(c4d.RESOURCEIMAGE_MOVE) but I dont find how to apply it on buttons in CreateLayout()
      Ofc I can use simple labels on my buttons but I still dont find how to make a button that is Toggle-able. I try to use BaseSelect.Toggle() for that but first I need to find the object associated with the id of my button?

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

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 05/10/2011 at 13:26, xxxxxxxx wrote:

        I'm not sure if you can do this in R12. Because SetImage() was not supported yet.
        But it does work in R13.

        Here's a complete dialog plugin example:

        import c4d, os, sys  
        from c4d import plugins, utils, bitmaps, gui, documents  
          
        Plugin_ID=1000009 # Testing id ONLY!!!!!!!   
          
        #enums  
        myBitButton = 100010  
           
          
        class MyDialog_Gui(gui.GeDialog) :  
           
         def CreateLayout(self) :  
          
          bc = c4d.BaseContainer() #Create a new container to store the image we will load for the button later on    
          
          self.GroupBegin(0, c4d.BFH_SCALEFIT|c4d.BFH_SCALEFIT, 1, 1, "Bitmap Example",0) #id, flags, columns, rows, grouptext, groupflags  
          self.GroupBorder(c4d.BORDER_BLACK)  
          bc.SetLong(c4d.BITMAPBUTTON_BORDER, c4d.BORDER_OUT) #Sets the border to look like a button  
          bc.SetBool(c4d.BITMAPBUTTON_BUTTON, True)        
          fn = c4d.storage.GeGetC4DPath(c4d.C4D_PATH_DESKTOP) #Gets the desktop path  
          path = os.path.join(fn,'image1.jpg')                #The path to the image file    
          bc.SetFilename(100010, path)                        #Fill the empty container with the id#, and the image's location(string value)  
          
         #Lets check our container to see if the image's ID# and location are now stored in it properly   
          image = bc.GetData(100010)  
          print image  
          for i in bc:  
            print i   
              
          self.myBitButton=self.AddCustomGui(100010, c4d.CUSTOMGUI_BITMAPBUTTON, "Bitmap Button", c4d.BFH_SCALEFIT | c4d.BFV_SCALEFIT, 30, 30, bc)  
          self.myBitButton.SetImage(path, False)    
          self.LayoutChanged(10042) #Updates the custom gizmo changes made to the GUI      
          
          self.GroupEnd()    
          
          return True   
          
          
           
         def InitValues(self) :  
        self.SetString(4002,"Waiting") #Sets the text inside of the field when the plugin opens  
        self.SetString(4003,"Waiting") #Sets the text inside of the field when the plugin opens  
        self.SetReal(1002, 0, 0,100,1) #Sets the slider's value to 0... With a range of 0-100... Step=1  
        return True  
          
            
         def Command(self, id, msg) :  
          
        doc = documents.GetActiveDocument()   
            
        if id == 100010:   
            print"Bitmap Button was Pushed"                  
            self.myBitButton.SetToggleState(True)  
            fn2 = c4d.storage.GeGetC4DPath(c4d.C4D_PATH_DESKTOP) #Gets the desktop path  
            path = os.path.join(fn2,'image2.jpg')                #The path to the image file        
            self.myBitButton.SetImage(fn2, False)                #This does not work like in C++ !!!  
            self.LayoutChanged(10042)                            #Updates the custom gizmo changes made to the GUI         
            c4d.EventAdd()       
          
          
        return True  
            
            
            
        #---------------------------------------------------------------  
        #   MyDialog_Main --- Where the plugin stuff happens--Don't edit  
        #---------------------------------------------------------------  
        class myDialog_Main(plugins.CommandData) :  
         dialog = None  
            
         def Execute(self, doc) :  
          # create the dialog  
          if self.dialog is None:  
             self.dialog = MyDialog_Gui()  
          return self.dialog.Open(dlgtype=c4d.DLG_TYPE_ASYNC, pluginid=Plugin_ID, defaultw=200, defaulth=150, xpos=-1, ypos=-1)  
                
         def RestoreLayout(self, sec_ref) :  
          # manage nonmodal dialog  
          if self.dialog is None:  
             self.dialog = MyDialog_Gui()  
          return self.dialog.Restore(pluginid=Plugin_ID, secret=sec_ref)  
           
          
        if __name__ == "__main__":  
         path, fn = os.path.split(__file__)  
         bmp = bitmaps.BaseBitmap()  
         bmp.InitWith(os.path.join(path, "res/icons/", "None"))  
         plugins.RegisterCommandPlugin(Plugin_ID, "myPythonDialog",0,None,"", myDialog_Main())
        

        Make sure you change the image references to image files you have on your desktop.
        Or change the paths to where you want them to look for the button images.

        As you can see. One thing I'm having trouble with is swapping  the button's image when it's clicked.
        This works perfectly in C++. But I can't get it to work with Python in R13.

        -ScottA

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

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 09/10/2011 at 07:42, xxxxxxxx wrote:

          I really don't understand why you always create ids but not use them..
          Unfortunately this code does not work does only work in R13. Why not use a GeUserArea ? There it is also easy to swap the images.

          See this example code.

          Cheers,

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

            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

            On 09/10/2011 at 08:47, xxxxxxxx wrote:

            Originally posted by xxxxxxxx

            Unfortunately this code does not work in R13.

            Other than the image swapping part. It works just fine for me.

            -ScottA

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

              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

              On 09/10/2011 at 08:59, xxxxxxxx wrote:

              Oh 😂
              I meant R12, sorry 😉

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

                THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                On 09/10/2011 at 09:13, xxxxxxxx wrote:

                You had me worried there for moment.🙂

                I was thinking about posting a UA example too. But the guy was asking for help with SetImage() & GetIcon() functions. So I didn't think he wanted to use a UA.

                I'd still like to know why my images don't swap using those functions like it does in C++.

                -ScottA

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

                  THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                  On 28/10/2011 at 07:15, xxxxxxxx wrote:

                  ScottA: hum... SetToggleState([True/False]) dont give me any visual feedback at all it looks like the button is stuck even if the event is triggered. In the new R13 documentation there is now a mentioning of BITMAPBUTTON_ICONID1 and BITMAPBUTTON_ICONID2 but I don't get my head around how they should be used or if they would help in your example.
                  Nux95: even if GeUserArea is not a button and it is a lot of extra code to setup... but it does work!
                  Tnx!

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

                    THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                    On 28/10/2011 at 09:19, xxxxxxxx wrote:

                    It's hard to say for sure because the documentation is so limited on this subject.
                    But it looks like a bug.

                    The reason I say it's a bug is twofold:
                    1- It works properly in C++
                    2- self.myBitButton.SetToggleState(False) & self.myBitButton.SetToggleState(True) both return: None

                    -ScottA

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

                      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                      On 28/02/2012 at 08:36, xxxxxxxx wrote:

                      Hi every 1 just jioned here yesterday and just started python copied and pasted the code you put up Scotta but im getting this error code can you give me any tips why the error is on this line of code
                       
                      path, fn = os.path.split(__file__)
                       
                      it says
                       
                      NameError:name'_file_'is not defined
                       
                      cheers.
                       
                      Ray.

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

                        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                        On 28/02/2012 at 08:37, xxxxxxxx wrote:

                        The code is not for the script-manager, put it into a *.pyp file and save it in Cinema 4D's plugin-folder.

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

                          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                          On 28/02/2012 at 08:40, xxxxxxxx wrote:

                          Cheers bud much great help.
                           Ray.

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