PDA

Voir la version complète : Compte des enfants d'un objet.



Guedinouff
25/05/2005, 17h59
Bonjour tout le monde,
j'ai encore un problème en coffee :
Je souhaiterais compter combien un objet possède d'enfant direct (combien d'objet au niveau juste en dessous dans la hiérarchie). En cherchant dans le SDK, je suis tombé sur le compte de points, de polygones d'un objet ou le nombre d'objets sélectionnés. Mais vu que la fonction de sélection (SelectAll) demande le n° de l'objet de départ et de fin de la sélection (si j'ai bien compris), je n'arrive toujours pas à résoudre mon problème.

Donc voici mes questions :
- Existe-t-il une fonction qui donne directement ce que je cherche
- Existe-t-il une fonction qui nous permette de sélectionner tous les enfants d'un objet.

Merci d'avance... :)

base80
25/05/2005, 18h05
En xpresso (si ça peux servir?!)
c'est le noeud Hiérarchie en D (down) et un Object-liste avec un port count.

Majoul
26/05/2005, 00h02
Tu calculer le nombre avec une boucle par exemple si le parent est op :




var obj , i = 0 ;
for( obj = op->GetDown(); obj; obj = obj->GetNext() ) i++ ;
println(i) ;

Guedinouff
26/05/2005, 18h17
Merci Majoul, je vais regarder ce que je peux faire avec çà.
Je vais peut-être par contre re-regarder ton script de générateurs d'instances parce que j'ai besoin à deux niveaux du nombre de sous-enfants et un des niveaux est une répétition dans une boucle for pour chaque enfant.
Il doit y avoir un moyen de simplifier le tout.
Merci en tous cas Majoul et Base80.

@Base80, j'aimerais bien faire tout mon script en coffee si c'est possible (ce que je crois au point où j'en suis).

Guedinouff
26/05/2005, 22h05
Je suis donc arrivé à ce que je voulais. C'est une expression pas très compliquée qui permet de choisir aléatoirement un objet parmi les enfants d'un objet neutre pour le mettre comme lien dans une série d'instances.

Je le met au téléchargement au cas où çà intéresse quelqu'un :

http://ns2118.ovh.net/~deltazon/archives/guedinouff_RandomInstance1.zip

Pour l'utiliser, il suffit de glisser l'objet parent des objets modèles dans la case correspondante et l'objet parent des instances dans l'autre case. On active ensuite la case à cocher Valider (qui ne reste pas activée), pour valider le choix. Pour changer la répartition, il suffit de recliquer sur cette case à cocher.
Cette expression ne gère que les enfants de niveau juste en dessous de l'objet glissé dans les DU.

Problèmes connus :
- L'expression ne fonctionne pas (elle ne génère pas quelque chose d'aléatoire) si on l'utilise juste après le lancement de Cinema4D car j'utilise une Initialisation pour la fonction random qui utilise time() (fonction qui donne le nombre de millisecondes depuis lequel cinema4d est ouvert).
- Dans certain cas, l'expression génère un aléatoire assez étrange (genre toutes les instances identiques ou des séries de même longueur d'instances identiques).

Le random que j'ai obtenu n'est pas bon (on obtient souvent des suites d'instances liées à un même objet).
Je me penche sur la question pour essayer d'améliorer ce point.
Si vous voyez d'autres problèmes vous pouvez toujours m'envoyer le détail du problème que j'essaierai avec mes très modestes compétences en coffee de corriger.

P.S. : Comme une bonne partie de ce code provient de Majoul (Le code ci-dessus et celui fait pour Instance Maker), et si cela le gêne, je retire le fichier du téléchargement.

Pascal
28/05/2005, 11h20
Je viens d'essayer ton petit Xpresso, et je le trouve très pratique. Adopté et rangé dans ma boîte à outils. Merci. :poucehaut:

Aurety
28/05/2005, 11h29
Excellent Guedinouff, merci ! On tombe sur des aléatoires assez récurrents mais c'est trés utile.

tabou
28/05/2005, 13h44
Merci pour ton expression Guedinouff, elle rend bien service :poucehaut:

Guedinouff
28/05/2005, 14h04
Oui pour l'aléatoire je ne trouve toujours rien. J'ai testé avec les autres types d'aléatoire Coffee (Noise et fbm) et en les mélangeant mais je me retrouve toujours avec des séries semblables.
Je continue à réfléchir...
En tous cas je suis content que çà serve à quelqu'un d'autre. :)
J'essaierai dans quelques temps de lui mettre une interface, ce sera plus adapté à mon avis que des DUs sur une expression.

Pascal
28/05/2005, 15h05
Oui, c'est une bonne base pour en faire un vrai plugin ensuite.
Idée à méditer : gestion de plusieurs groupes d'instances (là, ça marche en dupliquant l'Xpresso, mais ce n'est pas très souple). :wink:

Guedinouff
31/05/2005, 17h38
Pascal, si j'ai bien compris, tu voudrais dans l'interface un espace semblable à celui proposé dans les paramètres d'une lumière pour inclure ou exclure des objets : une liste de liens vers des objets ??
C'est une idée, il faut que je réfléchisse, mais à mon avis çà ne doit être gérable qu'avec une interface coffee...
Pour l'interface coffee, je ne pense pas la faire tout de suite (à cause du bac qui approche) mais dès le bac finit, je m'y met sérieusement.