2016-09-17 1 views
0

J'ai un objet contrôleur que j'attache d'autres nœuds auxiliaires à des références faibles. Le script écoute les événements de transformation de ces autres nœuds, puis fait des choses ..Comment savoir quand un objet de script est supprimé?

Le problème est que lorsque je supprime l'objet contrôleur, je n'ai aucun moyen d'arrêter les écouteurs WHEN. La clause "on delete" se déclenche à chaque fois que le gc le souhaite, souvent seulement après que j'ai fermé max. L'événement nodePreDelete se déclenche au bon moment mais s'exécute dans une portée globale et je n'ai aucune idée de la façon de trouver l'instance de script dont j'ai vraiment besoin

  • "lorsque cette suppression" ne fait rien, vaut le coup je suppose Pendant ce temps, je ne peux pas avoir des scripts de transformation fonctionnant sur des objets brisés en arrière-plan pour toujours, cela semble être un concept si simple. Y a-t-il un moyen de le faire?

  • Répondre

    -1

    Vous ne devriez jamais faire la liste des objets par leur nom dans les contrôleurs de script si c'est ce que vous faites. Vous devriez créer des paramètres et ajouter des nœuds directement.

    Vous pouvez ensuite utiliser isValidNode nodeParam et vérifier s'il est valide avant d'essayer de faire quoi que ce soit avec.

    0

    --- EDIT ---- Pouvez-vous décrire plus précisément ce que vous faites, car après avoir relu cela, je ne sais pas très bien comment vous gérez vos notifications; J'ai supposé que vous utilisiez un contrôleur de script, mais il semble que vous utilisiez la construction quand ... pouvez-vous poster un extrait du bit causant des problèmes.

    --- EDIT ----

    Il y a quelques façons de le manipuler dans maxscript. Rien de ce qui est propre ...

    Une manière qui pourrait au moins vous sauver de spamming d'erreur, est d'envelopper votre code de script dans un try/catch. Votre capture devrait "zéro" le contrôleur scripté, peut-être même imprimer à l'avertissement à l'auditeur. En tant qu'informations rapides, les interfaces referenceTarget/referenceMaker semblent être spécifiquement conçues pour gérer ce genre de choses. MAxscript ne l'applique malheureusement pas, AFAIK.

    http://help.autodesk.com/view/3DSMAX/2017/ENU/?guid=__files_GUID_1395FB57_C374_4DDF_B3E1_56492DBC27A4_htm

    +0

    tout à peu près dans max est un referenceTarget et donc une referenceMaker. C'est le scenetree en max. Les notifications sont plus pour les mises à jour de l'interface utilisateur. –