Du hast einen Szenegrafen mit einer menge Blätter, "Verzweigungen", Transform-Knoten, Anim-Transform-Knoten etc. Du willst jetzt z.B. allen Anim-Transform-Knoten das gerade 12 Uhr geworden ist und sie bitte die trafo so einstellen sollen, dass alle Uhrzeiger nach oben stehen. Dazu gehst Du den Grafen durch, schaust bei jedem Element, ob es ein Anim-Transform-Knoten ist und wenn ja, sagst Du Ihm die Uhrzeit.
Oder überhaupt die Unterscheidung in Blätter und Verzweigungen wird sehr häufig abgefragt. Hier z.B. eine typische rekusive Funktion zum Speichern der Szene in das tri Format (und praktisch gleich auch bei anderen Formaten):
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
static void save_entities ( ssgEntity *e )
{
if ( e -> isAKindOf ( ssgTypeBranch() ) )
{
ssgBranch *br = (ssgBranch *) e ;
for ( int i = 0 ; i < br -> getNumKids () ; i++ )
save_entities ( br -> getKid ( i ) ) ;
}
else
if ( e -> isAKindOf ( ssgTypeVtxTable() ) )
{
ssgVtxTable *vt = (ssgVtxTable *) e ;
save_vtx_table ( vt ) ;
}
}
|
getKid gibt es nur bei branches - also muss erst mit isAKindOf nachgefragt werden. In dem Programm wurde übrigens das RTTI System händisch programmiert.