Yet another approach for async dialogs.



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

    On 17/06/2011 at 09:42, xxxxxxxx wrote:

    And this one is a good one. ;-)
    I hate restarting cinema 4d because i want to test my async dialog but i can only open it in a command data >.>

    from    c4d.gui         import GeDialog  
    from    threading       import Thread  
      
    class DialogThread(Thread) :  
      """  
      A class to enable opening ASync Dialogs in the Skript Manager.  
      Initialise with a GeDialog subclass instance.  
      """  
      
      class ArgumentError(Exception) :  
          """ Raised when a bad argument is given. """  
      
      def __init__(self, dlg) :  
          # initialise with a GeDialog subclass instance  
          if not issubclass(dlg.__class__, GeDialog) :  
              raise self.ArgumentError, "Overloaded argument 'dlg' is not an instance of GeDialog or an instance of a subclass of GeDialog.\n" \  
                                 \+ "It is an instance of:     %s" % dlg.__class__.__name__  
      
          Thread.__init__(self)  
          self.dlg        = dlg  
      
      def run(self) :  
          # wait until the dialog is closed  
          while self.dlg.IsOpen() :  
              pass  
      
      def start(self, opentype = c4d.DLG_TYPE_ASYNC) :  
          # open the dialog and start Superclass' start().  
          self.dlg.Open(opentype)  
          Thread.start(self)  
      
    def OpenAsyncDialog(dlg) :  
      dlg_thread = DialogThread(dlg)  
      dlg_thread.start()  
      return dlg_thread
    

    Maybe at least this can be added to the Py4D Standart Library ? Would be pretty useful for skripts, hehe.

    Cheers,

    //edit:
    Hm, again some issues. 😂
    is there any way to keep the globals within a Thread ? >.>


Log in to reply