[Py] ScriptMng - GeUserArea disappears

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

On 25/11/2011 at 09:36, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   R13 
Platform:      
Language(s) :

---------
in R13, the GeUserArea in an async dialog just disappears when you resize the dialog. Saving a reference to the dialog solves the problem.

Example code:

  
    
    
    import c4d  
    import c4d.gui     as gui  
    import c4d.bitmaps as bitmaps  
      
    SHOW_ISSUE = False  
      
    class Area(gui.GeUserArea) :  
        
      def __init__(self, w = 20, h = 20, r = 1, g = 1, b = 1) :  
          self.bmp = bitmaps.BaseBitmap()  
          self.bmp.Init(w, h)  
          self.w   = w  
          self.h   = h  
            
          self.alpha = self.bmp.AddChannel(True, False)  
            
          r = int(r * 255)  
          g = int(g * 255)  
          b = int(b * 255)  
      
          for x in xrange(w) :  
              for y in xrange(h) :  
                  a = x*y / float(w*h)  
                  a = 1 - 2**a  
                  a = int(a * 255)  
                  self.bmp[x, y] = r, g, b  
                  self.bmp.SetAlphaPixel(self.alpha, x, y, a)  
                    
      def DrawMsg(self, x1, y1, x2, y2, msg) :  
          self.DrawSetPen(c4d.Vector(0, 0, 0))  
          self.DrawRectangle(x1, y1, x2, y2)  
            
          if SHOW_ISSUE:  
              self.DrawSetPen(c4d.Vector(.2, .6, .9))  
            
          w, h = self.w, self.h  
          self.DrawBitmap(self.bmp,  
              0, 0, w, h, 0, 0, w, h, c4d.BMP_NORMAL | c4d.BMP_ALLOWALPHA)  
                
      def GetMinSize(self) :  
          return self.w, self.h  
            
    class Dialog(gui.GeDialog) :  
        
      def __init__(self, area) :  
          self.area = area  
        
      def CreateLayout(self) :  
          self.AddUserArea(1000, c4d.BFH_SCALEFIT | c4d.BFV_SCALEFIT)  
          self.AttachUserArea(self.area, 1000)  
          return True  
        
    def main() :  
      area = Area(100, 100, 1.0, 0.66, 0.24)  
      dlg  = Dialog(area)  
      
      if c4d.GetC4DVersion() < 13000:  
            # async in script manager and r12 does not work  
            # open it modal  
          dlg.Open(c4d.DLG_TYPE_MODAL_RESIZEABLE)  
      else:  
          dlg.Open(c4d.DLG_TYPE_ASYNC)  
            # uncomment the following and it works  
            # main.dlg = dlg  
        
    if __name__ == "__main__":  
      main()

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

On 24/02/2012 at 06:38, xxxxxxxx wrote:

DLG_TYPE_ASYNC should only be used in Plugin environments. Cheers, Sebastian

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

On 30/06/2012 at 09:58, xxxxxxxx wrote:

Can I use it with other plug-ins?

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

On 01/07/2012 at 05:04, xxxxxxxx wrote:

You can use asynchronous dialogs whenever you want, just not in scripts.
Scripts only live while they're being executed, so asynchronous dialogs can't work.