Salut,
Je suis en train de faire un nouveau déformateur, mais je rencontre un problème lorsque celui-ci affecte plusieurs objets.
Dans ce cas-ci, seule une instance du déformateur (ObjectData) est créée et sa méthode ModifyObject est utilisée autant de fois qu'il y a d'objets à déformer.
Normal, oui, mais comment faire lorsqu'on a besoin de sauvegarder du cache pour chaque objet ?
Je me suis fait un tableau avec les GUID des objets comme clef, mais ils sont pas réellement uniques, pour une raison que j'ignore, du coup ce n'est pas fiable.
Je pourrais utiliser un TagData à la place, qui est réellement propre à un objet, mais je trouve ça moins pratique dans mon cas.
Certains déformateurs de C4D arrivent bien à sauvegarder du cache pour chaque objet. Savez-vous comment font-ils ?
Dernière modification par César Vonc ; 19/07/2016 à 10h09.
Tu peux faire un hyperfile avec toute les donnees du caches. J'avais fait sa pour faire un modifier mograph avant. Sa permet de cacher uniquement les modifer qu'on veux.
Et apres te suffit de store lhyperfile dans le basecontainer de l'objet.
SDK Specialist
MAXON Computer GmbH
Je vois l'idée, mais comment tu vires ensuite l'HyperFile du BaseContainer de l'objet lorsque tu supprimes le déformateur ?
Remarque, dans le cas d'un déformateur, l'objet renvoyé n'est pas le vrai mais un cache, donc on s'en fout à la limite s'il est pollué... ?
Édit : Apparemment je ne peux pas vraiment modifier le BaseContainer d'un cache, enfin si mais il n'est pas conservé à l'image suivante de l'animation.
Dernière modification par César Vonc ; 19/07/2016 à 11h22.
Si c'est pour de l'anim moi j'avais fait comme ceci au début (avant de me rendre contre du problème des hyperFile dont je parle plus tard dans ce post).
J'avais donc le BaseContainer de mon objet mograph, avec mon ID. Dans ce BC l'index 0 contenais le nombre de frame en cache. Puis l'index 1 l'HyperFile de la frame0, l'index 2 l'hyperFile de la frame1 et ainsi de suite.
Sinon tu peux faire la même structure en récupérant un UID (Unique ID) de ton cloneur. Puis store ça dans une variable global au lieu de passé par des BaseContainer et HyperFile. De plus si mes souvenir sont bon c'est ce que j'ai du finir par faire car on ne peux pas storer une une liste dans des hyperFiles, et tu ne peux pas serializer des vector/matrice donc t'es obligé de storer ça élément par élément et donc quand tu veux avoir toute la liste t'es obliger de recréer une liste, donc pas le plus optimisé
Du coup ça ferais un truc dans le genre globalData => UID => Frame => Data(liste de point je présume)
Après pour la suppression te suffit de check tout les mesh dans tes UID et si l'un d'entre eux n'a pas le déformeur alors tu supprimes l'entrée.
J'espère que j'ai été clair.
PS : pour récupéré un UID de mémoire, j'avais fait un BaseObject.GetGUID(). Car y'a bien la fonction add_Unique_IP mais vu que n'importe quel autre plugin peux le modifier j'avou que je comprend pas bien l’intérêt.
Dernière modification par gr4ph0s ; 19/07/2016 à 15h03.
SDK Specialist
MAXON Computer GmbH
Oulà, un HyperFile par image, c'est un peu cra-cra, non ? : p
J'ai bien tenté par GUID ou UniqueIP, mais comme je l'ai dit dans mon premier message, le GUID me renvoie deux fois la même valeur pour le cache de deux objets différents... du coup ça ne marche pas bien.