ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/diamesh/src/m3d_test.cpp
Revision: 5
Committed: Tue Jun 12 20:26:34 2007 UTC (17 years, 11 months ago)
Original Path: magic/lib/diamesh/diamesh/src/m3d_test.cpp
File size: 4460 byte(s)
Log Message:

File Contents

# User Rev Content
1 5
2     #include <stdio.h>
3     #include <math.h>
4     #include "m3d_struct.h"
5     #include "m3d_const.h"
6     #include "prototype.h"
7     extern int nb_inter ;
8     extern int nb_no_inter ;
9     extern GEST_MEM *gest ;
10     int m3d_test(FACE *face,NOEUD *noe_p,float *coord,int *ierr)
11     {
12     FACE *face1, *face2, *face3 ;
13     NOEUD *nj1, *nj2, *nj3, *n1, *n2, *n3, *n4;
14     int j1, j2, j3, num_c ;
15     int min_j ;
16     TETRAEDRE *tetra ;
17     CONNEC *connec ;
18     OCT *oct ;
19     int nb_killed ;
20    
21     n1 = n2 = n3 = NULL ;
22    
23     /* point connectable ? */
24     if (noe_p->mark == KILLED) return(FAUX) ;/* point elimine */
25     if (noe_p->mark == NO_CONNEC) return(FAUX) ;
26    
27     /* parcours de la liste des tetras detruits EVITER DE BOUCLER */
28     /* reperer l'octree d'appartenance du noeud */
29     oct = (face->n1)->oct ;
30     connec = face->n1->lis_con ;
31     nb_killed = 0 ;
32     while (connec!=NULL)
33     {
34     tetra = connec->tetra ;/* tetra connecte au noeud */
35     if ((tetra->mark == KILLED) && (gest->numele[4*(tetra->num) + 1]!=123456789))
36     {
37     if ( (tetra->face1->n1==face->n1) || (tetra->face1->n1==face->n2) || (tetra->face1->n1==face->n3) || (tetra->face1->n1==noe_p))
38     {
39     if ( (tetra->face1->n2==face->n1) || (tetra->face1->n2==face->n2) || (tetra->face1->n2==face->n3)
40     || (tetra->face1->n2==noe_p))
41     {
42     if ( (tetra->face1->n3==face->n1) || (tetra->face1->n3==face->n2) || (tetra->face1->n3==face->n3)
43     || (tetra->face1->n3==noe_p))
44     {
45     /* determination du 4 e noeud du tetra */
46     n4 = NULL ;
47     if ( (tetra->face2->n1!=tetra->face1->n1) && (tetra->face2->n1!=tetra->face1->n2)
48     && (tetra->face2->n1!=tetra->face1->n3))
49     {
50     n4 = tetra->face2->n1 ;
51     }
52     else if ( (tetra->face2->n2!=tetra->face1->n1) && (tetra->face2->n2!=tetra->face1->n2) &&
53     (tetra->face2->n2!=tetra->face1->n3))
54     {
55     n4 = tetra->face2->n2 ;
56     }
57     else n4 = tetra->face2->n3 ;
58     if ( (n4==face->n1) || (n4==face->n2) || (n4==face->n3)
59     || (n4==noe_p))
60     {
61     nb_killed ++;
62     if (nb_killed>2)
63     {
64     return(FAUX) ;
65     }
66     }
67     }
68     }
69     }
70     }
71     connec = connec->suivant ;
72     }
73     /* les faces du tetra coupent-elles le front */
74     *ierr = FAUX ;
75     nb_inter = 0 ;
76     nb_no_inter = 0 ;
77     if (m3d_cpfront(coord,face,noe_p,ierr))
78     {
79     /*
80     printf("Intersections : %d tests\n",nb_inter) ;
81     printf("Pas d'intersections : %d tests\n",nb_no_inter) ;
82     */
83     return(FAUX) ;
84     }
85     /*
86     printf("Intersections : %d tests\n",nb_inter) ;
87     printf("Pas d'intersections : %d tests\n",nb_no_inter) ;
88     */
89     /* dernier test (30/10/1992) */
90     /* ************************** */
91     /* test d'existence des faces */
92     /* ************************** */
93     if (noe_p->mark == CARD_NULL) return(VRAI) ;
94     nj1 = face->n1 ;
95     nj2 = face->n2 ;
96     nj3 = face->n3 ;
97     j1 = nj1->num ;
98     j2 = nj2->num ;
99     j3 = nj3->num ;
100     num_c = noe_p->num ;
101     /* recherche de la face j3 j2 num_c */
102     min_j = min(j3,j2) ;
103     min_j = min(min_j,num_c) ;
104     if (min_j==j3)
105     {
106     n1 = nj3 ;
107     n2 = nj2 ;
108     n3 = noe_p ;
109     }
110     if (min_j==j2)
111     {
112     n1 = nj2 ;
113     n2 = noe_p ;
114     n3 = nj3 ;
115     }
116     if (min_j==num_c)
117     {
118     n1 = noe_p ;
119     n2 = nj3 ;
120     n3 = nj2 ;
121     }
122     /* recherche de la face n1,n2,n3 */
123     face1 = m3d_recface2(coord,n1,n2,n3) ;
124     if (face1!=NULL)
125     {
126     /* on teste si la face a ete detruite */
127     if (face1->mark==KILLED)
128     {
129     return(FAUX) ;
130     }
131     }
132     /* recherche de la face j1 j3 num_c */
133     min_j = min(j1,j3) ;
134     min_j = min(min_j,num_c) ;
135     if (min_j==j1)
136     {
137     n1 = nj1 ;
138     n2 = nj3 ;
139     n3 = noe_p ;
140     }
141     if (min_j==j3)
142     {
143     n1 = nj3 ;
144     n2 = noe_p ;
145     n3 = nj1 ;
146     }
147     if (min_j==num_c)
148     {
149     n1 = noe_p ;
150     n2 = nj1 ;
151     n3 = nj3 ;
152     }
153     /* recherche de la face n1,n2,n3 */
154     face2 = m3d_recface2(coord,n1,n2,n3) ;
155     if (face2!=NULL)
156     {
157     /* on teste si la face a ete detruite */
158     if (face2->mark==KILLED)
159     {
160     return(FAUX) ;
161     }
162     }
163     /* recherche de la face j2 j1 num_c */
164     min_j = min(j2,j1) ;
165     min_j = min(min_j,num_c) ;
166     if (min_j==j2)
167     {
168     n1 = nj2 ;
169     n2 = nj1 ;
170     n3 = noe_p ;
171     }
172     if (min_j==j1)
173     {
174     n1 = nj1 ;
175     n2 = noe_p ;
176     n3 = nj2 ;
177     }
178     if (min_j==num_c)
179     {
180     n1 = noe_p ;
181     n2 = nj2 ;
182     n3 = nj1 ;
183     }
184     /* recherche de la face n1,n2,n3 */
185     face3 = m3d_recface2(coord,n1,n2,n3) ;
186     if (face3!=NULL)
187     {
188     /* on teste si la face a ete detruite */
189     if (face3->mark==KILLED)
190     {
191     return(FAUX) ;
192     }
193     }
194     return(VRAI) ;
195     }