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 :
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 :
ou plus simplement si on travaille directement dans if __name__==’__main__’:, tout fonctionne également :
Et n’oubliez pas d’aller voir le complément apporté par xs_yann sur frenchcinema4d.fr