ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/diamesh/src/m3d_front.cpp
Revision: 283
Committed: Tue Sep 13 21:11:20 2011 UTC (13 years, 8 months ago) by francois
File size: 4664 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 int debug ;
8     extern int recover ;
9     extern GEST_MEM *gest ;
10     void m3d_front(float *coord,FACE *face,FACE **tab_front,int type,int *ierr)
11     {
12     FACE *front, *fin ;
13     NOEUD *n1, *n2 , *n3 ;
14     char mess[255];
15     OBJET *obj, *tete_obj,*sobj ;
16     int num_essai ;
17    
18     n1 = face->n1 ;
19     n2 = face->n2 ;
20     n3 = face->n3 ;
21    
22     switch (type)
23     {
24     case KILL : /* destruction de l'objet */
25     /* face de peau aucun changement */
26     if (face->hist == 0)
27     {
28     face->nb_qua = 0 ;
29     return ;
30     }
31     /* faces actives connectees aux noeuds */
32     (n1->mark)-- ;
33     (n2->mark)-- ;
34     (n3->mark)-- ;
35     break ;
36    
37     case REMOVE : /* on enleve la face active du front et on gere la connectivite */
38     /* faces actives */
39     (n1->mark)-- ;
40     (n2->mark)-- ;
41     (n3->mark)-- ;
42     /* la face reste attachee au noeud */
43    
44     /* aucune face active */
45    
46     if (n1->mark == CARD_NULL) n1->mark = NO_CONNEC ;
47     if (n2->mark == CARD_NULL) n2->mark = NO_CONNEC ;
48     if (n3->mark == CARD_NULL) n3->mark = NO_CONNEC ;
49    
50     break ;
51     case RESTORE :
52     /* la face a ete absorbee : la cardinalite des noeuds a ete decrementee, il faut la restaurer */
53    
54     if (n1->mark == NO_CONNEC) n1->mark = 0;
55     if (n2->mark == NO_CONNEC) n2->mark = 0 ;
56     if (n3->mark == NO_CONNEC) n3->mark = 0 ;
57    
58     (n1->mark)++ ;
59     (n2->mark)++ ;
60     (n3->mark)++ ;
61     break ;
62     default:
63     break ;
64     }
65     num_essai = face->essai ;
66     front = tab_front[2*num_essai] ;
67     fin = tab_front[2*num_essai + 1] ;
68    
69     /* supression de la face et mise a jour du front */
70     /* on isole la face */
71    
72     if (face->mark!=KILLED)
73     switch (type)
74     {
75     case MOVE:
76     case REMOVE:
77     case KILL:
78     SUPPRIMER_LISTE(face,tab_front[2*num_essai],tab_front[2*num_essai+1],face)
79     break ;
80     default :
81     break ;
82     }
83     switch (type)
84     {
85     case KILL :
86     /* destruction de la face */
87     face->mark = DESTROYED ;
88     face->tetra1 = NULL ;
89     face->tetra2= NULL ;
90     face = NULL ;
91     return ;
92    
93     case REMOVE :
94     /* la face est absorbee par le front */
95     face->mark = KILLED ;
96     return ;
97    
98     case MOVE :
99     /* le recherche n'a pas abouti, on passe a l'essai suivant */
100     if ((recover) && (gest->nb_tetra < gest->nb_rec)) face->essai = NUM_LIMITE ;
101     else
102     {
103     if (face->essai==LAST)
104     {
105     face->essai = NUM_ERREUR ;
106     }
107     else
108     {
109     face->essai = (face->essai) + 1 ;
110     }
111     }
112     break ;
113    
114     case CREER :
115     face->essai = ATTENTE ;/* la face est mise en attente pour la couche suivante */
116     break ;
117    
118     case CREER_GEN :
119     /* face issue d'une creation par generation, on cherche a les connecter le plus vite possible */
120     face->essai = NUM_GENE ;
121     break ;
122     case CREER_FACE_GEN :
123     /* face issue d'une creation par generation, on cherche a les connecter le plus vite possible */
124     face->essai = NUM_FACE_GEN ;
125     break ;
126     case RESTORE : /* face restauree */
127     face->essai = NUM_REST ;
128     face->mark = FAUX ;
129     if ( (face->hist!=0) && (face->hist!=FACE_GENEREE))
130     {
131     face->hist = BACK ;
132     }
133     if (face->hist!=0)
134     if ((face->tetra1==NULL) && (face->tetra2==NULL))
135     {
136     if (debug)
137     {
138     sprintf(mess,"%s\n"," Incoherence, face restauree libre (RESTORE) M3D_FRONT") ;
139     //aff_text(mess);
140     }
141     *ierr = VRAI ;
142     m3d_erreur(ERR_SYST) ;
143     return ;
144     }
145     break ;
146     default :
147     break ;
148     }
149     num_essai = face->essai ;
150     front = tab_front[2*num_essai] ;
151     fin = tab_front[2*num_essai + 1] ;
152    
153     switch (type)
154     {
155     /* insertion en queue */
156     case CREER :
157     case MOVE :
158     case CREER_GEN :
159     case CREER_FACE_GEN :
160     INSERER_FIN_LISTE(tab_front[2*num_essai],tab_front[2*num_essai + 1],face)
161     break ;
162    
163     case RESTORE :/* faces restaurees */
164     /* Insertion en tete de liste */
165     INSERER_TETE_LISTE(tab_front[2*num_essai],tab_front[2*num_essai + 1],face)
166     break ;
167     default :
168     *ierr = VRAI ;
169     m3d_erreur(ERR_SYST) ;
170     return ;
171     }
172     return ;
173     }