Ce chapitre présente un ensemble de fonction permettant la visualisation de données sur les types de maillage 3D suivants :
Chacun de ces maillage est décrit par une structure décrivant sa géométrie (structure C de type Tmesh3D), par ses données scalaires 3D (structures C de type Tscalar3D_data) et par ses données vectorielles 3D (structures C de type Tvec3D_data). Une fonction PHIGURE de représentation de données scalaires d'un maillage 3D se présente ainsi sous la forme suivante :
txxxxx (struct_id, &mesh, &scal_data)
où
xxxxx est le nom de la fonction PHIGURE
struct_id : est l'identificateur de la structure PHIGS (à intégrer dans la liste des structures de la fonction tscene si la structure doit être visualisée)
&mesh est l'adresse de la structure C décrivant la géométrie du maillage
&scal_data est l'adresse d'un jeu de données sur le maillage
Remarques concernant les maillages non structurés 3D :
Ces trois types de maillage sont décrits par une liste de N triplets des coordonnées des sommets (numérotés de 0 à N-1), et par une liste de M mailles du maillages. Chaque maille est décrite par ses 4, 5, 6 ou 8 numéros des sommets qui la composent.
Les maillages non structurés 3D doivent respecter les règles suivantes :
La structure de données des valeurs du maillage, définie une valeur en chacun des sommets du maillage.
Description du type des structures C mesh:
typedef struct {
Tmesh3D_type type;
union {
struct {
Pint num_x;
Pint num_y;
Pint num_z;
Pfloat *x;
Pfloat *y;
Pfloat *z;
} parallelepipedic;
struct {
Pint num_x;
Pint num_y;
Pint num_z;
Pfloat ***x;
Pfloat ***y;
Pfloat ***z;
} hexahedral;
struct {
Pint num_r;
Pint num_p;
Pint num_z;
Pfloat *r;
Pfloat *p;
Pfloat *z;
} cylindrical;
struct {
Pint num_r;
Pint num_t;
Pint num_p;
Pfloat *r;
Pfloat *t;
Pfloat *p;
} spherical;
struct {
Pint num_hexahedrons;
Pint num_nodes;
Thexahedron_ind *hexahedron_nodes;
Ppoint3 *nodes;
} ns_hexahedrons;
struct {
Pint num_tetrahedrons;
Pint num_nodes;
Ttetrahedron_ind *tetrahedron_nodes;
Ppoint3 *nodes;
} ns_tetrahedrons;
struct {
Pint num_elems;
Pint num_nodes;
Pint_list *elem_nodes;
Ppoint3 *nodes;
} ns_non_homo_3D;
} geometry;
} Tmesh3D
le champ type représente le type de géométrie du maillage :
typedef enum {
TPARALLELEPIPEDIC_MESH,
THEXAHEDRAL_MESH,
TCYLINDRICAL_MESH,
TSPHERICAL_MESH,
TNS_MESH_OF_HEXAHEDRONS,
TNS_MESH_OF_TETRAHEDRONS,
TNS_MESH_NON_HOMO_3D
} Tmesh3D_type;
nodes représente un noeud du maillage :
typedef struct {
Pfloat x;
Pfloat y;
Pfloat z;
} Ppoint3;
Ttetrahedron_ind est un tableau contenant les 4 indices des noeuds d'un tétraèdre :
typedef Pint Ttetrahedron_ind [4];
Thexahedron_ind est un tableau contenant les 8 indices des noeuds d'un héxaèdre :
typedef Pint Thexahedron_ind[8];
Description
du type des structures C scal_data:
typedef union {
struct {
Pfloat ***s;
} parallelepipedic;
struct {
Pfloat ***s;
} hexahedral;
struct {
Pfloat ***s;
Pfloat *sa;
} cylindrical;
struct {
Pfloat ***s;
Pfloat *spa;
Pfloat *sna;
Pfloat so;
} spherical;
struct {
Pfloat *s;
} ns_hexahedrons;
struct {
Pfloat *s;
} ns_tetrahedrons;
struct {
Pfloat *s;
} ns_non_homo_3D;
} Tscalar3D_data;
Description du type des structures C vector_data:
typedef union {
struct {
Pvec3 ***v;
} parallelepipedic;
struct {
Pvec3 ***v;
} hexahedral;
struct {
Pvec3 ***v;
Pvec3 *va;
} cylindrical;
struct {
Pvec3 ***v;
Pvec3 *vpa;
Pvec3 *vna
Pvec3 vo;
} spherical;
struct {
Pvec3 *v;
} ns_hexahedrons;
struct {
Pvec3 *v;
} ns_tetrahedrons;
struct {
Pvec3 *v;
} ns_non_homo_3D;
} Tvec3D_data
où Pvec3 est le type vecteur 3D de PHIGURE:
typedef struct {
Pfloat delta_x;
Pfloat delta_y;
Pfloat delta_z;
} Pvec3;
Les
champs des structures de type "triple pointeur" (***s, ***x,
***y, ***z, ou ***v) peuvent être
alloués par les utilitaires talloc_float_matrix3 et
talloc_vec3_matrix3, et libérés par les utilitaires
tfree_float_matrix3 et tfree_vec3_matrix3.