Introduction IGA
Accueil > Aide ICAB > Manuel ICAB - format de fichier IGA > Introduction IGA

ICAB - manuel de référence des fichiers IGA

Introduction IGA 
CONSTRAINT 
ELEMENT 
FUNCTION 
HEADER 
IMPORT 
LOAD 
NODE 
NOTE 
PROPRIETE Physique 
REFERENTIEL 
RESTRAINT 
STEP 
UNIT 

Présentation des fichiers IGA

Structure générale des fichiers IGA

Syntaxe utilisée dans les fichiers IGA

Directives du préprocesseur IGA

 

Les fichiers IGA (Initial General ASCII) contiennent les données nécessaires à la description de structures pour l'exécution de simulations numériques. Ces fichiers peuvent être créés et modifiés avec un programme d'édition de texte. La structure des fichiers est largement inspirée du format IGES (1)
(1) "Initial Graphics Exchange Specification (IGES) Version 5.1", sept. 1991, IGES/PDES Organization, National Institute of Standards and Technology, Gaithersburg, MD 20899, USA; ce format a été conçu pour des échanges de données entre logiciels de Conception et de Fabrication Assistées par Ordinateur (CFAO).

Les informations du fichier IGA sont en ASCII. Le format ASCII permet la création et la modification des fichiers avec un éditeur de texte. En outre ce type de format est à l'heure actuelle le seul qui permet d'échanger des fichiers entre ordinateurs de manière fiable. Les fichiers ASCII s'opposent aux fichiers binaires qui ne sont modifiables que par des programmes et qui sont spécifiques à l'ordinateur sur lequel ils ont été créés. Les fichiers IGA garantissent ainsi une grande compatibilité entre systèmes informatiques hétérogènes.

Cette section détaille la structure et la syntaxe des fichiers IGA. Les fichiers IGA sont transformés en projets ICAB (format agb) par la commande "importer".

Structure générale des fichiers IGA

Les informations contenues dans un fichier IGA sont structurées pour former une base de données comprenant une collection d'entités. Les entités, sorte de fiches élémentaires, comprennent des informations disposées selon une syntaxe imposée. Les entités sont organisées en Données d'Entrée DE et en Paramètres des Données PD. Dans la suite de ce document, les abréviations DE et PD seront utilisées. 

Données d'Entrée DE

Les Données d'Entrées DE constituent un index qui permet de renseigner les informations contenues dans le fichier IGA. Une Donnée d'Entrée DE joue un rôle similaire à celui tenu par une Directory Entry de fichier IGES. Le nombre d'informations relatives aux DE sont limitées et sont semblables pour toutes les Données d'Entrées DE. Les sections DE servent d'identificateurs pour les sections Paramètres des données PD. Par exemple, une DE pour un noeud contient en particulier le numéro de ce noeud ou le nom attribué à ce noeud.  

Paramètres des Données PD

Une section PD (Parameter Data pour les fichiers IGES) est obligatoirement associée à une DE et contient des informations requises pour la définition de l'entité en question. Par exemple, les paramètres PD pour un noeud contiennent les coordonnées précisant sa position.

  

Identificateur d'Entités ET

Chaque couple DE et PD constitue une entité. Les entités DE et PD sont regroupées en ensembles appelés ensembles de données (par exemple les noeuds, éléments, propriétés...). Avant chaque ensemble d'entités, une Identification d'Entités ET permet préciser des propriétés communes à tout un ensemble d'entités. La structure générale d'un fichier IGA est celle indiquée sur la figure ci-dessous. 

{ ET1;                  identificateur d'Entité
( DE1; PD1;             première entité du premier ensemble
( DE2; PD1;             chaque couple (DE,PD) forme une entité
( .......

( DEN1; PDN1;           dernière entité de l'ensemble 1 qui comprend N1 entités
{ ET2;
( DEN1+1; PDN1+1;
( DEN1+2; PDN1+2;
( .......
( DEN1+N2; PDN1+N2;

 { ............          Ensemble 3

 { ............          Ensemble Nn-1

{ ETNn;                 Identificateur d'Entité numéro Nn
( DEM+1; PDM+1;         on note M le nombre d'entités précédant l'ensemble Nn
( DEM+2; PDM+1;
( .......
( DEM+Nn; PDM+Nn;
 

 

Syntaxe utilisée dans les fichiers IGA

 Les informations contenues dans un fichier IGA apparaissent sous la forme de:

- chaînes de caractères,
- nombres entiers,
- de nombres réels,
- délimiteurs,
- de paramètres.

NODE();                 /* Identificateur d'Entité NOEUD */
N_A;  0.0, 0.0, 0.0;            /* DE 1; suivie par PD 1 */
N_B;  1.0, 0.0, 0.0;
N_C;  2.0, 0.0, 0.0;

PROPERTY(TYPE=SPRING);  /* ID 2 */
spring1; K=1E5;
PROPERTY(TYPE=MASS);            /* ID 3 */
mass1; MA=10.0;

ELEMENT(TYPE=SPRING,PROP=spring1);      /* ID 4 */
; N_A,  N_B;            /* la DE est vide et prend donc des */
; N_B,  N_C;            /* valeurs par défaut               */

ELEMENT(TYPE=MASS,PROP=mass1);  /* ID 5 */
; N_A;
; N_C;

CONSTRAINT(TYPE=KINEMATICS)     /* ID 6 */
; N_A,  X,Y,Z,RX,RY,RZ;
; N_B,    Y,Z,RX,RY,RZ;
; N_C,    Y,Z,RX,RY,RZ;
  

 

chaîne de caractères

Une chaîne de caractères est une suite de caractères parmi les listes ci-dessous:
caractères minuscules   a b c d e f g h i j k l m n o p q r s t u v w x y z
caractères majuscules   A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
caractères numériques   0 1 2 3 4 5 6 7 8 9
caractère de soulignement       _

Une chaîne de caractères ne doit pas commencer par un caractère numérique.

exemples de chaînes de caractères:      cabine  cab01   Cab_le

nombre entier

Un nombre entier est une chaîne de caractères constituée de caractères numériques et précédée du signe moins - pour indiquer un nombre négatif, du signe plus + pour indiquer un nombre positif. Le signe plus est facultatif pour un nombre positif.

 exemples de nombres entiers:    12      -382    0       +827

 nombre réel

Un nombre réel est un nombre comportant une partie décimale. La partie décimale est identifiée par le caractère point  . et doit figurer même si la partie décimale est nulle de manière à distinguer un nombre réel d'un nombre entier. Ainsi 12 est interprété comme un nombre entier et 12.0 est comme un nombre réel. Lorsque les nombres réels sont très petits ou très grands, la puissance de 10 est précisée par la lettre majuscule E. La valeur un million deux cents mille (1.2x106) peut s'écrire 1200000.0 ou 1.2E6. Un millionième (1.0x10-6) peut s'écrire 0.000001 ou 1.0E-6. Les nombres réels sont interprétés par ICAB Edit en simple précision, c'est-à-dire avec 7 à 8 chiffres significatifs (Mais les applications ICAB réalisent les calculs en double précision).

 exemples de nombres réels:      12.0    -38.2   0.0     1.21233E4       +8.27E-4        -7.34E+6

Délimiteurs

Virgule       ,

La virgule sépare des chaînes de caractères, des nombres entiers ou des nombres réels.

exemple:        

integer ,12 ,real ,-12.323

Point-virgule ;

Le point-virgule permet de délimiter la fin de Données d'entrées DE, de Paramètres de Données PD ou d'Identificateur d'Entités ET.

exemple:        

NODE() ;
1,Node1 ; 1.0, 2.0, 3.0 ;

 

parenthèses   ( )

Les parenthèses sont utilisées pour délimiter les arguments définis dans les Identificateurs d'Entités ET (cf paragraphe "syntaxe ET" ci-après).

exemple ELEMENT(TYPE=SPRING );

 

Signe égal    =

Le signe égal est utilisé pour l'affectation de valeurs dans un identificateur de paramètre (cf paragraphe suivant).

exemple:        TYPE=SPRING

 

dièse #

Le caractère dièse ne doit être employé qu'au début d'une ligne de manière à indiquer le début d'une directive (cf section sur les directives du préprocesseur ci-après).

exemple:
#define X1  1.5 /* cette ligne est une directive */
NODE()
1; X1, 0.0, 0.0;

 Identificateur de paramètre

Un identificateur de paramètre permet d'affecter des valeurs à des identificateurs d'entité ET, des Données d'Entrée DE ou des Paramètres de Données PD. Un paramètre, c'est-à-dire une information élémentaire (chaîne de caractères, nombres...) n'a qu'une portée limitée à l'entité dans laquelle il se trouve. Un identificateur de paramètre comprend une chaîne de caractères suivie du signe égal =. Le nom de l'argument est une chaîne de caractères qui est interprétée en fonction du contexte. Les paramètres qui suivent le signe égal peuvent être des chaînes de caractères, des nombres entiers ou des réels.

 

exemple de paramètres:  ELEMENT(TYPE=BEAM_LINEAR, MAT=1)

L'exemple comporte deux identificateurs de paramètre dont le premier a pour nom TYPE et pour argument une chaîne de caractères BEAM_LINEAR. Le deuxième identificateur de paramètre a pour nom MAT et son argument est un nombre entier 1.

 

Syntaxe des Identificateurs d'Entité ET

Un identificateur d'Entité est constitué d'une chaîne de caractères et d'une suite de paramètres. Cette suite de paramètres est délimitée par des parenthèses ( ). Les parenthèses sont indispensables même si aucun paramètre n'est nécessaire. L'identificateur doit tenir sur une seule ligne.

Un identificateur ET a la forme générale suivante:

 

identificateur ( paramètre1, paramètre2,... )

 

La chaîne de caractères placée avant la parenthèse ouvrante ( est le nom de l'entité. Les paramètres indiqués entre parenthèses () permettent de préciser des propriétés qui seront communes à toutes les entités jusqu'à ce qu'un autre identificateur d'entité soit rencontré.

 exemple:        

NODE()  /* identificateur d'Entité sans paramètre */
1; 1.0, 0.0, 0.0;
2; 2.0, 0.0, 0.0;

ELEMENT(TYPE=SPRING, PROP=spr1) /* avec paramètres */
; 1, 2;

 

Syntaxe des Données d'Entrées DE, pointeurs

Une Donnée d'Entrée doit appartenir à un ensemble d'Entités, c'est-à-dire un ensemble dont le type d'entité est précisé par un identificateur ET. Une DE commence en début de ligne et se termine par un point virgule  ;.

Une DE peut contenir un nombre entier et/ou une chaîne de caractère. Le nombre entier sert à donner un numéro à l'entité. La chaîne de caractère est appelée pointeur dont la longueur ne doit pas excéder 8 caractères de manière à préserver la compatibilité avec le format IGES. Le pointeur permet de nommer une entité. Pour faire référence à une entité, il est possible d'indiquer son pointeur. En l'absence de pointeur dans une DE, cette DE ne peut pas être identifiée par un pointeur. Si le numéro de DE n'est pas précisé, la valeur par défaut est zéro mais pour certaines entités une numérotation automatique est activée.

Attention: même si une DE est vide, le point virgule qui marque la fin de la DE reste nécessaire dans le fichier.

 exemple:

NODE()
1;      1.0, 0.0, 0.0;  // numéro 1
N2;     2.0, 0.0, 0.0;  // pointeur N2
3,N3;   3.0, 0.0, 0.0;  // numéro 3 et pointeur N3

ELEMENT(TYPE=SPRING, PROP=1)
;       1, N2;  // DE vide -> numérotation automatique
;

 

Syntaxe des Paramètres de Données PD

Les Paramètres de Données PD ne peuvent figurer qu'après une Données d'Entrée DE. Les Paramètres de Données se terminent par un point virgule ;. Ils peuvent contenir des chaînes de caractères, des nombres entiers ou réels, des paramètres. Il n'existe pas de syntaxe générale car les données dépendent du type d'entité. La description de la syntaxe des Paramètres de Données est détaillée dans le chapitre relatif à la bibliothèque des entités.

exemple:        

NODE()
1;      1.0, 0.0, 0.0;  // coordonnées du noeud 1
N2;     2.0, 0.0, 0.0;  // coordonnées du noeud N2

ELEMENT(TYPE=SPRING, PROP=1)
;       1, N2;  // élément contenant les noeuds 1 et N2

 

Directives du préprocesseur IGA

 L'analyse d'un fichier IGA s'effectue en deux passes:

- La première passe, qui est prise en charge par le préprocesseur IGA, consiste à éliminer les commentaires et à analyser le fichier en fonction de directives. Une directive permet de paramétrer un fichier IGA, de programmer des lectures conditionnelles et de fusionner plusieurs fichiers IGA dans le même projet.

- La deuxième passe concerne l'analyse effective des entités ET, des Données d'Entrées DE et Paramètres de Données PD.

 

Une directive est interprétée grâce au caractère dièse  # situé au début de la ligne contenant la directive. Les lignes de directives sont analysées lors de la première passe puis sont éliminées avant la deuxième passe. L'analyse de la première passe (préprocesseur) est séquentielle ce qui implique que seules les directives qui précèdent la ligne en cours peuvent avoir un effet sur cette ligne.

 

commentaires

Dans un fichier IGA, il est possible d'inclure des commentaires, c'est-à-dire du texte qui ne sera pas interprété mais qui permet de faire figurer des annotations utiles pour le lecteur. Les commentaires sont supprimés logiquement du fichier avant analyse.

 La syntaxe employée est similaire à celle utilisée dans le langage de programmation C++. La première possibilité consiste à faire précéder le commentaire par la paire de symboles /* et à marquer la fin par les mêmes symboles tapés dans l'ordre inverse, soit */. Ce type de commentaire peut être développé sur plusieurs lignes. Les commentaires imbriqués ne sont pas permis.

 La deuxième possibilité consiste à placer deux barres obliques consécutives //. La fin de la ligne après la double barre // sera analysée comme un commentaire. Le commentaire peut démarrer à n'importe quel endroit de la ligne et non nécessairement en début de ligne.

 exemples:

/* ceci est un commentaire
développé sur deux lignes */

/* ceci est un commentaire sur une ligne */

// commentaire de fin de ligne après la double barre

 

Macros

Les directives macros offrent un mécanisme de remplacement des éléments. La directive #define définit une macro. La syntaxe est la suivante:

#define <identificateur> <séquence>

 Toutes les occurrences de l'identificateur de macro (chaîne de caractères) dans le fichier IGA seront remplacées par le texte défini par la séquence d'éléments (chaîne de caractères, nombre entier ou réel). Ces remplacements sont dits des développements de macro. Une séquence de macro ne doit pas elle même contenir un identificateur de macro.

Si une macro est définie deux fois, la deuxième définition est utilisée à partir de sa position dans le fichier. Il vaut mieux éviter les doubles déclarations de macros afin d'éliminer les ambiguïtés.

La définition d'une macro peut être supprimée par la directive #undef:

 #undef <identificateur>

 exemple:

#define X1 1.0  // chaque occurrence de X1 sera remplacée par 1.0
1; X1, 0.0, 0.0;        // équivalent à "1; 1.0, 0.0, 0.0;"
#undef X1

2; X1, 0.0, 0.0;        // cette ligne est analysée sans modification
                                 //  à savoir sans substitution de X1

 

conditions #ifdef #ifndef #else #endif

Les directives conditionnelles permettent d'éliminer de l'analyse une partie du contenu du fichier. Les conditions de test portent sur la définition (#ifdef) ou la non-définition (#ifndef) de macros, c'est-à-dire si une commande #define a été exécutée pour cet identificateur et si celui est encore actif.

 

#ifdef <identificateur de macro>

...                    lignes analysées si la condition est vraie
...                    c'est-à-dire si la macro est définie
#else
...                    lignes analysées si la condition est fausse
#endif
 

#ifndef <identificateur de macro>      
...                    lignes analysées si la condition est vraie
...                    c'est-à-dire si la macro n'est pas définie
#else
...                    lignes analysées si la condition est fausse
#endif 

La directive #ifdef <macro> est vraie si la macro a été définie préalablement par la directive #define. La directive #ifndef <macro> teste la condition opposée et n'est vraie que si la macro n'a pas été définie ou bien a été détruite par la directive #undef. La directive #endif doit apparaître de manière à indiquer la fin de la portée de la directive conditionnelle. La directive #else permet de fournir une alternative si la condition testée est fausse.

exemple

#define X1 1.0
#ifdef X1
1; X1, 0.0, 0.0;        // ligne analysée puisque X1 est défini
#else
1; 1.0, 2.0, 3.0;       // ligne non interprétée
#endif

 #ifdef X1               // directive sans alternative (pas de #else)
2; X1, 3.0, 0.0;
#endif

Attention: Dans l'application ICAB version 1.0, une macro n'est pas développée.
#define X1 1.0  // la macro X1 est égale à '1.0'
#define X2 X1   // la macro X2 est égale à 'X1' et non pas à '1.0"

 

inclusion #include

La directive #include permet d'insérer un fichier à l'endroit où est placée la ligne. Le nom du fichier à insérer est indiqué entre guillemets "<nom de fichier>". Le fichier à insérer doit lui-même être un fichier IGA.

 exemple

#define X1 1.0

#include "test1.iga"            /* le fichier "test1.iga" est inclus ici */

NODE();
1;      X1, 0.0, 0.0;

 

[Haut][Suivant]