ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/diamesh/src/m3d_recons.cpp
Revision: 283
Committed: Tue Sep 13 21:11:20 2011 UTC (13 years, 8 months ago) by francois
File size: 5002 byte(s)
Log Message:
structure de l'écriture

File Contents

# User Rev Content
1 francois 283 #include <stdio.h>
2     #include "m3d_struct.h"
3     #include "m3d_const.h"
4     #include "m3d_hotes.h"
5     #include "m3d_erreur.h"
6     #include "prototype.h"
7     extern float crit_min ;
8     extern int debug ;
9     extern int lissage ;
10     extern GEST_MEM *gest ;
11     int m3d_recons(FACE **tab_front,int *tab_connec,int nb_tetra)
12     {
13     int i, iordre[10], nb, num_resu, tab[4], k, ind, hist ;
14     FACE *face, *fin, *courant ;
15     NOEUD *nresu ;
16     iordre[0] = OPTI ;
17     iordre[1] = ATTENTE ;
18    
19     nb = ind = 0 ;
20     face = tab_front[2*NUM_REST] ;
21     courant = face ;
22     if (courant!=NULL)
23     {
24     while (courant!=NULL)
25     {
26     courant->essai = OPTI ;
27     courant = courant->suivant ;
28     }
29     /* insertion en tete de liste OPTI */
30     fin = tab_front[2*NUM_REST+1] ;
31     fin->suivant = tab_front[2*OPTI] ;
32     /* double chainage */
33     if (tab_front[2*OPTI] != NULL) (tab_front[2*OPTI])->prec = fin ;
34     tab_front[2*OPTI] = face ;
35     if (tab_front[2*OPTI+1]==NULL) tab_front[2*OPTI+1] = fin ;
36     tab_front[2*NUM_REST] = NULL ;
37     tab_front[2*NUM_REST+1] = NULL ;
38     face = tab_front[2*OPTI] ;
39     }
40    
41     while (face!= NULL) /* tant que le front n'est pas vide */
42     {
43     /* recherche du noeud connectable */
44     nresu = NULL ;
45     for (i=0;i<nb_tetra;i++)
46     {
47     nb = 0 ;
48     if (tab_connec[4*i] != 123456789)
49     {
50     for (k=0;k<4;k++) tab[k] = VRAI ;
51     if (face->n1->num == tab_connec[4*i]) {
52     nb++ ;
53     tab[0] = FAUX ;
54     }
55     else if (face->n1->num == tab_connec[4*i+1]) {
56     nb++ ;
57     tab[1] = FAUX ;
58     }
59     else if (face->n1->num == tab_connec[4*i+2]) {
60     nb++ ;
61     tab[2] = FAUX ;
62     }
63     else if (face->n1->num == tab_connec[4*i+3]) {
64     nb++ ;
65     tab[3] = FAUX ;
66     }
67    
68     if (face->n2->num == tab_connec[4*i]) {
69     nb++ ;
70     tab[0] = FAUX ;
71     }
72     else if (face->n2->num == tab_connec[4*i+1]) {
73     nb++ ;
74     tab[1] = FAUX ;
75     }
76     else if (face->n2->num == tab_connec[4*i+2]) {
77     nb++ ;
78     tab[2] = FAUX ;
79     }
80     else if (face->n2->num == tab_connec[4*i+3]) {
81     nb++ ;
82     tab[3] = FAUX ;
83     }
84    
85     if (face->n3->num == tab_connec[4*i]) {
86     nb++ ;
87     tab[0] = FAUX ;
88     }
89     else if (face->n3->num == tab_connec[4*i+1]) {
90     nb++ ;
91     tab[1] = FAUX ;
92     }
93     else if (face->n3->num == tab_connec[4*i+2]) {
94     nb++ ;
95     tab[2] = FAUX ;
96     }
97     else if (face->n3->num == tab_connec[4*i+3]) {
98     nb++ ;
99     tab[3] = FAUX ;
100     }
101     if (nb == 3) break ;
102     }
103     }
104     if (nb!=3)
105     {
106     if (debug) printf("ERREUR SYSTEME M3D_RECONS \n") ;
107     m3d_erreur(ERR_FIN) ;
108     return(FAUX) ;
109     }
110     for (k=0;k<4;k++) if (tab[k] == VRAI) ind = k ;
111     num_resu = tab_connec[4*i+ind] ;
112     tab_connec[4*i] = 123456789 ;
113     ADRESSE(noeud,num_resu,nresu) /* noeud solution */
114     /* ***************************************************************** */
115     /* ----------------------------------------------------------------- */
116     /* MISE A JOUR DU FRONT */
117     /* ----------------------------------------------------------------- */
118     /* ***************************************************************** */
119     hist = ADJACENT ;
120     if (!m3d_update2(face,nresu,tab_front,&hist))
121     {
122     if (debug) printf("%s\n"," Erreur m3d_update M3D_RECHNOE ") ;
123     return(FAUX) ;
124     }
125     i = 0 ;
126     face = NULL ;
127     while (face==NULL)
128     {
129     switch (iordre[i])
130     {
131     case OPTI :
132     face = tab_front[2*OPTI] ;
133     break ;
134     case ATTENTE :
135     courant = tab_front[2*ATTENTE] ;
136     while (courant!=NULL)
137     {
138     courant->essai = OPTI ;
139     courant = courant->suivant ;
140     }
141     tab_front[2*OPTI] = tab_front[2*ATTENTE] ;
142     tab_front[2*OPTI+1] = tab_front[2*ATTENTE+1] ;
143     tab_front[2*ATTENTE] = NULL ;
144     tab_front[2*ATTENTE+1] = NULL ;
145     face = tab_front[2*OPTI] ;
146     break ;
147     }
148     i++ ;
149     if (i==3) return(VRAI) ;
150     }
151     }
152     return(VRAI) ;
153     }