Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware 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

    Clicking Group Children Causes Bitmap to Redraw Incorrectly

    Cinema 4D SDK
    python
    2
    3
    619
    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.
    • ?
      A Former User
      last edited by A Former User

      Hello,
      I have a bitmap in a main GeDialog group. When I click on either the child of another group within the main group or the bitmap itself, the bitmap redraws several times vertically incorrectly. It can be reset by resizing the window. You can see a quick screencast of the faulty behavior here. Can someone please help me fix this? Thank you very much!

      Before.jpg
      Error.jpg

      Here is the random image, "random_img.jpg", that I used: random_img.jpg
      This script looks for it on the Desktop.

      import  c4d,os
      from c4d import gui, plugins, bitmaps
      
      class BitmapUserArea(c4d.gui.GeUserArea) :
          def __init__(self,x,y,imageName) :
              self.x = x
              self.y = y
              fn = c4d.storage.GeGetC4DPath(c4d.C4D_PATH_DESKTOP)
              image = "random_img.jpg"
              path = os.path.join(fn,image)
              self.bmp = c4d.bitmaps.BaseBitmap()
              if self.bmp.InitWith(path)[0] != c4d.IMAGERESULT_OK:
                  c4d.gui.MessageDialog("Cannot load image "" + path + "".")
                  return
      
          def DrawMsg(self, x1, y1, x2, y2, msg) :
              self.OffScreenOn()
              self.DrawSetPen(c4d.COLOR_BG)
              self.DrawRectangle(x1, y1, x2, y2)
              self.SetClippingRegion(x1, y1, x2, y2)
              self.width, self.height = self.bmp.GetSize()
              self.DrawBitmap(self.bmp, x1 + self.x, y1 + self.y, self.width,
                              self.height, 0, 0, self.width, self.height,
                              c4d.BMP_NORMAL | c4d.BMP_ALLOWALPHA)
      
          def GetMinSize(self):
              self.width, self.height = self.bmp.GetSize()
              return self.width, self.height
      
      class MyDialog(c4d.gui.GeDialog) :
          ID_MAIN_GRP = 20000
          ID_BMP_USERAREA = 20002
          ID_TXT1 = 20004
          ID_TXT2 = 20006
      
          def __init__(self):
              self.randomImage = BitmapUserArea(0, 0, "random_img.jpg")
      
          def CreateLayout(self) : 
              self.SetTitle("MyDialog")
              if self.GroupBegin(self.ID_MAIN_GRP, c4d.BFH_SCALEFIT | c4d.BFV_TOP, cols=3,
                                  rows=1, title=""):
                  self.GroupBorderSpace(5, 5, 5, 5)
                  self.GroupBorderNoTitle(c4d.BORDER_BLACK)
                  self.AddUserArea(self.ID_BMP_USERAREA, c4d.BFH_CENTER | c4d.BFH_SCALE | c4d.BFV_CENTER |c4d.BFV_SCALE, initw=142, inith=52)
                  self.AttachUserArea(self.randomImage, self.ID_BMP_USERAREA)
                  self.AddStaticText(self.ID_TXT1, c4d.BFH_CENTER | c4d.BFH_SCALE | c4d.BFV_CENTER |c4d.BFV_SCALE, 0, 0, "TEXT 1", borderstyle=c4d.BORDER_BLACK)
                  self.AddStaticText(self.ID_TXT2, c4d.BFH_CENTER | c4d.BFH_SCALE | c4d.BFV_CENTER |c4d.BFV_SCALE, 0, 0, "TEXT 2", borderstyle=c4d.BORDER_BLACK)
              return True
      
      def main() :
          global dialog
          dialog = MyDialog()
          dialog.Open(dlgtype=c4d.DLG_TYPE_ASYNC, xpos=-2, ypos=-2, defaultw=350, defaulth=500)
      
      if __name__=='__main__':
          main()
      
      1 Reply Last reply Reply Quote 0
      • M
        m_adam
        last edited by m_adam

        Hi @blastframe, Thanks for reporting the issue.
        Actually it's very similar to R21 GeUserArea in docked GeDialog behaves differently but as stated to the other topic, I don't have any news on that, I will bump development team again.

        So not the safest but as a workaround ignore the x,y, x2, y2 passed and draw with the data you defined in GetMinSize.
        Of course, this has the limitation that scroll groups are not anymore supported, but its the only workaround I see for the moment.

        Cheers,
        Maxime.

        MAXON SDK Specialist

        Development Blog, MAXON Registered Developer

        ? 1 Reply Last reply Reply Quote 0
        • ?
          A Former User @m_adam
          last edited by

          @m_adam Thanks, Maxime, for the temporary workaround and for bumping it to the development team. I hope this is fixed soon!

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