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

File Contents

# Content
1 /*****************************************************************
2
3 r3d_c_octree.c Type:Func
4
5 application de l octree
6
7 Date de creation : Tue Jul 15 10:42:27 1997
8
9 Derniere version : Fri Aug 1 11:07:00 1997
10
11
12
13
14
15
16
17
18
19 Vincent FRANCOIS
20
21 *****************************************************************/
22
23
24
25
26
27 /**************************/
28 /* include */
29 #include <stdio.h>
30 #include <string.h>
31 #include <stdlib.h>
32 #include "const.h"
33 #include "memoire.h"
34 #include "struct.h"
35 #include "prototype.h"
36
37 /**************************/
38 /* variables globales */
39 extern struct environnement env;
40 extern struct s_mesh *mesh;
41 extern struct s_maillage *maillage;
42 extern struct s_acis *acis;
43
44 /**************************/
45 /* programme principal */
46
47 void r3d_c_octree(void)
48 {
49 char type[255],mess[255],path[255],c,message[255];
50 int nb_oct,i;
51 int n1,n2,n3,n4,n5,n6,n7,n8,num;
52 FILE *out;
53 struct s_mnoeud *mno;
54 struct s_octree *oct;
55 struct s_msegment *mse;
56 struct s_mtriangle *mtr;
57 struct s_mtetra *mte;
58 struct s_cone *cone;
59 struct s_face *face;
60 struct s_plane *plane;
61 struct s_edge *edge;
62 struct s_straight *straight;
63 struct s_ellipse *ellipse;
64
65 aff_text(R3D_C_OC);
66 r3d_file(mess);
67 n1=sscanf(mess,"%f %f %d %d",&env.epsilon,&env.dens,&env.relatif,&nb_oct);
68 for (i=0;i<nb_oct;i++)
69 {
70 NEW_ENTITE(oct,octree,mesh->);
71 oct->num=mesh->nb_octree-1;
72 }
73 mesh->first=ADRESSE(0,octree,mesh->);
74 for (i=0;i<mesh->nb_octree;i++)
75 {
76 oct=ADRESSE(i,octree,mesh->);
77 r3d_file(mess);
78 sscanf(mess,"%c %d %d %f %f %f %f",&c,&oct->num,&oct->feuille,&oct->x,&oct->y,&oct->z,&oct->taille);
79 if (oct->feuille!=1)
80 {
81 r3d_file(mess);
82 sscanf(mess,"%d %d %d %d %d %d %d %d",&n1,&n2,&n3,&n4,&n5,&n6,&n7,&n8);
83 oct->fils[0]=ADRESSE(n1,octree,mesh->);
84 oct->fils[1]=ADRESSE(n2,octree,mesh->);
85 oct->fils[2]=ADRESSE(n3,octree,mesh->);
86 oct->fils[3]=ADRESSE(n4,octree,mesh->);
87 oct->fils[4]=ADRESSE(n5,octree,mesh->);
88 oct->fils[5]=ADRESSE(n6,octree,mesh->);
89 oct->fils[6]=ADRESSE(n7,octree,mesh->);
90 oct->fils[7]=ADRESSE(n8,octree,mesh->);
91 }
92 else mesh->nb_feuille++;
93 }
94 sprintf(message,R3D_C_OC_RE,mesh->nb_octree);
95 aff_text(message);
96 sprintf(message,R3D_C_OC_FE,mesh->nb_feuille);
97 aff_text(message);
98 aff_text(R3D_C_OC_ME);
99 strcpy(path,env.fich2);
100 path[strlen(path)-4]=0;
101 strcat(path,"_3D.mai");
102 out=fopen(path,"rt");
103 if (out==NULL)
104 {
105 aff_text(R3D_C_OC_WA1);
106 env.d3=0;
107 }
108 else
109 {
110 env.d3=1;
111 fgets(mess,255,out);
112 sscanf(mess,"%d %d",&n1,&n2);
113 for (i=0;i<n1;i++)
114 {
115 fgets(mess,255,out);
116 NEW_ENTITE(mno,mnoeud,maillage->);
117 mno->num=maillage->nb_mnoeud-1;
118 sscanf(mess,"%d %f %f %f",&n8,&(mno->x),&(mno->y),&(mno->z));
119 mno->etat=GARDE;
120 mno->nv_num=(-1);
121 }
122 for (i=0;i<n2;i++)
123 {
124 fgets(mess,255,out);
125 NEW_ENTITE(mte,mtetra,maillage->);
126 mte->num=maillage->nb_mtetra-1;
127 sscanf(mess,"%d %d %d %d %d",&n8,&n3,&n4,&n5,&n6);
128 mte->n1=n3-1;
129 mte->n2=n4-1;
130 mte->n3=n5-1;
131 mte->n4=n6-1;
132 mno=ADRESSE(mte->n1,mnoeud,maillage->);
133 NEW_POINTEUR(num,mtetra,mno->);
134 mno->mtetra[num]=mte;
135 mno=ADRESSE(mte->n2,mnoeud,maillage->);
136 NEW_POINTEUR(num,mtetra,mno->);
137 mno->mtetra[num]=mte;
138 mno=ADRESSE(mte->n3,mnoeud,maillage->);
139 NEW_POINTEUR(num,mtetra,mno->);
140 mno->mtetra[num]=mte;
141 mno=ADRESSE(mte->n4,mnoeud,maillage->);
142 NEW_POINTEUR(num,mtetra,mno->);
143 mno->mtetra[num]=mte;
144 }
145 fclose(out);
146 }
147 strcpy(path,env.fich2);
148 path[strlen(path)-4]=0;
149 strcat(path,"_2D.mai");
150 out=fopen(path,"rt");
151 if (out==NULL)
152 {
153 aff_text(R3D_C_OC_WA2);
154 abort();
155 }
156 fgets(mess,255,out);
157 sscanf(mess,"%d %d",&n1,&n2);
158 for (i=0;i<n1;i++)
159 {
160 fgets(mess,255,out);
161 if (maillage->nb_mnoeud==i)
162 {
163 NEW_ENTITE(mno,mnoeud,maillage->);
164 mno->num=maillage->nb_mnoeud-1;
165 }
166 else mno=ADRESSE(i,mnoeud,maillage->);
167 sscanf(mess,"%d %f %f %f %s %d",&n8,&(mno->x),&(mno->y),&(mno->z),type,&(mno->num_ent));
168 mno->etat=GARDE;
169 mno->nv_num=(-1);
170 if (strcmp(type,"vertex")==0) mno->type=VERTEX;
171 if (strcmp(type,"edge")==0) mno->type=EDGE;
172 if (strcmp(type,"face")==0) mno->type=FACE;
173 }
174 for (i=0;i<n2;i++)
175 {
176 fgets(mess,255,out);
177 NEW_ENTITE(mtr,mtriangle,maillage->);
178 mtr->num=maillage->nb_mtriangle-1;
179 sscanf(mess,"%d %d %d %d %s %d",&n8,&n3,&n4,&n5,type,&n6);
180 mtr->type=FACE;
181 mtr->num_ent=n6;
182 mtr->n1=n3-1;
183 mtr->n2=n4-1;
184 mtr->n3=n5-1;
185 mno=ADRESSE(mtr->n1,mnoeud,maillage->);
186 NEW_POINTEUR(num,mtriangle,mno->);
187 mno->mtriangle[num]=mtr;
188 mno=ADRESSE(mtr->n2,mnoeud,maillage->);
189 NEW_POINTEUR(num,mtriangle,mno->);
190 mno->mtriangle[num]=mtr;
191 mno=ADRESSE(mtr->n3,mnoeud,maillage->);
192 NEW_POINTEUR(num,mtriangle,mno->);
193 mno->mtriangle[num]=mtr;
194 }
195 fclose(out);
196 strcpy(path,env.fich2);
197 path[strlen(path)-4]=0;
198 strcat(path,"_1D.mai");
199 out=fopen(path,"rt");
200 if (out==NULL)
201 {
202 aff_text(R3D_C_OC_WA3);
203 abort();
204 }
205 fgets(mess,255,out);
206 sscanf(mess,"%d %d",&n1,&n2);
207 for (i=0;i<n1;i++)
208 fgets(mess,255,out);
209 for (i=0;i<n2;i++)
210 {
211 fgets(mess,255,out);
212 NEW_ENTITE(mse,msegment,maillage->);
213 mse->num=maillage->nb_msegment-1;
214 sscanf(mess,"%d %d %d",&n8,&n3,&n4);
215 mse->n1=n3-1;
216 mse->n2=n4-1;
217 }
218 fclose(out);
219 sprintf(message,R3D_C_OC_RES1,maillage->nb_mnoeud);
220 aff_text(message);
221 sprintf(message,R3D_C_OC_RES2,maillage->nb_msegment);
222 aff_text(message);
223 sprintf(message,R3D_C_OC_RES3,maillage->nb_mtriangle);
224 aff_text(message);
225 sprintf(message,R3D_C_OC_RES4,maillage->nb_mtetra);
226 aff_text(message);
227
228
229 /* remplissage de l arbre */
230
231 for (i=0;i<acis->nb_vertex;i++)
232 oc_ins_obj(VERTEX,i,mesh->first);
233 for (i=0;i<acis->nb_edge;i++)
234 {
235 edge=ADRESSE(i,edge,acis->);
236 if (strcmp(acis->type_entite[edge->curve],"straight-curve")==0)
237 {
238 straight=(struct s_straight *)acis->entity[edge->curve];
239 m1d_param_straight(edge,straight);
240 }
241 if (strcmp(acis->type_entite[edge->curve],"ellipse-curve")==0)
242 {
243 ellipse=(struct s_ellipse *)acis->entity[edge->curve];
244 m1d_param_ellipse(edge,ellipse);
245 }
246 oc_ins_obj(EDGE,i,mesh->first);
247 }
248 for (i=0;i<acis->nb_face;i++)
249 {
250 face=ADRESSE(i,face,acis->);
251 if (strcmp(acis->type_entite[face->surface],"cone-surface")==0)
252 {
253 cone=(struct s_cone *)acis->entity[face->surface];
254 m2d_param_cone(face,cone);
255 }
256 if (strcmp(acis->type_entite[face->surface],"plane-surface")==0)
257 {
258 plane=(struct s_plane *)acis->entity[face->surface];
259 m2d_param_plane(face,plane);
260 }
261 oc_ins_obj(FACE,i,mesh->first);
262 }
263 for (i=0;i<maillage->nb_mnoeud;i++)
264 oc_ins_obj(MNOEUD,i,mesh->first);
265 for (i=0;i<maillage->nb_msegment;i++)
266 oc_ins_obj(MSEGMENT,i,mesh->first);
267 for (i=0;i<maillage->nb_mtriangle;i++)
268 oc_ins_obj(MTRIANGLE,i,mesh->first);
269 for (i=0;i<maillage->nb_mtetra;i++)
270 oc_ins_obj(MTETRA,i,mesh->first);
271 /* pour visu geometrie */
272 m1d_geo();
273 }