Modèles (format de fichier X, encodage de texte)
Les modèles définissent la façon dont le flux de données est interprété : les données sont modulées par la définition du modèle. Cette section décrit les aspects suivants d’un modèle et fournit un exemple de modèle.
Il existe un modèle spécial : le modèle d’en-tête. Il est recommandé que chaque application définisse un modèle d’en-tête et l’utilise pour définir des informations spécifiques à l’application, telles que les informations de version. S’il est présent, cet en-tête est lu par l’API au format de fichier .x. Si un membre d’indicateurs est disponible, il est utilisé pour déterminer la façon dont les données suivantes sont interprétées. Le membre des indicateurs, s’il est défini, doit être un DWORD. Un bit est actuellement défini : bit 0. Si ce bit est clair, les données suivantes dans le fichier sont binaires. Si elle est définie, les données suivantes sont du texte. Vous pouvez utiliser plusieurs objets de données d’en-tête pour basculer entre le binaire et le texte dans le fichier.
Formulaire de modèle, nom et UUID
Un modèle a la forme suivante.
template <template-name> {
<UUID>
<member 1>;
...
<member n>;
[restrictions]
}
Le nom du modèle est un nom alphanumérique qui peut inclure le caractère de soulignement (_). Il ne doit pas commencer par un chiffre. L’UUID est un identificateur universel unique au format standard de l’environnement de calcul distribué d’Open Software Foundation et placé entre crochets (<>). Par exemple : <3D82AB43-62DA-11cf-AB39-0020AF71E433>.
Membres du modèle
Les membres de modèle se composent d’un type de données nommé suivi d’un nom facultatif ou d’un tableau d’un type de données nommé. Les types de données primitifs valides sont définis dans le tableau suivant.
Type | Taille |
---|---|
WORD | 16 bits |
DWORD | 32 bits |
FLOAT | FLOTTEUR IEEE |
DOUBLE | 64 bits |
CHAR | 8 bits |
UCHAR | 8 bits |
BYTE | 8 bits |
STRING | Chaîne null terminée |
CSTRING | Chaîne C mise en forme (non prise en charge) |
UNICODE | Chaîne Unicode (non prise en charge) |
Les types de données supplémentaires définis par les modèles rencontrés précédemment dans le flux de données peuvent également être référencés dans une définition de modèle. Aucune référence de transfert n’est autorisée.
Tout type de données valide peut être exprimé sous forme de tableau dans la définition du modèle. La syntaxe de base est illustrée dans l’exemple suivant.
array <data-type> <name>[<dimension-size>];
<dimension-size> peut être un entier ou une référence nommée à un autre membre de modèle dont la valeur est ensuite remplacée. Les tableaux peuvent être à n dimensions, où n est déterminé par le nombre de crochets associés à la fin de l’instruction, comme dans l’exemple suivant.
array DWORD FixedHerd[24];
array DWORD Herd[nCows];
array FLOAT Matrix4x4[4][4];
Restrictions de modèle
Les modèles peuvent être ouverts, fermés ou restreints. Ces restrictions déterminent quels types de données peuvent apparaître dans la hiérarchie immédiate d’un objet de données défini par le modèle. Un modèle ouvert n’a aucune restriction, un modèle fermé rejette tous les types de données et un modèle restreint autorise une liste nommée de types de données.
La syntaxe permettant d’indiquer un modèle ouvert est de trois points entre crochets.
[ ... ]
Une liste séparée par des virgules de types de données nommés, suivie éventuellement de leurs UUID entre crochets indique un modèle restreint.
[ { data-type [ UUID ] , } ... ]
L’absence de l’un des éléments ci-dessus indique un modèle fermé.
Exemple de modèle
Voici un exemple de modèle.
template Mesh {
<3D82AB44-62DA-11cf-AB39-0020AF71E433>
DWORD nVertices;
array Vector vertices[nVertices];
DWORD nFaces;
array MeshFace faces[nFaces];
[ ... ] // An open template
}
template Vector {
<3D82AB5E-62DA-11cf-AB39-0020AF71E433>
FLOAT x;
FLOAT y;
FLOAT z;
} // A closed template
template FileSystem {
<UUID>
STRING name;
[ Directory <UUID>, File <UUID> ] // A restricted template
}
Rubriques connexes