Sommaire Page precedente Page suivante page 18


Les prototypes

Ils permettent de creer de nouveau types de noeuds a l'interieur d'un fichier vrml.

PROTO

La declaration d'un proto contient:
    PROTO Clignote [
        field MFColor couleurs 0 0 0             #champ couleurs
        field SFTime temps 1                     #champ temps
    ]
    {
        DEF M Material {}
        DEF C ColorInterpolator {
            keyValue IS couleurs
            key [0 0.5 1]
        }
        DEF T TimeSensor {
            enabled TRUE 
            loop TRUE
            cycleInterval IS temps
        }
        ROUTE T.fraction_changed TO C.set_fraction
        ROUTE C.value_changed TO M.diffuseColor
    }
    Transform {                                 
        children [
            Shape {
                appearance Appearance {
                    material Clignote {         #on utilise le proto
                        couleurs [1 0 0,0 0 1]  #rouge vers bleu
                        temps 2.0               #cycle de 2 secondes
                    }
                    geometry Sphere {}
                }
            }
        ]
    }
sapin.wrl Code source
On attribut un nom au proto,puis on declare les evenements et variables utilisees sous cette forme:
    PROTO nom_proto [
        eventIn      type nom
        eventOut     type nom
        field        type nom valeur_par_defaut
        exposedField type nom valeur_par_defaut
    ]   
Le type du proto est celui du premier noeud rencontre dans le corps.Dans l'exemple Material:
    DEF M Material {}        #type du proto
Dans le corps, on utilise IS pour attribuer les noms des variables aux champs des noeuds utilises.
    cycleInterval IS temps    #associe cycleInterval a temps
On utilise le proto comme un noeud normal.Il peut etre utilise au memes endroits que le premier noeud du corps.On peut le nomer avec DEF et le reutiliser avec USE.
    nom_proto {
        field valeur
        field valeur
    }

EXTERNPROTO

UN externproto se declare de cette facon:
    EXTERNPROTO nom [
        eventIn      type nom
        eventOut     type nom
        field        type nom
        exposedFiled type nom
    ]
    "addresse du externproto" 
Contrairement au proto,l'externproto ne contient pas de corps mais l'addresse d'un proto. Il ne contient pas non plus de valeur_par_defaut pour les fields et exposedFiels, ceux-ci etant definis dans le fichier du proto.