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

File Contents

# User Rev Content
1 francois 283 #include <stdio.h>
2     #include "r3d_struct.h"
3     #include "m3d_const.h"
4     #include "m3d_hotes.h"
5     #include "prototype2.h"
6     extern int debug ;
7     extern GEST_MEM *gest_r ;
8     void r3d_front(float *coord,FACE *face,FACE **tab_front,int type,int *ierr)
9     {
10     FACE *front, *fin ;
11     NOEUD *n1, *n2 , *n3 ;
12     int num_essai ;
13    
14     n1 = face->n1 ;
15     n2 = face->n2 ;
16     n3 = face->n3 ;
17    
18     switch (type)
19     {
20     case KILL :
21     /* face de peau aucun changement */
22     if (face->hist == 0)
23     {
24     face->nb_qua = 0 ;
25     return ;
26     }
27     /* faces actives connectees aux noeuds */
28     (n1->mark)-- ;
29     (n2->mark)-- ;
30     (n3->mark)-- ;
31     break ;
32    
33     case REMOVE : /* on enleve la face active du front et on gere la connectivite */
34     /* faces actives */
35     (n1->mark)-- ;
36     (n2->mark)-- ;
37     (n3->mark)-- ;
38     /* la face reste attachee au noeud */
39    
40     /* aucune face active */
41    
42     if (n1->mark == CARD_NULL) n1->mark = NO_CONNEC ;
43     if (n2->mark == CARD_NULL) n2->mark = NO_CONNEC ;
44     if (n3->mark == CARD_NULL) n3->mark = NO_CONNEC ;
45    
46     break ;
47     case RESTORE :
48     /* la face a ete absorbee : la cardinalite des noeuds a ete decrementee, il faut la restaurer */
49    
50     if (n1->mark == NO_CONNEC) n1->mark = 0;
51     if (n2->mark == NO_CONNEC) n2->mark = 0 ;
52     if (n3->mark == NO_CONNEC) n3->mark = 0 ;
53    
54     (n1->mark)++ ;
55     (n2->mark)++ ;
56     (n3->mark)++ ;
57     (face->tab).val0 = 0 ;
58     (face->tab).val1 = 0 ;
59     (face->tab).val2 = 0 ;
60     (face->tab).val3 = 0 ;
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 (face->essai==LAST)
101     {
102     if (debug) printf("%s\n"," DERNIER ESSAI") ;
103     face->essai = NUM_ERREUR ;
104     }
105     else
106     {
107     face->essai = (face->essai) + 1 ;
108     }
109     break ;
110    
111     case CREER :
112     face->essai = ATTENTE ;/* la face est mise en attente pour la couche suivante */
113     break ;
114    
115     case CREER_GEN :
116     /* face issue d'une creation par generation, on cherche a les connecter le plus vite possible */
117     face->essai = NUM_GENE ;
118     break ;
119     case CREER_FACE_GEN :
120     /* face issue d'une creation par generation, on cherche a les connecter le plus vite possible */
121     face->essai = NUM_FACE_GEN ;
122     break ;
123     case RESTORE : /* face restauree */
124     face->essai = NUM_REST ;
125     face->mark = FAUX ;
126     if ( (face->hist!=0) && (face->hist!=FACE_GENEREE))
127     {
128     face->hist = BACK ;
129     }
130     break ;
131     default :
132     break ;
133     }
134     num_essai = face->essai ;
135     front = tab_front[2*num_essai] ;
136     fin = tab_front[2*num_essai + 1] ;
137    
138     switch (type)
139     {
140     /* insertion en queue */
141     case CREER :
142     case MOVE :
143     case CREER_GEN :
144     case CREER_FACE_GEN :
145     INSERER_FIN_LISTE(tab_front[2*num_essai],tab_front[2*num_essai + 1],face)
146     break ;
147    
148     case RESTORE :/* faces restaurees */
149     /* Insertion en tete de liste */
150     INSERER_TETE_LISTE(tab_front[2*num_essai],tab_front[2*num_essai + 1],face)
151     break ;
152     default :
153     *ierr = VRAI ;
154     if (debug) printf("%s\n"," Erreur type de traitement M3D_FRONT ") ;
155     }
156     return ;
157     }