REMARQUE ! Ce site utilise des cookies et autres technologies similaires.

    Si vous ne changez pas les paramètres de votre navigateur, vous êtes d'accord. En savoir plus

    J'ai compris

    Le site CGItrainer utilise la technologie basé sur les Cookies, veuillez accepter votre accords.

  • Contact
  • CGIvod
  • Connexion

×
welcome

Bienvenue sur le site de CGItrainer
[Pour une meilleure navigation nous vous conseillons de mettre à jour votre navigateur]


CGItrainer lance sa nouvelle plateforme... CGIvod
Votre avis nous interesse Merci de répondre à ce questionnaire

Chopé par le callback

  • Messages : 411
  • Karma: 19
  • Remerciements reçus 169

Sylkun a créé le sujet : Chopé par le callback

Bonjour les amis.... enfin... ceux qui restent. :dry:


Je cherche à utiliser un callback des paramètres de rendu pour actualiser la fenêtre de mon script, mais je galère un peu. Leur utilisation n'est pas très claire, et leurs erreurs encore moins.

J'avais des exceptions blabla et après avoir passé les fonctions en global, j'ai eu un crash de max en ouvrant la dialog du Render Setup. :pinch:

Normalement je n'ai pas de boucle infinie (en tous cas pas en façade) alors je comprends trop pas le crash.

V'là le schéma de mon code :
global colbac, colend, Refresh

fn colbac =( callbacks.addScript #renderParamsChanged "Refresh()" id:#refresh )
fn colend =( callbacks.removeScripts id:#refresh )

fn Refresh =( [i]quelques mises à jour de labels et variables[/i] )


Merci de m'apporter vos éclaircissements
il y a 1 an 10 mois #60940

Connexion ou Créer un compte pour participer à la conversation.

  • Messages : 445
  • Karma: 41
  • Remerciements reçus 274

Sen a répondu au sujet : Chopé par le callback

Salut ,

Sans voir le script , c'est impossible de dire ou tes callbacks font planter ....
j'ai un vieux script avec des callbacks , jette un oiel au cas ou
www.scriptspot.com/3ds-max/scripts/morpher-floater

Mais tu as raison , c'est un des points les plus chiants dans maxscript .
Quand tu utilises des global en plus , il te faudra redémarrer pour éviter certaines erreurs même si corrigées , pour pouvoir vider la mémoire .
N'hésites pas à donner des noms plus explicites et plus long à tes globals/local , pour éviter toutes interférences avec celles inclus dans le reste de max et ses extensions .

En schématisant :
- déclare ta function > fn MyCallback = (code)
- utilise ton callback > registertimecallback MyCallback
- une fois fini le travail > unregistertimecallback MyCallback

c'est le schéma basique , ensuite si tes callbacks sont attachés à un rollout et qu'ils doivent aussi rafraichir le rollout en plus de leur travail dans la scene , il faudra
ajouter des lignes de codes , tu les verras sur le script pointé en lien .

Utilises plutôt des local pour tes callback , organise bien ton code , ajoute plein de com partout ....

Par du plus simple , un seul callback qui change le radius d'une sphere par exemple en avançant le timeslider . Fais 2 boutons dans un rollout , un pour activer le callback , un autre pour le désactiver , teste le tout , et tu auras une idée de la manière dont cela fonctionne .
il y a 1 an 10 mois #60941
Les utilisateur(s) suivant ont remercié: JYA, Sylkun

Connexion ou Créer un compte pour participer à la conversation.

  • Messages : 411
  • Karma: 19
  • Remerciements reçus 169

Sylkun a répondu au sujet : Chopé par le callback

Merci Sen. Le problème du callback est en standby là car pour l'instant j'ai un p****** de bug incompréhensible d'un soit disant rollout undefined. Des fois ça fini par disparaitre, sans savoir pourquoi, puis ça revient... J'ai beau retourner le code dans tous les sens rien n'y fait.
Je me permets de t'en toucher un mot car ça fait 2j que je cherche une réponse sur le net mais que dalle. Et ça me bouffe un temps pas possible

l'erreur apparait alors que je tente juste de mettre à jour 3 labels à la con.
-- Error occurred in Refresh(); filename: C:\Users\....\usermacros\SGX-Morovash.mcr; position: 1339; line: 48
--  Frame:
--   morovashOutputRO: undefined
--   morovashRenderRO: undefined
--   called in morovashOptionsRO.open(); filename: C:\Users\....\usermacros\SGX-Morovash.mcr; position: 9781; line: 282
--  Frame:
--   alignDn: #("BottomCenter", "BottomLeft", "BottomRight", "MiddleCenter", "MiddleLeft", "MiddleRight", "TopCenter", "TopLeft", "TopRight", "value__")
>> MAXScript Rollout Handler Exception:
-- Unknown property: "lblOutput" in undefined <<

Même en réduisant le code au strict minimum ça merde....

En gros j'ai ma fonction refresh en premier, puis les rollouts. à l'ouverture du dernier rollout j'exécute ma fonction refresh qui affecte une valeur aux labels contenus dans un rollout. Et c'est là qu'il me fait ch... genre le rollout n'existe pas donc il trouve pas le label. WTF?!
Comment un rollout présent dans le code peut-il ne pas être défini ??

C'est en train de doucement me faire péter un câble...

edit: A noter que les labels se mettent à jour si je les initialise hors bloc (c'est donc bien qu'ils existent bordel), mais tjrs une erreur si je refresh.
il y a 1 an 10 mois #60942

Connexion ou Créer un compte pour participer à la conversation.

  • Messages : 445
  • Karma: 41
  • Remerciements reçus 274

Sen a répondu au sujet : Chopé par le callback

pas évident comme çà . Sans en voir plus . Certainement un problème de variable , local / global , le nom de ta fonction .....
mais aucune certitude .
Dans ce genre de cas essaye de répéter tes fonctions dans chaque rollout , teste ..... et élimine . Ensuite tu peux essayer avec le debugger msx .
Si tu veux mettre plus de code , ou envoyer en MP , n'hésites pas je pourrais regarder demain normalement .


****
edit : quand tu bloques vraiment sur ton code , il est bon de faire une pause de 2/3 jours et y revenir .
il y a 1 an 10 mois #60943
Les utilisateur(s) suivant ont remercié: Sylkun

Connexion ou Créer un compte pour participer à la conversation.

  • Messages : 411
  • Karma: 19
  • Remerciements reçus 169

Sylkun a répondu au sujet : Chopé par le callback

C'est ce langage qui est merdique.

Une fonction ne peut être appelée qu'après avoir été déclarée. Mais un rollout également !!! Alors comment je fais pour changer le contenu d'une rollout en appelant une fonction?

EDIT: finalement j'ai percuté la solution en voulant te poster un réduit du code... Suffit de placer la fonction après les rollouts et de déclarer avec un "local Refresh" ou "global Refresh" avant :) Par percuté avant, je suis plus habitué aux langages intelligents qui s'auto-déclarent ou qui ne dépendent pas de leur position pour s'appeler.
ça n'explique pas pourquoi ça marchait normalement par moment, sur des script sans déclaration, mais bref... les voies de max sont impénétrables.

Du coup comeback sur le callback :)
il y a 1 an 10 mois #60944

Connexion ou Créer un compte pour participer à la conversation.

  • Messages : 445
  • Karma: 41
  • Remerciements reçus 274

Sen a répondu au sujet : Chopé par le callback

tout ce qui est déclaré en dehors de rollout , doit l'être en global , si en local , celui-ci n'a pas d'accès ou un accès aléatoire en forçant , mais c'est pas propre . Il faut rappeler que l'utilisation de global est à limiter , mais en faisant attention à leur nom et leur utilisation çà passe.
je pense que ton callback doit être mal déclaré aussi .

Un bon plan reste celui-ci:


if (rolloutname != undefined) and (rolloutname.isdisplayed ) do
(destroyDialog rolloutname)

Rollout
Rollout

rollout rolloutname
(

Variables
Varialbes

--Variables

Functions
Functions

--Functions

OpenRollout
OpenRollout

on rolloutname open do
(

)

Button Events
Button Events





otherRollout ....
)
END END END END END

createDialog rolloutname
il y a 1 an 10 mois #60945
Les utilisateur(s) suivant ont remercié: JYA

Connexion ou Créer un compte pour participer à la conversation.

Modérateurs: sliverpetitsuisselegolas57christianOmega3RicardoMylandDavidR