ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/acismesh/test_front.cpp
Revision: 1
Committed: Mon Jun 11 22:53:07 2007 UTC (17 years, 11 months ago)
File size: 6292 byte(s)
Log Message:

File Contents

# User Rev Content
1 1 /*****************************************************************
2    
3     test_front.cpp Type:func
4    
5     teste la validite du front
6    
7     Date de creation : 5-5-1999 13 :43 :29
8     Derniere version : 5-5-1999 13 :43 :29
9    
10     Vincent FRANCOIS
11    
12     *****************************************************************/
13    
14    
15    
16    
17    
18     /**************************/
19     /* include */
20     #include <stdio.h>
21     #include <string.h>
22     #include <stdlib.h>
23     #include <math.h>
24     #include "const.h"
25     #include "memoire.h"
26     #include "struct.h"
27     #include "struct3d.h"
28     #include "prototype.h"
29    
30    
31     /**************************/
32     /* variables globales */
33     extern struct environnment env;
34     extern struct s_mesh *mesh;
35    
36    
37    
38     /**************************/
39     /* programme principal */
40    
41     int test_front(void)
42     {
43     int i,erreur;
44     char mess[255];
45     struct s_tetra *tet;
46     struct s_front3d *ft,*ft1,*ft2,*ft3,*ft11,*ft12,*ft13,*ft21,*ft22,*ft23,*ft31,*ft32,*ft33;
47     struct s_noeud *no1,*no2,*no3,*no4;
48     float n1n2[4],n1n3[4],n1n4[4],n[4];
49    
50     erreur=0;
51     for (i=0;i<12;i++)
52     {
53     ft=mesh->tete_front3d[i];
54     while (ft!=NULL)
55     {
56     no1=ADRESSE(ft->n1,noeud,mesh->);
57     no2=ADRESSE(ft->n2,noeud,mesh->);
58     no3=ADRESSE(ft->n3,noeud,mesh->);
59     VEC(n1n2,no1,no2);
60     VEC(n1n3,no1,no3);
61     PVEC(n,n1n2,n1n3);
62     NORME(n);
63     if (ft->tri->type==FACE)
64     {
65     if (((ft->n1!=ft->tri->n1)&&(ft->n2!=ft->tri->n2)&&(ft->n3!=ft->tri->n3))
66     && ((ft->n1!=ft->tri->n2)&&(ft->n2!=ft->tri->n3)&&(ft->n3!=ft->tri->n1))
67     && ((ft->n1!=ft->tri->n3)&&(ft->n2!=ft->tri->n1)&&(ft->n3!=ft->tri->n2)))
68     {
69     sprintf(mess,"Front mal oriente avec la frontiere. Etape numero %d. Front %d %d %d",mesh->nb_tetra,ft->n1,ft->n2,ft->n3);
70     aff_text(mess);
71     erreur=1;
72     }
73     }
74     else
75     {
76     tet=ft->tri->tetra[0];
77     if (tet->n1!=ft->n1)
78     if (tet->n1!=ft->n2)
79     if (tet->n1!=ft->n3)
80     no4=ADRESSE(tet->n1,noeud,mesh->);
81     if (tet->n2!=ft->n1)
82     if (tet->n2!=ft->n2)
83     if (tet->n2!=ft->n3)
84     no4=ADRESSE(tet->n2,noeud,mesh->);
85     if (tet->n3!=ft->n1)
86     if (tet->n3!=ft->n2)
87     if (tet->n3!=ft->n3)
88     no4=ADRESSE(tet->n3,noeud,mesh->);
89     if (tet->n4!=ft->n1)
90     if (tet->n4!=ft->n2)
91     if (tet->n4!=ft->n3)
92     no4=ADRESSE(tet->n4,noeud,mesh->);
93     VEC(n1n4,no1,no4);
94     NORME(n1n4);
95     if (PSCA(n1n4,n)>-0.0001)
96     {
97     sprintf(mess,"Front mal oriente. Etape numero %d. Front %d %d %d",mesh->nb_tetra,ft->n1,ft->n2,ft->n3);
98     aff_text(mess);
99     erreur=1;
100     }
101     }
102     ft1=ft->voisin[0].ft;
103     ft2=ft->voisin[1].ft;
104     ft3=ft->voisin[2].ft;
105     ft11=ft1->voisin[0].ft;
106     ft12=ft1->voisin[1].ft;
107     ft13=ft1->voisin[2].ft;
108     ft21=ft2->voisin[0].ft;
109     ft22=ft2->voisin[1].ft;
110     ft23=ft2->voisin[2].ft;
111     ft31=ft3->voisin[0].ft;
112     ft32=ft3->voisin[1].ft;
113     ft33=ft3->voisin[2].ft;
114     if ((ft11!=ft)&&(ft12!=ft)&&(ft13!=ft))
115     {
116     sprintf(mess,"Front invalide. Etape numero %d. Front %d %d %d voisin 0",mesh->nb_tetra,ft->n1,ft->n2,ft->n3);
117     aff_text(mess);
118     erreur=1;
119     }
120     if ((ft21!=ft)&&(ft22!=ft)&&(ft23!=ft))
121     {
122     sprintf(mess,"Front invalide. Etape numero %d. Front %d %d %d voisin 1",mesh->nb_tetra,ft->n1,ft->n2,ft->n3);
123     aff_text(mess);
124     erreur=1;
125     }
126     if ((ft31!=ft)&&(ft32!=ft)&&(ft33!=ft))
127     {
128     sprintf(mess,"Front invalide. Etape numero %d. Front %d %d %d voisin 2",mesh->nb_tetra,ft->n1,ft->n2,ft->n3);
129     aff_text(mess);
130     erreur=1;
131     }
132     if (ft->tri->front!=1)
133     {
134     sprintf(mess,"Front invalide. Etape numero %d. Front %d %d %d triangle",mesh->nb_tetra,ft->n1,ft->n2,ft->n3);
135     aff_text(mess);
136     erreur=1;
137     }
138     if (ft->tri->ft!=ft)
139     {
140     sprintf(mess,"Front invalide. Etape numero %d. Front %d %d %d triangle front",mesh->nb_tetra,ft->n1,ft->n2,ft->n3);
141     aff_text(mess);
142     erreur=1;
143     }
144     ft=ft->suivant;
145     }
146     }
147    
148     return(erreur);
149    
150     }