Cinema4D Non classé Python

Scripts python c4d et dialogue asynchrone

J’ai longtemps cru que les dialogues asynchrones, c’est à dire un dialogue que l’on peut « docker » et qui reste actif sans bloquer les autres fonctionnalités, étaient réservés aux plugins dans Cinema4D.

Un exemple simple :

import c4d

class MonDlg( c4d.gui.GeDialog):
    
    def CreateLayout(self):
        self.AddStaticText(1000, c4d.BFH_SCALE|c4d.BFV_SCALE, initw=100, inith=20,name = 'Hello world !')        
        return True

def main():
    dlg = MonDlg()
    dlg.Open(c4d.DLG_TYPE_ASYNC)

if __name__=='__main__':
    main()

Si vous lancez le script, vous aurez bien une fenêtre qui s’ouvre, mais dès que vous essayez de la redimensionner le contenu disparait !

Une histoire de portée de variable (enfin je suppose!)

Dans ce code j’ai repris comme toujours la trame proposée par défaut par Cinema4D, c’est à dire d’avoir une fonction main() dans laquelle je développe mon code. C’est très pratique pour plein de raisons que je ne vais pas développer aujourd’hui. Apparemment dans le cadre d’un dialogue asynchrone, lorsque l’on lance le code tout va bien la fonction main() est appelée, mais à la fin les variables de la fonction sont effacées et notre dlg n’existe plus ! La preuve déclarez dlg en global et là ça marche :

import c4d

class MonDlg( c4d.gui.GeDialog):
    
    def CreateLayout(self):
        self.AddStaticText(1000, c4d.BFH_SCALE|c4d.BFV_SCALE, initw=100, inith=20,name = 'Hello world !')        
        return True

def main():
    global dlg
    dlg = MonDlg()
    dlg.Open(c4d.DLG_TYPE_ASYNC)

if __name__=='__main__':
    main()

ou plus simplement si on travaille directement dans if __name__==’__main__’:, tout fonctionne également :

import c4d

class MonDlg( c4d.gui.GeDialog):
    
    def CreateLayout(self):
        self.AddStaticText(1000, c4d.BFH_SCALE|c4d.BFV_SCALE, initw=100, inith=20,name = 'Hello world !')        
        return True

if __name__=='__main__':
    dlg = MonDlg()
    dlg.Open(c4d.DLG_TYPE_ASYNC)

Et n’oubliez pas d’aller voir le complément apporté par xs_yann sur frenchcinema4d.fr

Leave a Reply