ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/acismesh/m3d_update_front.cpp
Revision: 1
Committed: Mon Jun 11 22:53:07 2007 UTC (17 years, 11 months ago)
File size: 7660 byte(s)
Log Message:

File Contents

# Content
1 /*****************************************************************
2
3 m3d_update_front.cpp Type:Func
4
5 Mise a jour du front 3D
6
7 Date de creation : 12-3-1999 15 :42 :58
8 Derniere version : 12-3-1999 15 :42 :58
9
10 Vincent FRANCOIS
11
12 *****************************************************************/
13
14
15
16
17
18 /**************************/
19 /* include */
20 #include <stdio.h>
21 #include <string.h>
22 #include <stdlib.h>
23 #include "memoire.h"
24 #include "struct.h"
25 #include "struct3d.h"
26 #include "const.h"
27 #include "prototype.h"
28
29 /**************************/
30 /* variables globales */
31 extern struct s_mesh *mesh;
32 extern struct environnement env;
33
34
35
36 /**************************/
37 /* programme principal */
38
39 void m3d_update_front(struct s_front3d **ft,struct s_front3d *ftbase,struct s_tetra *tet,int type)
40 {
41 struct s_front3d *ftn;
42 struct s_noeud *no1,*no2,*no3;
43 int j,k;
44 float angle;
45 int pass1,pass2,pass3;
46 char mess[255];
47
48 switch (type)
49 {
50 case NEW0:
51 case NEW1:
52 case NEW2:
53 case NEW3:
54 m3d_ac_front(&ftn,NEW);
55 if (type==NEW0)
56 {
57 ftn->n1=tet->n1;
58 ftn->n2=tet->n3;
59 ftn->n3=tet->n2;
60 ftn->tri=tet->triangle[0];
61 }
62 if (type==NEW1)
63 {
64 ftn->n1=tet->n1;
65 ftn->n2=tet->n2;
66 ftn->n3=tet->n4;
67 ftn->tri=tet->triangle[1];
68 }
69 if (type==NEW2)
70 {
71 ftn->n1=tet->n2;
72 ftn->n2=tet->n3;
73 ftn->n3=tet->n4;
74 ftn->tri=tet->triangle[2];
75 }
76 if (type==NEW3)
77 {
78 ftn->n1=tet->n1;
79 ftn->n2=tet->n4;
80 ftn->n3=tet->n3;
81 ftn->tri=tet->triangle[3];
82 }
83
84 ftn->tri->front=ftn->tri->front+1;
85 ftn->tri->ft=ftn;
86 *ft=ftn;
87 m3d_ord_front(*ft,ATTENTE);
88 oc_ins_obj(FRONT3D,ftn->num,mesh->first);
89 break;
90 case LIAISON: no1=ADRESSE((*ft)->n1,noeud,mesh->);
91 no2=ADRESSE((*ft)->n2,noeud,mesh->);
92 no3=ADRESSE((*ft)->n3,noeud,mesh->);
93 pass1=0;
94 pass2=0;
95 pass3=0;
96 if ((ftbase==NULL)|| (((*ft)->voisin[0].ft)==ftbase))
97 {
98 for (j=0;j<no1->nb_triangle;j++)
99 for (k=0;k<no2->nb_triangle;k++)
100 if ((no1->triangle[j]==no2->triangle[k])&&(no1->triangle[j]!=((*ft)->tri))&&(no1->triangle[j]->front==1))
101 if (pass1==0)
102 {
103 pass1=1;
104 (*ft)->voisin[0].ft=no1->triangle[j]->ft;
105 (*ft)->voisin[0].angle=m3d_angle_front(*ft,(*ft)->voisin[0].ft);
106 }
107 else
108 {
109 angle=m3d_angle_front(*ft,no1->triangle[j]->ft);
110 if (angle<(*ft)->voisin[0].angle)
111 {
112 (*ft)->voisin[0].ft=no1->triangle[j]->ft;
113 (*ft)->voisin[0].angle=angle;
114 }
115 }
116 }
117 else pass1=1;
118 if ((ftbase==NULL)|| (((*ft)->voisin[1].ft)==ftbase))
119 {
120 for (j=0;j<no1->nb_triangle;j++)
121 for (k=0;k<no3->nb_triangle;k++)
122 if ((no1->triangle[j]==no3->triangle[k])&&(no1->triangle[j]!=((*ft)->tri))&&(no1->triangle[j]->front==1))
123 if (pass2==0)
124 {
125 pass2=1;
126 (*ft)->voisin[1].ft=no1->triangle[j]->ft;
127 (*ft)->voisin[1].angle=m3d_angle_front(*ft,(*ft)->voisin[1].ft);
128 }
129 else
130 {
131 angle=m3d_angle_front(*ft,no1->triangle[j]->ft);
132 if (angle<(*ft)->voisin[1].angle)
133 {
134 (*ft)->voisin[1].ft=no1->triangle[j]->ft;
135 (*ft)->voisin[1].angle=angle;
136 }
137 }
138 }
139 else pass2=1;
140 if ((ftbase==NULL)|| (((*ft)->voisin[2].ft)==ftbase))
141 {
142 for (j=0;j<no2->nb_triangle;j++)
143 for (k=0;k<no3->nb_triangle;k++)
144 if ((no2->triangle[j]==no3->triangle[k])&&(no2->triangle[j]!=((*ft)->tri))&&(no2->triangle[j]->front==1))
145 if (pass3==0)
146 {
147 pass3=1;
148 (*ft)->voisin[2].ft=no2->triangle[j]->ft;
149 (*ft)->voisin[2].angle=m3d_angle_front(*ft,(*ft)->voisin[2].ft);
150 }
151 else
152 {
153 angle=m3d_angle_front(*ft,no2->triangle[j]->ft);
154 if (angle<(*ft)->voisin[2].angle)
155 {
156 (*ft)->voisin[2].ft=no2->triangle[j]->ft;
157 (*ft)->voisin[2].angle=angle;
158 }
159 }
160 }
161 else pass3=1;
162
163 if (pass1==0)
164 {
165 sprintf(mess,"Etape numero %d. Big problem : Pas de voisin 0",mesh->nb_tetra);
166 aff_text(mess);
167 }
168 if (pass2==0)
169 {
170 sprintf(mess,"Etape numero %d. Big problem : Pas de voisin 1",mesh->nb_tetra);
171 aff_text(mess);
172 }
173 if (pass3==0)
174 {
175 sprintf(mess,"Etape numero %d. Big problem : Pas de voisin 2",mesh->nb_tetra);
176 aff_text(mess);
177 }
178 break;
179
180 }
181
182
183 }