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

File Contents

# User Rev Content
1 5 #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:break ;
63     }
64     num_essai = face->essai ;
65     front = tab_front[2*num_essai] ;
66     fin = tab_front[2*num_essai + 1] ;
67    
68     /* supression de la face et mise a jour du front */
69     /* on isole la face */
70    
71     if (face->mark!=KILLED)
72     switch(type)
73     {
74     case MOVE:case REMOVE:case KILL:
75     SUPPRIMER_LISTE(face,tab_front[2*num_essai],tab_front[2*num_essai+1],face)
76     break ;
77     default :break ;
78     }
79     switch(type)
80     {
81     case KILL :
82     /* destruction de la face */
83     face->mark = DESTROYED ;
84     face->tetra1 = NULL ;
85     face->tetra2= NULL ;
86     face = NULL ;
87     return ;
88    
89     case REMOVE :
90     /* la face est absorbee par le front */
91     face->mark = KILLED ;
92     return ;
93    
94     case MOVE :
95     /* le recherche n'a pas abouti, on passe a l'essai suivant */
96     if (face->essai==LAST)
97     {
98     if (debug) printf("%s\n"," DERNIER ESSAI") ;
99     face->essai = NUM_ERREUR ;
100     }
101     else
102     {
103     face->essai = (face->essai) + 1 ;
104     }
105     break ;
106    
107     case CREER :
108     face->essai = ATTENTE ;/* la face est mise en attente pour la couche suivante */
109     break ;
110    
111     case CREER_GEN :
112     /* face issue d'une creation par generation, on cherche a les connecter le plus vite possible */
113     face->essai = NUM_GENE ;
114     break ;
115     case CREER_FACE_GEN :
116     /* face issue d'une creation par generation, on cherche a les connecter le plus vite possible */
117     face->essai = NUM_FACE_GEN ;
118     break ;
119     case RESTORE : /* face restauree */
120     face->essai = NUM_REST ;
121     face->mark = FAUX ;
122     if ( (face->hist!=0) && (face->hist!=FACE_GENEREE))
123     {
124     face->hist = BACK ;
125     }
126     break ;
127     default : break ;
128     }
129     num_essai = face->essai ;
130     front = tab_front[2*num_essai] ;
131     fin = tab_front[2*num_essai + 1] ;
132    
133     switch(type)
134     {
135     /* insertion en queue */
136     case CREER : case MOVE : case CREER_GEN : case CREER_FACE_GEN :
137     INSERER_FIN_LISTE(tab_front[2*num_essai],tab_front[2*num_essai + 1],face)
138     break ;
139    
140     case RESTORE :/* faces restaurees */
141     /* Insertion en tete de liste */
142     INSERER_TETE_LISTE(tab_front[2*num_essai],tab_front[2*num_essai + 1],face)
143     break ;
144     default :
145     *ierr = VRAI ;
146     if (debug) printf("%s\n"," Erreur type de traitement M3D_FRONT ") ;
147     }
148     return ;
149     }