ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/diamesh/src/m3d_test2.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_test2.cpp
File size: 4413 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 float elan ;
8     extern int speed ;
9     extern GEST_MEM *gest ;
10     int m3d_test2(FACE *face,NOEUD *noe_p,float *coord,FACE **finter,int *nb_face,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     *nb_face = 0 ;
24    
25     /* point connectable ? */
26     if (noe_p->mark == KILLED) return(FAUX) ;/* point elimine */
27     /* point interieur = on pourrait le prendre par la suite */
28     /* if (noe_p->mark == NO_CONNEC) return(FAUX) ; */
29    
30     /* parcours de la liste des tetras detruites EVITER DE BOUCLER */
31     oct = (face->n1)->oct ;
32     connec = face->n1->lis_con ;
33     nb_killed = 0 ;
34     while (connec!=NULL)
35     {
36     tetra = connec->tetra ;/* tetra connecte au noeud */
37     if ((tetra->mark == KILLED) &&(gest->numele[4*(tetra->num) + 1]!=123456789))
38     {
39     if ( (tetra->face1->n1==face->n1) || (tetra->face1->n1==face->n2) || (tetra->face1->n1==face->n3) || (tetra->face1->n1==noe_p))
40     {
41     if ( (tetra->face1->n2==face->n1) || (tetra->face1->n2==face->n2) || (tetra->face1->n2==face->n3)
42     || (tetra->face1->n2==noe_p))
43     {
44     if ( (tetra->face1->n3==face->n1) || (tetra->face1->n3==face->n2) || (tetra->face1->n3==face->n3)
45     || (tetra->face1->n3==noe_p))
46     {
47     /* determination du 4 e noeud du tetra */
48     n4 = NULL ;
49     if ( (tetra->face2->n1!=tetra->face1->n1) && (tetra->face2->n1!=tetra->face1->n2)
50     && (tetra->face2->n1!=tetra->face1->n3))
51     {
52     n4 = tetra->face2->n1 ;
53     }
54     else if ( (tetra->face2->n2!=tetra->face1->n1) && (tetra->face2->n2!=tetra->face1->n2) &&
55     (tetra->face2->n2!=tetra->face1->n3))
56     {
57     n4 = tetra->face2->n2 ;
58     }
59     else n4 = tetra->face2->n3 ;
60     if ( (n4==face->n1) || (n4==face->n2) || (n4==face->n3)
61     || (n4==noe_p))
62     {
63     nb_killed ++;
64     if (nb_killed>2)
65     {
66     return(FAUX) ;
67     }
68     }
69     }
70     }
71     }
72     }
73     connec = connec->suivant ;
74     }
75    
76     /* les faces du tetra coupent-elles le front */
77     *ierr = FAUX ;
78     if (m3d_cpfront2(coord,face,noe_p,finter,nb_face,ierr))
79     {
80     return(FAUX) ;
81     }
82     /* dernier test (30/10/1992) */
83     /* ************************** */
84     /* test d'existence des faces */
85     /* ************************** */
86     if (noe_p->mark == CARD_NULL) return(VRAI) ;
87     nj1 = face->n1 ;
88     nj2 = face->n2 ;
89     nj3 = face->n3 ;
90     j1 = nj1->num ;
91     j2 = nj2->num ;
92     j3 = nj3->num ;
93     num_c = noe_p->num ;
94     /* recherche de la face j3 j2 num_c */
95     min_j = min(j3,j2) ;
96     min_j = min(min_j,num_c) ;
97     if (min_j==j3)
98     {
99     n1 = nj3 ;
100     n2 = nj2 ;
101     n3 = noe_p ;
102     }
103     if (min_j==j2)
104     {
105     n1 = nj2 ;
106     n2 = noe_p ;
107     n3 = nj3 ;
108     }
109     if (min_j==num_c)
110     {
111     n1 = noe_p ;
112     n2 = nj3 ;
113     n3 = nj2 ;
114     }
115     /* recherche de la face n1,n2,n3 */
116     face1 = m3d_recface2(coord,n1,n2,n3) ;
117     if (face1!=NULL)
118     {
119     /* on teste si la face a ete detruite */
120     if (face1->mark==KILLED)
121     {
122     /* modif du 21-01-93 */
123     finter[(*nb_face)] = face1 ;
124     (*nb_face)++ ;
125     }
126     }
127     /* recherche de la face j1 j3 num_c */
128     min_j = min(j1,j3) ;
129     min_j = min(min_j,num_c) ;
130     if (min_j==j1)
131     {
132     n1 = nj1 ;
133     n2 = nj3 ;
134     n3 = noe_p ;
135     }
136     if (min_j==j3)
137     {
138     n1 = nj3 ;
139     n2 = noe_p ;
140     n3 = nj1 ;
141     }
142     if (min_j==num_c)
143     {
144     n1 = noe_p ;
145     n2 = nj1 ;
146     n3 = nj3 ;
147     }
148     /* recherche de la face n1,n2,n3 */
149     face2 = m3d_recface2(coord,n1,n2,n3) ;
150     if (face2!=NULL)
151     {
152     /* on teste si la face a ete detruite */
153     if (face2->mark==KILLED)
154     {
155     /* modif du 21-01-93 */
156     finter[(*nb_face)] = face2 ;
157     (*nb_face)++ ;
158     }
159     }
160     /* recherche de la face j2 j1 num_c */
161     min_j = min(j2,j1) ;
162     min_j = min(min_j,num_c) ;
163     if (min_j==j2)
164     {
165     n1 = nj2 ;
166     n2 = nj1 ;
167     n3 = noe_p ;
168     }
169     if (min_j==j1)
170     {
171     n1 = nj1 ;
172     n2 = noe_p ;
173     n3 = nj2 ;
174     }
175     if (min_j==num_c)
176     {
177     n1 = noe_p ;
178     n2 = nj2 ;
179     n3 = nj1 ;
180     }
181     /* recherche de la face n1,n2,n3 */
182     face3 = m3d_recface2(coord,n1,n2,n3) ;
183     if (face3!=NULL)
184     {
185     /* on teste si la face a ete detruite */
186     if (face3->mark==KILLED)
187     {
188     finter[(*nb_face)] = face3 ;
189     (*nb_face)++ ;
190     }
191     }
192     return(VRAI) ;
193     }