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

    Unexpected Margin/Padding on AddCustomGui

    Cinema 4D SDK
    r21 python
    2
    12
    1.3k
    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.
    • M
      m_adam
      last edited by

      Hi @bentraje

      CustomBitmapButton take by default the size of the icon and ignore the passed width/height. If you want to force the CustomBitmapButton you have to use BITMAPBUTTON_FORCE_SIZE with an Int32 value that represents the size of the icon.

      Since it "ignore" the passed width/height you may also consider to use something else than BFH_FIT in a BFH_SCALEFIT group.

      Cheers,
      Maxime.

      MAXON SDK Specialist

      Development Blog, MAXON Registered Developer

      1 Reply Last reply Reply Quote 1
      • B
        bentraje
        last edited by

        @m_adam

        Thanks for the response.

        I added a line with
        bcBitmapButton[c4d.BITMAPBUTTON_FORCE_SIZE] = 100.00
        and revised a line to
        bitmapButton = self.AddCustomGui(buttonId, c4d.CUSTOMGUI_BITMAPBUTTON, "", c4d.BFV_CENTER | c4d.BFV_CENTER , w, h,

        However, it still gives an unwanted margin/padding but this time at the bottom.
        You can see the problem here:
        https://www.dropbox.com/s/i6eb8ccszzc35ov/c4d191_unexpected_margin_on_custom_gui_button_02.jpg?dl=0

        1 Reply Last reply Reply Quote 0
        • M
          m_adam
          last edited by

          Hi @bentraje

          Could you try to use

                  w = c4d.gui.SizePix(100)
                  h = c4d.gui.SizePix(100)
          

          For more information see GUI Layout Issues.

          If not could you try to zip bmp + a complete working script?

          Thanks in advance,
          Cheers,
          Maxime.

          MAXON SDK Specialist

          Development Blog, MAXON Registered Developer

          1 Reply Last reply Reply Quote 1
          • B
            bentraje
            last edited by

            Thanks for the response.
            Almost close now. is there a way to totally remove the border space within the custom gui buttons?

            You can check it here:
            https://www.dropbox.com/s/vs31t2flu51gnej/c4d191_unexpected_margin_on_custom_gui_button_03.jpg?dl=0

            I tried the self.GroupSpace(0, 0) but it has no effect.
            I also tried self.GroupBorderSpace(0, 0, 0, 0) but the whole button disappeared.

            Are there any other settings for spaces?

            1 Reply Last reply Reply Quote 0
            • M
              m_adam
              last edited by m_adam

              Here is working correctly, please share your code.

                  def CreateLayout(self):
                      self.GroupBegin(10002, c4d.BFH_SCALE| c4d.BFV_SCALE,  initw=50, inith=50)
                      
                      bcBitmapButton = c4d.BaseContainer()
                      bcBitmapButton[c4d.BITMAPBUTTON_BUTTON] = True
                      bcBitmapButton[c4d.BITMAPBUTTON_ICONID1] = c4d.Ocube
                      bcBitmapButton[c4d.BITMAPBUTTON_BORDER] = c4d.BORDER_IN
              
                      buttonId = 2000
                      w = c4d.gui.SizePix(100)
                      h = c4d.gui.SizePix(100)
              
                      self.GroupBegin(id=9001, flags=c4d.BFH_SCALEFIT, groupflags = c4d.BFV_GRIDGROUP_EQUALCOLS | c4d.BFV_GRIDGROUP_EQUALROWS, cols=4, rows=4,initw=0, inith=0)
                      self.GroupSpace(0, 0)
                      for imageId in xrange(10):
                          bitmapButton = self.AddCustomGui(imageId, c4d.CUSTOMGUI_BITMAPBUTTON, "", c4d.BFH_FIT|c4d.BFV_TOP, w, h, bcBitmapButton)
              
                      self.GroupEnd()
                      
                      
                      self.GroupEnd()
                      return True
              

              Cheers,
              Maxime.

              MAXON SDK Specialist

              Development Blog, MAXON Registered Developer

              1 Reply Last reply Reply Quote 1
              • B
                bentraje
                last edited by

                @m_adam

                There's actually still space between buttons on your code.
                Anyhow here is my working code for your reference. It's in archive file since it includes the images
                https://www.dropbox.com/s/leb10klpvm4o8ps/c4d191_unexpected_margin_on_custom_gui_button.rar?dl=0

                1 Reply Last reply Reply Quote 0
                • M
                  m_adam
                  last edited by m_adam

                  Hi @bentraje
                  thanks for the archive.

                  Here my code in R21.115
                  spacing_perso.jpg

                  In your code you call self.GroupSpace(0, 0) before the GroupBegin it has to be called just after the creation.

                          self.GroupBegin(id=9001, flags=c4d.BFH_SCALEFIT, groupflags = c4d.BFV_GRIDGROUP_EQUALCOLS | c4d.BFV_GRIDGROUP_EQUALROWS, cols=4, rows=4,initw=0, inith=0)
                          self.GroupSpace(0, 0)
                  

                  Which give me the next result
                  spacing_bentraje.jpg

                  Cheers,
                  Maxime.

                  MAXON SDK Specialist

                  Development Blog, MAXON Registered Developer

                  1 Reply Last reply Reply Quote 1
                  • B
                    bentraje
                    last edited by

                    Oh I see. Thanks for pointing that out.

                    Thanks!

                    1 Reply Last reply Reply Quote 0
                    • B
                      bentraje
                      last edited by

                      @m_adam

                      Sorry for reviving the thread but I just hit a snag on using the same code but for colored buttons. It doesn't respect the settings and gives an unnecessary margin even though I used the c4d.gui.SizePix() code.

                      You can see the problem here:
                      https://www.dropbox.com/s/17yqc1i0puoau77/c4d191_unexpected_margin_on_custom_gui_button_04.jpg?dl=0

                      You can see the working code here:

                      import c4d
                      from c4d import bitmaps, documents, gui, plugins, threading, utils
                      
                      class ColorButton(object):
                      
                          def __init__(self):
                              self.width = None
                              self.height = None
                              self.color = None
                              self.btn_id = 3000
                      
                      
                          def create(self, dlg, w, h, color, btn_id):
                      
                              self.width = c4d.gui.SizePix(w)
                              self.height = c4d.gui.SizePix(h)
                              self.color = color
                      
                              bmp_color = c4d.bitmaps.BaseBitmap()
                              bmp_color.Init(w, h)
                      
                              for y in xrange(w):
                                  for x in xrange(h):
                                      bmp_color.SetPixel(x, y, color[0], color[1], color[2])
                      
                              bcBitmapButton = c4d.BaseContainer()
                              bcBitmapButton[c4d.BITMAPBUTTON_BUTTON] = True
                              bcBitmapButton[c4d.BITMAPBUTTON_BORDER] = c4d.BORDER_IN
                              
                      
                      
                              bmp_btn = dlg.AddCustomGui(btn_id, c4d.CUSTOMGUI_BITMAPBUTTON, "",c4d.BFH_FIT|c4d.BFV_TOP, w, h, bcBitmapButton)
                      
                              bmp_btn.SetImage(bmp_color, True)
                              
                      class MyDialog(c4d.gui.GeDialog):
                      
                          def CreateLayout(self):
                              self.GroupBegin(10002, c4d.BFH_SCALE| c4d.BFV_SCALE,  initw=50, inith=50)
                              
                              bcBitmapButton = c4d.BaseContainer()
                              bcBitmapButton[c4d.BITMAPBUTTON_BUTTON] = True
                              bcBitmapButton[c4d.BITMAPBUTTON_ICONID1] = c4d.Ocube
                              bcBitmapButton[c4d.BITMAPBUTTON_BORDER] = c4d.BORDER_IN
                      
                              buttonId = 2000
                              w = c4d.gui.SizePix(100)
                              h = c4d.gui.SizePix(100)
                      
                              self.GroupBegin(id=9001, flags=c4d.BFH_SCALEFIT, groupflags = c4d.BFV_GRIDGROUP_EQUALCOLS | c4d.BFV_GRIDGROUP_EQUALROWS, cols=4, rows=4,initw=0, inith=0)
                      
                              self.GroupSpace(0, 0)
                              for imageId in xrange(10):
                                  bitmapButton = self.AddCustomGui(imageId, c4d.CUSTOMGUI_BITMAPBUTTON, "", c4d.BFH_FIT|c4d.BFV_TOP, w, h, bcBitmapButton)
                              # Red Button Through Class
                              red_button = ColorButton()
                              red_button.create(self, w=100,h=100,color=(255,0,0), btn_id=6000)
                      
                              self.GroupEnd()
                              
                              
                              self.GroupEnd()
                              return True
                          
                      if __name__ == "__main__":
                          dlg = MyDialog()
                          dlg.Open(dlgtype=c4d.DLG_TYPE_ASYNC)
                      
                      M 1 Reply Last reply Reply Quote 0
                      • M
                        m_adam @bentraje
                        last edited by m_adam

                        @bentraje said in Unexpected Margin/Padding on AddCustomGui:

                        Sorry for reviving the thread but I just hit a snag on using the same code but for colored buttons. It doesn't respect the settings and gives an unnecessary margin even though I used the c4d.gui.SizePix() code.

                            def create(self, dlg, w, h, color, btn_id):
                                bmp_btn = dlg.AddCustomGui(btn_id, c4d.CUSTOMGUI_BITMAPBUTTON, "",c4d.BFH_FIT|c4d.BFV_TOP, w, h, bcBitmapButton)
                        
                                
                        class MyDialog(c4d.gui.GeDialog):
                        
                            def CreateLayout(self):
                                red_button = ColorButton()
                                red_button.create(self, w=100,h=100,color=(255,0,0), btn_id=6000)
                                return True
                        

                        You don't use c4d.gui.SizePix() in your code and that's why it fails.

                        Cheers,
                        Maxime.

                        MAXON SDK Specialist

                        Development Blog, MAXON Registered Developer

                        1 Reply Last reply Reply Quote 1
                        • B
                          bentraje
                          last edited by

                          You are right.

                          self.width = c4d.gui.SizePix(w)
                          self.height = c4d.gui.SizePix(h)
                          self.color = color
                          

                          wasn't actually used.

                          Will close this thread now and crawl to my little cave of shame. lol

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