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

File Contents

# Content
1 /*****************************************************************
2
3 oc_ins_obj.c Type:Func
4
5 Insertion d un objet dans l octree
6
7 Date de creation : Wed Jun 25 09:29:44 1997
8
9 Derniere version : Wed Jul 16 11:06:09 1997
10
11
12
13
14
15
16 Vincent FRANCOIS
17
18 *****************************************************************/
19
20
21
22
23
24 /**************************/
25 /* include */
26 #include <stdio.h>
27 #include <string.h>
28 #include "const.h"
29 #include "memoire.h"
30 #include "struct.h"
31 #include "prototype.h"
32
33 /**************************/
34 /* variables globales */
35 extern struct s_acis *acis;
36 extern struct environnement env;
37 extern struct s_mesh *mesh;
38 extern struct s_param *para;
39 extern struct s_maillage *maillage;
40
41
42 /**************************/
43 /* programme principal */
44
45 void oc_ins_obj(int type,int num,struct s_octree *octree)
46 {
47
48 struct s_vertex *vertex1,*vertex;
49 struct s_point *point;
50 struct s_straight *straight;
51 struct s_ellipse *ellipse;
52 struct s_edge *edge;
53 struct s_coedge *coedge;
54 struct s_loop *loop;
55 struct s_cone *cone;
56 struct s_face *face;
57 struct s_noeud *no,*no1,*no2,*no3,*no4;
58 struct s_triangle *tri;
59 struct s_tetra *tet;
60 struct s_mnoeud *mno,*mno1,*mno2,*mno3,*mno4;
61 struct s_mtriangle *mtri;
62 struct s_mtetra *mtet;
63 struct s_msegment *mseg;
64 struct s_frontiere3d *fr;
65 struct s_front3d *ft;
66 float bxmin,bymin,bzmin;
67 float bxmax,bymax,bzmax;
68 void *entite;
69
70 if (type==VERTEX)
71 {
72 vertex=ADRESSE(num,vertex,acis->);
73 point=vertex->point;
74 type=POINT;
75 entite=(void *)vertex;
76 }
77
78
79 if (type==EDGE)
80 {
81 edge=ADRESSE(num,edge,acis->);
82 if (strcmp(acis->type_entite[edge->curve],"straight-curve")==0)
83 {
84 straight=(struct s_straight *)acis->entity[edge->curve];
85 type=STRAIGHT;
86 }
87 if (strcmp(acis->type_entite[edge->curve],"ellipse-curve")==0)
88 {
89 ellipse=(struct s_ellipse *)acis->entity[edge->curve];
90 type=ELLIPSE;
91 }
92 entite=(void *)edge;
93 }
94
95 if (type==FACE)
96 {
97 face=ADRESSE(num,face,acis->);
98 if (strcmp(acis->type_entite[face->surface],"cone-surface")==0)
99 {
100 cone=(struct s_cone *)acis->entity[face->surface];
101 type=CONE;
102 }
103 if (strcmp(acis->type_entite[face->surface],"plane-surface")==0)
104 {
105 type=PLANE;
106 }
107 entite=(void *)face;
108 }
109
110 if (type==POINT)
111 {
112 bxmin=point->coord[0];
113 bymin=point->coord[1];
114 bzmin=point->coord[2];
115 bxmax=point->coord[0];
116 bymax=point->coord[1];
117 bzmax=point->coord[2];
118 }
119 if (type==STRAIGHT)
120 {
121 vertex1=edge->start_vertex;
122 bxmin=vertex1->point->coord[0];
123 bymin=vertex1->point->coord[1];
124 bzmin=vertex1->point->coord[2];
125 bxmax=vertex1->point->coord[0];
126 bymax=vertex1->point->coord[1];
127 bzmax=vertex1->point->coord[2];
128 oc_boite_straight(edge,straight,&bxmin,&bymin,&bzmin,&bxmax,&bymax,&bzmax);
129 }
130 if (type==ELLIPSE)
131 {
132 vertex1=edge->start_vertex;
133 bxmin=vertex1->point->coord[0];
134 bymin=vertex1->point->coord[1];
135 bzmin=vertex1->point->coord[2];
136 bxmax=vertex1->point->coord[0];
137 bymax=vertex1->point->coord[1];
138 bzmax=vertex1->point->coord[2];
139 oc_boite_ellipse(edge,ellipse,&bxmin,&bymin,&bzmin,&bxmax,&bymax,&bzmax);
140 }
141 if (type==CONE)
142 {
143 bxmin=cone->center[0];
144 bymin=cone->center[1];
145 bzmin=cone->center[2];
146 bxmax=cone->center[0];
147 bymax=cone->center[1];
148 bzmax=cone->center[2];
149 for (loop=face->first_loop;loop!=NULL;loop=loop->next_loop)
150 {
151 coedge=loop->first_coedge;
152 do
153 {
154 edge=coedge->edge;
155 if (strcmp(acis->type_entite[edge->curve],"straight-curve")==0)
156 {
157 straight=(struct s_straight *)acis->entity[edge->curve];
158 oc_boite_straight(edge,straight,&bxmin,&bymin,&bzmin,&bxmax,&bymax,&bzmax);
159 }
160 if (strcmp(acis->type_entite[edge->curve],"ellipse-curve")==0)
161 {
162 ellipse=(struct s_ellipse *)acis->entity[edge->curve];
163 oc_boite_ellipse(edge,ellipse,&bxmin,&bymin,&bzmin,&bxmax,&bymax,&bzmax);
164 }
165 coedge=coedge->next_coedge;
166 }
167 while (coedge!=loop->first_coedge);
168 }
169 }
170 if (type==PLANE)
171 {
172 bxmin=face->first_loop->first_coedge->edge->start_vertex->point->coord[0];
173 bymin=face->first_loop->first_coedge->edge->start_vertex->point->coord[1];
174 bzmin=face->first_loop->first_coedge->edge->start_vertex->point->coord[2];
175 bxmax=face->first_loop->first_coedge->edge->start_vertex->point->coord[0];
176 bymax=face->first_loop->first_coedge->edge->start_vertex->point->coord[1];
177 bzmax=face->first_loop->first_coedge->edge->start_vertex->point->coord[2];
178 for (loop=face->first_loop;loop!=NULL;loop=loop->next_loop)
179 {
180 coedge=loop->first_coedge;
181 do
182 {
183 edge=coedge->edge;
184 if (strcmp(acis->type_entite[edge->curve],"straight-curve")==0)
185 {
186 straight=(struct s_straight *)acis->entity[edge->curve];
187 oc_boite_straight(edge,straight,&bxmin,&bymin,&bzmin,&bxmax,&bymax,&bzmax);
188 }
189 if (strcmp(acis->type_entite[edge->curve],"ellipse-curve")==0)
190 {
191 ellipse=(struct s_ellipse *)acis->entity[edge->curve];
192 oc_boite_ellipse(edge,ellipse,&bxmin,&bymin,&bzmin,&bxmax,&bymax,&bzmax);
193 }
194 coedge=coedge->next_coedge;
195 }
196 while (coedge!=loop->first_coedge);
197 }
198
199 }
200
201 if (type==NOEUD)
202 {
203 no=ADRESSE(num,noeud,mesh->);
204 entite=(void *)no;
205 bxmin=no->x;
206 bymin=no->y;
207 bzmin=no->z;
208 bxmax=no->x;
209 bymax=no->y;
210 bzmax=no->z;
211 }
212 if (type==TRIANGLE)
213 {
214 tri=ADRESSE(num,triangle,mesh->);
215 entite=(void *)tri;
216 no1=ADRESSE(tri->n1,noeud,mesh->);
217 no2=ADRESSE(tri->n2,noeud,mesh->);
218 no3=ADRESSE(tri->n3,noeud,mesh->);
219 MINI(bxmin,no1->x,no2->x);
220 MINI(bymin,no1->y,no2->y);
221 MINI(bzmin,no1->z,no2->z);
222 MAXI(bxmax,no1->x,no2->x);
223 MAXI(bymax,no1->y,no2->y);
224 MAXI(bzmax,no1->z,no2->z);
225 MINI(bxmin,bxmin,no3->x);
226 MINI(bymin,bymin,no3->y);
227 MINI(bzmin,bzmin,no3->z);
228 MAXI(bxmax,bxmax,no3->x);
229 MAXI(bymax,bymax,no3->y);
230 MAXI(bzmax,bzmax,no3->z);
231 }
232 if (type==FRONTIERE3D)
233 {
234 fr=ADRESSE(num,frontiere3d,mesh->);
235 entite=(void *)fr;
236 no1=fr->no1;
237 no2=fr->no2;
238 no3=fr->no3;
239 MINI(bxmin,no1->x,no2->x);
240 MINI(bymin,no1->y,no2->y);
241 MINI(bzmin,no1->z,no2->z);
242 MAXI(bxmax,no1->x,no2->x);
243 MAXI(bymax,no1->y,no2->y);
244 MAXI(bzmax,no1->z,no2->z);
245 MINI(bxmin,bxmin,no3->x);
246 MINI(bymin,bymin,no3->y);
247 MINI(bzmin,bzmin,no3->z);
248 MAXI(bxmax,bxmax,no3->x);
249 MAXI(bymax,bymax,no3->y);
250 MAXI(bzmax,bzmax,no3->z);
251 }
252 if (type==FRONT3D)
253 {
254 ft=ADRESSE(num,front3d,mesh->);
255 entite=(void *)ft;
256 no1=ADRESSE(ft->n1,noeud,mesh->);
257 no2=ADRESSE(ft->n2,noeud,mesh->);
258 no3=ADRESSE(ft->n3,noeud,mesh->);
259 MINI(bxmin,no1->x,no2->x);
260 MINI(bymin,no1->y,no2->y);
261 MINI(bzmin,no1->z,no2->z);
262 MAXI(bxmax,no1->x,no2->x);
263 MAXI(bymax,no1->y,no2->y);
264 MAXI(bzmax,no1->z,no2->z);
265 MINI(bxmin,bxmin,no3->x);
266 MINI(bymin,bymin,no3->y);
267 MINI(bzmin,bzmin,no3->z);
268 MAXI(bxmax,bxmax,no3->x);
269 MAXI(bymax,bymax,no3->y);
270 MAXI(bzmax,bzmax,no3->z);
271 }
272 if (type==TETRA)
273 {
274 tet=ADRESSE(num,tetra,mesh->);
275 entite=(void *)tet;
276 no1=ADRESSE(tet->n1,noeud,mesh->);
277 no2=ADRESSE(tet->n2,noeud,mesh->);
278 no3=ADRESSE(tet->n3,noeud,mesh->);
279 no4=ADRESSE(tet->n4,noeud,mesh->);
280 MINI(bxmin,no1->x,no2->x);
281 MINI(bymin,no1->y,no2->y);
282 MINI(bzmin,no1->z,no2->z);
283 MAXI(bxmax,no1->x,no2->x);
284 MAXI(bymax,no1->y,no2->y);
285 MAXI(bzmax,no1->z,no2->z);
286 MINI(bxmin,bxmin,no3->x);
287 MINI(bymin,bymin,no3->y);
288 MINI(bzmin,bzmin,no3->z);
289 MAXI(bxmax,bxmax,no3->x);
290 MAXI(bymax,bymax,no3->y);
291 MAXI(bzmax,bzmax,no3->z);
292 MINI(bxmin,bxmin,no4->x);
293 MINI(bymin,bymin,no4->y);
294 MINI(bzmin,bzmin,no4->z);
295 MAXI(bxmax,bxmax,no4->x);
296 MAXI(bymax,bymax,no4->y);
297 MAXI(bzmax,bzmax,no4->z);
298 }
299
300 if (type==MNOEUD)
301 {
302 mno=ADRESSE(num,mnoeud,maillage->);
303 entite=(void *)mno;
304 bxmin=mno->x;
305 bymin=mno->y;
306 bzmin=mno->z;
307 bxmax=mno->x;
308 bymax=mno->y;
309 bzmax=mno->z;
310 }
311 if (type==MSEGMENT)
312 {
313 mseg=ADRESSE(num,msegment,maillage->);
314 entite=(void *)mseg;
315 mno1=ADRESSE(mseg->n1,mnoeud,maillage->);
316 mno2=ADRESSE(mseg->n2,mnoeud,maillage->);
317 MINI(bxmin,mno1->x,mno2->x);
318 MINI(bymin,mno1->y,mno2->y);
319 MINI(bzmin,mno1->z,mno2->z);
320 MAXI(bxmax,mno1->x,mno2->x);
321 MAXI(bymax,mno1->y,mno2->y);
322 MAXI(bzmax,mno1->z,mno2->z);
323 }
324 if (type==MTRIANGLE)
325 {
326 mtri=ADRESSE(num,mtriangle,maillage->);
327 entite=(void *)mtri;
328 mno1=ADRESSE(mtri->n1,mnoeud,maillage->);
329 mno2=ADRESSE(mtri->n2,mnoeud,maillage->);
330 mno3=ADRESSE(mtri->n3,mnoeud,maillage->);
331 MINI(bxmin,mno1->x,mno2->x);
332 MINI(bymin,mno1->y,mno2->y);
333 MINI(bzmin,mno1->z,mno2->z);
334 MAXI(bxmax,mno1->x,mno2->x);
335 MAXI(bymax,mno1->y,mno2->y);
336 MAXI(bzmax,mno1->z,mno2->z);
337 MINI(bxmin,bxmin,mno3->x);
338 MINI(bymin,bymin,mno3->y);
339 MINI(bzmin,bzmin,mno3->z);
340 MAXI(bxmax,bxmax,mno3->x);
341 MAXI(bymax,bymax,mno3->y);
342 MAXI(bzmax,bzmax,mno3->z);
343 }
344 if (type==MTETRA)
345 {
346 mtet=ADRESSE(num,mtetra,maillage->);
347 entite=(void *)mtet;
348 mno1=ADRESSE(mtet->n1,mnoeud,maillage->);
349 mno2=ADRESSE(mtet->n2,mnoeud,maillage->);
350 mno3=ADRESSE(mtet->n3,mnoeud,maillage->);
351 mno4=ADRESSE(mtet->n4,mnoeud,maillage->);
352 MINI(bxmin,mno1->x,mno2->x);
353 MINI(bymin,mno1->y,mno2->y);
354 MINI(bzmin,mno1->z,mno2->z);
355 MAXI(bxmax,mno1->x,mno2->x);
356 MAXI(bymax,mno1->y,mno2->y);
357 MAXI(bzmax,mno1->z,mno2->z);
358 MINI(bxmin,bxmin,mno3->x);
359 MINI(bymin,bymin,mno3->y);
360 MINI(bzmin,bzmin,mno3->z);
361 MAXI(bxmax,bxmax,mno3->x);
362 MAXI(bymax,bymax,mno3->y);
363 MAXI(bzmax,bzmax,mno3->z);
364 MINI(bxmin,bxmin,mno4->x);
365 MINI(bymin,bymin,mno4->y);
366 MINI(bzmin,bzmin,mno4->z);
367 MAXI(bxmax,bxmax,mno4->x);
368 MAXI(bymax,bymax,mno4->y);
369 MAXI(bzmax,bzmax,mno4->z);
370 }
371
372
373 oc_place_boite(type,entite,bxmin,bymin,bzmin,bxmax,bymax,bzmax,octree);
374
375
376 }