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

File Contents

# Content
1 /*****************************************************************
2
3 r3d_comp_edge.c Type:Func
4
5 Comparaison des edge d une octree
6
7 Date de creation : Tue Jul 22 16:22:09 1997
8
9 Derniere version : Wed Jul 23 10:15:36 1997
10
11
12
13 Vincent FRANCOIS
14
15 *****************************************************************/
16
17
18
19
20
21 /**************************/
22 /* include */
23 #include <stdio.h>
24 #include <string.h>
25 #include <math.h>
26 #include "const.h"
27 #include "memoire.h"
28 #include "struct.h"
29 #include "prototype.h"
30
31 #define EPS(x) 0.0002*x*x
32 /**************************/
33 /* variables globales */
34 extern struct s_acis *acis;
35 extern struct environnement env;
36 extern struct s_mesh *mesh;
37 extern struct s_param *para;
38
39
40
41 /**************************/
42 /* programme principal */
43
44 void r3d_comp_edge(struct s_octree *oct,int nb_edge,float dens)
45 {
46 char mess[255],type_entite[20];
47 int j,type,k;
48 struct s_edge *edge;
49 struct s_straight *straight;
50 struct s_ellipse *ellipse;
51 struct r_edge l_edge[10];
52 int nint[6],nb_entite,ok,num;
53 float dir[4],x1,x2,y1,y2,z1,z2,ox[4],oy[4],x[12],y[12],z[12],carac[12];
54 int nb_face_lien,l_face[2];
55
56
57 nb_entite=0;
58 for (j=0;j<oct->nb_edge;j++)
59 {
60 x1=oct->x;
61 y1=oct->y;
62 z1=oct->z;
63 x2=oct->x+oct->taille;
64 y2=oct->y+oct->taille;
65 z2=oct->z+oct->taille;
66 edge=oct->edge[j];
67 if (strcmp(acis->type_entite[edge->curve],"straight-curve")==0)
68 {
69 straight=(struct s_straight *)acis->entity[edge->curve];
70 memcpy(dir,straight->param->dir,3*sizeof(float));
71 eval_vecteur(dir);
72 l_edge[nb_entite].nb_carac=3;
73 l_edge[nb_entite].type=STRAIGHT;
74 memcpy(l_edge[nb_entite].carac,dir,3*sizeof(float));
75 l_edge[nb_entite].gtrouve=0;
76 l_edge[nb_entite].num=edge->num;
77 l_edge[nb_entite].nint[0]=geo_int_stra_plane(edge,straight,x1,y1,z1,x2,y1,z1,x1,y2,z1,&l_edge[nb_entite].x[0],&l_edge[nb_entite].y[0],&l_edge[nb_entite].z[0]);
78 l_edge[nb_entite].nint[1]=geo_int_stra_plane(edge,straight,x2,y1,z1,x2,y1,z2,x2,y2,z1,&l_edge[nb_entite].x[2],&l_edge[nb_entite].y[2],&l_edge[nb_entite].z[2]);
79 l_edge[nb_entite].nint[2]=geo_int_stra_plane(edge,straight,x2,y1,z2,x1,y1,z2,x2,y2,z2,&l_edge[nb_entite].x[4],&l_edge[nb_entite].y[4],&l_edge[nb_entite].z[4]);
80 l_edge[nb_entite].nint[3]=geo_int_stra_plane(edge,straight,x1,y1,z2,x1,y1,z1,x1,y2,z2,&l_edge[nb_entite].x[6],&l_edge[nb_entite].y[6],&l_edge[nb_entite].z[6]);
81 l_edge[nb_entite].nint[4]=geo_int_stra_plane(edge,straight,x1,y2,z1,x2,y2,z1,x1,y2,z2,&l_edge[nb_entite].x[8],&l_edge[nb_entite].y[8],&l_edge[nb_entite].z[8]);
82 l_edge[nb_entite].nint[5]=geo_int_stra_plane(edge,straight,x1,y1,z1,x2,y1,z1,x1,y1,z2,&l_edge[nb_entite].x[10],&l_edge[nb_entite].y[10],&l_edge[nb_entite].z[10]);
83 }
84 if (strcmp(acis->type_entite[edge->curve],"ellipse-curve")==0)
85 {
86 ellipse=(struct s_ellipse *)acis->entity[edge->curve];
87 memcpy(ox,ellipse->param->u,3*sizeof(float));
88 memcpy(oy,ellipse->param->v,3*sizeof(float));
89 eval_vecteur(ox);
90 eval_vecteur(oy);
91 l_edge[nb_entite].nb_carac=11;
92 l_edge[nb_entite].type=ELLIPSE;
93 memcpy(l_edge[nb_entite].carac,ellipse->param->centre,3*sizeof(float));
94 l_edge[nb_entite].carac[3]=ellipse->param->a;
95 memcpy(l_edge[nb_entite].carac+4,ox,3*sizeof(float));
96 l_edge[nb_entite].carac[7]=ellipse->param->b;
97 memcpy(l_edge[nb_entite].carac+8,oy,3*sizeof(float));
98 l_edge[nb_entite].gtrouve=0;
99 l_edge[nb_entite].num=edge->num;
100 l_edge[nb_entite].nint[0]=geo_int_elli_plane(edge,ellipse,x1,y1,z1,x2,y1,z1,x1,y2,z1,&l_edge[nb_entite].x[0],&l_edge[nb_entite].y[0],&l_edge[nb_entite].z[0]);
101 l_edge[nb_entite].nint[1]=geo_int_elli_plane(edge,ellipse,x2,y1,z1,x2,y1,z2,x2,y2,z1,&l_edge[nb_entite].x[2],&l_edge[nb_entite].y[2],&l_edge[nb_entite].z[2]);
102 l_edge[nb_entite].nint[2]=geo_int_elli_plane(edge,ellipse,x2,y1,z2,x1,y1,z2,x2,y2,z2,&l_edge[nb_entite].x[4],&l_edge[nb_entite].y[4],&l_edge[nb_entite].z[4]);
103 l_edge[nb_entite].nint[3]=geo_int_elli_plane(edge,ellipse,x1,y1,z2,x1,y1,z1,x1,y2,z2,&l_edge[nb_entite].x[6],&l_edge[nb_entite].y[6],&l_edge[nb_entite].z[6]);
104 l_edge[nb_entite].nint[4]=geo_int_elli_plane(edge,ellipse,x1,y2,z1,x2,y2,z1,x1,y2,z2,&l_edge[nb_entite].x[8],&l_edge[nb_entite].y[8],&l_edge[nb_entite].z[8]);
105 l_edge[nb_entite].nint[5]=geo_int_elli_plane(edge,ellipse,x1,y1,z1,x2,y1,z1,x1,y1,z2,&l_edge[nb_entite].x[10],&l_edge[nb_entite].y[10],&l_edge[nb_entite].z[10]);
106 }
107 if ((l_edge[nb_entite].nint[0]!=0) ||
108 (l_edge[nb_entite].nint[1]!=0) ||
109 (l_edge[nb_entite].nint[2]!=0) ||
110 (l_edge[nb_entite].nint[3]!=0) ||
111 (l_edge[nb_entite].nint[4]!=0) ||
112 (l_edge[nb_entite].nint[5]!=0) ) nb_entite++;
113 }
114
115
116
117
118 for (j=0;j<nb_edge;j++)
119 {
120 r3d_file(mess);
121 sscanf(mess,"%s",type_entite);
122 if (strcmp(type_entite,"STRAIGHT")==0)
123 {
124 type=STRAIGHT;
125 sscanf(mess,"%s %d %f %f %f",type_entite,&num,&carac[0],&carac[1],&carac[2]);
126 r3d_file(mess);
127 sscanf(mess,"%d %d %d",&nb_face_lien,&l_face[0],&l_face[1]);
128 r3d_file(mess);
129 sscanf(mess,"%d %d %d %d %d %d",&nint[0],&nint[1],&nint[2],&nint[3],&nint[4],&nint[5]);
130 for (k=0;k<6;k++)
131 if (nint[k]==1)
132 {
133 r3d_file(mess);
134 sscanf(mess,"%f %f %f",&x[2*k],&y[2*k],&z[2*k]);
135 }
136 }
137 if (strcmp(type_entite,"ELLIPSE")==0)
138 {
139 type=ELLIPSE;
140 sscanf(mess,"%s %d %f %f %f %f %f %f %f %f %f %f %f",type_entite,&num,&carac[0],&carac[1],&carac[2],&carac[3],&carac[4],&carac[5],&carac[6],&carac[7],&carac[8],&carac[9],&carac[10]);
141 r3d_file(mess);
142 sscanf(mess,"%d %d %d",&nb_face_lien,&l_face[0],&l_face[1]);
143 r3d_file(mess);
144 sscanf(mess,"%d %d %d %d %d %d",&nint[0],&nint[1],&nint[2],&nint[3],&nint[4],&nint[5]);
145 for (k=0;k<6;k++)
146 {
147 if (nint[k]>0)
148 {
149 r3d_file(mess);
150 sscanf(mess,"%f %f %f",&x[2*k],&y[2*k],&z[2*k]);
151 }
152 if (nint[k]>1)
153 {
154 r3d_file(mess);
155 sscanf(mess,"%f %f %f",&x[2*k+1],&y[2*k+1],&z[2*k+1]);
156 }
157
158 }
159 }
160 if ((nint[0]!=0) || (nint[1]!=0) || (nint[2]!=0) || (nint[3]!=0) || (nint[4]!=0) || (nint[5]!=0) )
161 {
162 ok=0;
163 for (k=0;k<nb_entite;k++)
164 {
165 if (type==l_edge[k].type)
166 if ( ((l_edge[k].nb_carac>0) && (EGAL(carac[0],l_edge[k].carac[0],0.0001))) || (l_edge[k].nb_carac<1) )
167 if ( ((l_edge[k].nb_carac>1) && (EGAL(carac[1],l_edge[k].carac[1],0.0001))) || (l_edge[k].nb_carac<2) )
168 if ( ((l_edge[k].nb_carac>2) && (EGAL(carac[2],l_edge[k].carac[2],0.0001))) || (l_edge[k].nb_carac<3) )
169 if ( ((l_edge[k].nb_carac>3) && (EGAL(carac[3],l_edge[k].carac[3],0.0001))) || (l_edge[k].nb_carac<4) )
170 if ( ((l_edge[k].nb_carac>4) && (EGAL(carac[4],l_edge[k].carac[4],0.0001))) || (l_edge[k].nb_carac<5) )
171 if ( ((l_edge[k].nb_carac>5) && (EGAL(carac[5],l_edge[k].carac[5],0.0001))) || (l_edge[k].nb_carac<6) )
172 if ( ((l_edge[k].nb_carac>6) && (EGAL(carac[6],l_edge[k].carac[6],0.0001))) || (l_edge[k].nb_carac<7) )
173 if ( ((l_edge[k].nb_carac>7) && (EGAL(carac[7],l_edge[k].carac[7],0.0001))) || (l_edge[k].nb_carac<8) )
174 if ( ((l_edge[k].nb_carac>8) && (EGAL(carac[8],l_edge[k].carac[8],0.0001))) || (l_edge[k].nb_carac<9) )
175 if ( ((l_edge[k].nb_carac>9) && (EGAL(carac[9],l_edge[k].carac[9],0.0001))) || (l_edge[k].nb_carac<10) )
176 if ( ((l_edge[k].nb_carac>10) && (EGAL(carac[10],l_edge[k].carac[10],0.0001))) || (l_edge[k].nb_carac<11) )
177 if (nint[0]==l_edge[k].nint[0])
178 if (nint[1]==l_edge[k].nint[1])
179 if (nint[2]==l_edge[k].nint[2])
180 if (nint[3]==l_edge[k].nint[3])
181 if (nint[4]==l_edge[k].nint[4])
182 if (nint[5]==l_edge[k].nint[5])
183 if ((nint[0]==0)||((nint[0]==1)&&(EGAL2(x[0],l_edge[k].x[0]))&&(EGAL2(y[0],l_edge[k].y[0]))&&(EGAL2(z[0],l_edge[k].z[0])))||
184 ((nint[0]==2)&&(EGAL2(x[0],l_edge[k].x[0]))&&(EGAL2(y[0],l_edge[k].y[0]))&&(EGAL2(z[0],l_edge[k].z[0]))&&
185 (EGAL2(x[1],l_edge[k].x[1]))&&(EGAL2(y[1],l_edge[k].y[1]))&&(EGAL2(z[1],l_edge[k].z[1])))||
186 ((nint[0]==2)&&(EGAL2(x[0],l_edge[k].x[1]))&&(EGAL2(y[0],l_edge[k].y[1]))&&(EGAL2(z[0],l_edge[k].z[1]))&&
187 (EGAL2(x[1],l_edge[k].x[0]))&&(EGAL2(y[1],l_edge[k].y[0]))&&(EGAL2(z[1],l_edge[k].z[0]))))
188 if ((nint[1]==0)||((nint[1]==1)&&(EGAL2(x[2],l_edge[k].x[2]))&&(EGAL2(y[2],l_edge[k].y[2]))&&(EGAL2(z[2],l_edge[k].z[2])))||
189 ((nint[1]==2)&&(EGAL2(x[2],l_edge[k].x[2]))&&(EGAL2(y[2],l_edge[k].y[2]))&&(EGAL2(z[2],l_edge[k].z[2]))&&
190 (EGAL2(x[3],l_edge[k].x[3]))&&(EGAL2(y[3],l_edge[k].y[3]))&&(EGAL2(z[3],l_edge[k].z[3])))||
191 ((nint[1]==2)&&(EGAL2(x[2],l_edge[k].x[3]))&&(EGAL2(y[2],l_edge[k].y[3]))&&(EGAL2(z[2],l_edge[k].z[3]))&&
192 (EGAL2(x[3],l_edge[k].x[2]))&&(EGAL2(y[3],l_edge[k].y[2]))&&(EGAL2(z[3],l_edge[k].z[2]))))
193 if ((nint[2]==0)||((nint[2]==1)&&(EGAL2(x[4],l_edge[k].x[4]))&&(EGAL2(y[4],l_edge[k].y[4]))&&(EGAL2(z[4],l_edge[k].z[4])))||
194 ((nint[2]==2)&&(EGAL2(x[4],l_edge[k].x[4]))&&(EGAL2(y[4],l_edge[k].y[4]))&&(EGAL2(z[4],l_edge[k].z[4]))&&
195 (EGAL2(x[5],l_edge[k].x[5]))&&(EGAL2(y[5],l_edge[k].y[5]))&&(EGAL2(z[5],l_edge[k].z[5])))||
196 ((nint[2]==2)&&(EGAL2(x[4],l_edge[k].x[5]))&&(EGAL2(y[4],l_edge[k].y[5]))&&(EGAL2(z[4],l_edge[k].z[5]))&&
197 (EGAL2(x[5],l_edge[k].x[4]))&&(EGAL2(y[5],l_edge[k].y[4]))&&(EGAL2(z[5],l_edge[k].z[4]))))
198 if ((nint[3]==0)||((nint[3]==1)&&(EGAL2(x[6],l_edge[k].x[6]))&&(EGAL2(y[6],l_edge[k].y[6]))&&(EGAL2(z[6],l_edge[k].z[6])))||
199 ((nint[3]==2)&&(EGAL2(x[6],l_edge[k].x[6]))&&(EGAL2(y[6],l_edge[k].y[6]))&&(EGAL2(z[6],l_edge[k].z[6]))&&
200 (EGAL2(x[7],l_edge[k].x[7]))&&(EGAL2(y[7],l_edge[k].y[7]))&&(EGAL2(z[7],l_edge[k].z[7])))||
201 ((nint[3]==2)&&(EGAL2(x[6],l_edge[k].x[7]))&&(EGAL2(y[6],l_edge[k].y[7]))&&(EGAL2(z[6],l_edge[k].z[7]))&&
202 (EGAL2(x[7],l_edge[k].x[6]))&&(EGAL2(y[7],l_edge[k].y[6]))&&(EGAL2(z[7],l_edge[k].z[6]))))
203 if ((nint[4]==0)||((nint[4]==1)&&(EGAL2(x[8],l_edge[k].x[8]))&&(EGAL2(y[8],l_edge[k].y[8]))&&(EGAL2(z[8],l_edge[k].z[8])))||
204 ((nint[4]==2)&&(EGAL2(x[8],l_edge[k].x[8]))&&(EGAL2(y[8],l_edge[k].y[8]))&&(EGAL2(z[8],l_edge[k].z[8]))&&
205 (EGAL2(x[9],l_edge[k].x[9]))&&(EGAL2(y[9],l_edge[k].y[9]))&&(EGAL2(z[9],l_edge[k].z[9])))||
206 ((nint[4]==2)&&(EGAL2(x[8],l_edge[k].x[9]))&&(EGAL2(y[8],l_edge[k].y[9]))&&(EGAL2(z[8],l_edge[k].z[9]))&&
207 (EGAL2(x[9],l_edge[k].x[8]))&&(EGAL2(y[9],l_edge[k].y[8]))&&(EGAL2(z[9],l_edge[k].z[8]))))
208 if ((nint[5]==0)||((nint[5]==1)&&(EGAL2(x[10],l_edge[k].x[10]))&&(EGAL2(y[10],l_edge[k].y[10]))&&(EGAL2(z[10],l_edge[k].z[10])))||
209 ((nint[5]==2)&&(EGAL2(x[10],l_edge[k].x[10]))&&(EGAL2(y[10],l_edge[k].y[10]))&&(EGAL2(z[10],l_edge[k].z[10]))&&
210 (EGAL2(x[11],l_edge[k].x[11]))&&(EGAL2(y[11],l_edge[k].y[11]))&&(EGAL2(z[11],l_edge[k].z[11])))||
211 ((nint[5]==2)&&(EGAL2(x[10],l_edge[k].x[11]))&&(EGAL2(y[10],l_edge[k].y[11]))&&(EGAL2(z[10],l_edge[k].z[11]))&&
212 (EGAL2(x[11],l_edge[k].x[10]))&&(EGAL2(y[11],l_edge[k].y[10]))&&(EGAL2(z[11],l_edge[k].z[10]))))
213
214
215 {
216 ok=1;
217 l_edge[k].gtrouve=1;
218 }
219 }
220 if (ok==0)
221 {
222 r3d_zone(ORIGINAL,OLD,oct,dens,EDGE,num,nb_face_lien,l_face);
223 }
224 }
225 }
226 for (k=0;k<nb_entite;k++)
227 if (l_edge[k].gtrouve==0)
228 r3d_zone(RETARDE2,NEW,oct,dens,EDGE,l_edge[k].num,0,l_face);
229 return;
230 }