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

File Contents

# Content
1 /*****************************************************************
2
3 r3d_comp_face.c Type:Func
4
5 Comparaison des faces d une octree
6
7 Date de creation : Wed Jul 23 14:45:18 1997
8
9 Derniere version : Thu Jul 24 11:49:11 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 /**************************/
32 /* variables globales */
33 extern struct s_acis *acis;
34 extern struct environnement env;
35 extern struct s_mesh *mesh;
36 extern struct s_param *para;
37
38
39
40 /**************************/
41 /* programme principal */
42
43 void r3d_comp_face(struct s_octree *oct,int nb_face,float dens)
44 {
45 int num,nb_entite,j,ok,k,type;
46 struct s_face *face;
47 struct s_plane *plane;
48 struct s_cone *cone;
49 char type_entite[20],mess[255];
50 float dir[4],ox[4],oy[4],oz[4],carac[20],vec[4],vec2[4],ps1,ps2;
51 struct r_face l_face[20];
52 int l_body[2];
53
54
55 nb_entite=0;
56 for (j=0;j<oct->nb_face;j++)
57 {
58 face=oct->face[j];
59 if (strcmp(acis->type_entite[face->surface],"plane-surface")==0)
60 {
61 plane=(struct s_plane *)acis->entity[face->surface];
62 memcpy(dir,plane->normal,3*sizeof(float));
63 eval_vecteur(dir);
64 l_face[nb_entite].nb_carac=3;
65 l_face[nb_entite].type=PLANE;
66 l_face[nb_entite].gtrouve=0;
67 l_face[nb_entite].num=face->num;
68 memcpy(l_face[nb_entite].carac,dir,3*sizeof(float));
69 memcpy(l_face[nb_entite].carac+3,plane->root,3*sizeof(float));
70 }
71 if (strcmp(acis->type_entite[face->surface],"cone-surface")==0)
72 {
73 cone=(struct s_cone *)acis->entity[face->surface];
74 memcpy(ox,cone->param->u,3*sizeof(float));
75 memcpy(oy,cone->param->v,3*sizeof(float));
76 memcpy(oz,cone->param->w,3*sizeof(float));
77 eval_vecteur(ox);
78 eval_vecteur(oy);
79 eval_vecteur(oz);
80 l_face[nb_entite].nb_carac=10;
81 l_face[nb_entite].type=CONE;
82 l_face[nb_entite].gtrouve=0;
83 l_face[nb_entite].num=face->num;
84 memcpy(l_face[nb_entite].carac,ox,3*sizeof(float));
85 memcpy(l_face[nb_entite].carac+3,oy,3*sizeof(float));
86 memcpy(l_face[nb_entite].carac+6,oz,3*sizeof(float));
87 l_face[nb_entite].carac[9]=cone->param->tg;
88 l_face[nb_entite].carac[10]=cone->param->a;
89 l_face[nb_entite].carac[11]=cone->param->b;
90 memcpy(l_face[nb_entite].carac+12,cone->param->centre,3*sizeof(float));
91 }
92 nb_entite++;
93 }
94
95 for (j=0;j<nb_face;j++)
96 {
97 r3d_file(mess);
98 sscanf(mess,"%s",type_entite);
99 if (strcmp(type_entite,"PLANE")==0)
100 {
101 sscanf(mess,"%s %d %f %f %f %f %f %f",type_entite,&num,&carac[3],&carac[4],&carac[5],&carac[0],&carac[1],&carac[2]);
102 type=PLANE;
103 }
104 if (strcmp(type_entite,"CONE")==0)
105 {
106 sscanf(mess,"%s %d %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f",type_entite,&num,&carac[12],&carac[13],&carac[14],&carac[10],&carac[0],&carac[1],&carac[2],&carac[11],&carac[3],&carac[4],&carac[5],&carac[6],&carac[7],&carac[8],&carac[9]);
107 type=CONE;
108 }
109 ok=0;
110 for (k=0;k<nb_entite;k++)
111 {
112 if (ok==0)
113 if (l_face[k].gtrouve==0)
114 if (type==l_face[k].type)
115 if ( ((l_face[k].nb_carac>0) && (EGAL(carac[0],l_face[k].carac[0],0.0001))) || (l_face[k].nb_carac<1) )
116 if ( ((l_face[k].nb_carac>1) && (EGAL(carac[1],l_face[k].carac[1],0.0001))) || (l_face[k].nb_carac<2) )
117 if ( ((l_face[k].nb_carac>2) && (EGAL(carac[2],l_face[k].carac[2],0.0001))) || (l_face[k].nb_carac<3) )
118 if ( ((l_face[k].nb_carac>3) && (EGAL(carac[3],l_face[k].carac[3],0.0001))) || (l_face[k].nb_carac<4) )
119 if ( ((l_face[k].nb_carac>4) && (EGAL(carac[4],l_face[k].carac[4],0.0001))) || (l_face[k].nb_carac<5) )
120 if ( ((l_face[k].nb_carac>5) && (EGAL(carac[5],l_face[k].carac[5],0.0001))) || (l_face[k].nb_carac<6) )
121 if ( ((l_face[k].nb_carac>6) && (EGAL(carac[6],l_face[k].carac[6],0.0001))) || (l_face[k].nb_carac<7) )
122 if ( ((l_face[k].nb_carac>7) && (EGAL(carac[7],l_face[k].carac[7],0.0001))) || (l_face[k].nb_carac<8) )
123 if ( ((l_face[k].nb_carac>8) && (EGAL(carac[8],l_face[k].carac[8],0.0001))) || (l_face[k].nb_carac<9) )
124 if ( ((l_face[k].nb_carac>9) && (EGAL(carac[9],l_face[k].carac[9],0.0001))) || (l_face[k].nb_carac<10) )
125 {
126 if (type==PLANE)
127 {
128 vec[0]=carac[0];vec[1]=carac[1];vec[2]=carac[2];
129 vec2[0]=carac[3]-l_face[k].carac[3];
130 vec2[1]=carac[4]-l_face[k].carac[4];
131 vec2[2]=carac[5]-l_face[k].carac[5];
132 ps1=PSCA(vec,vec2);
133 ps2=0.;
134 }
135 if (type==CONE)
136 {
137 ps1=carac[10]*l_face[k].carac[11]-carac[11]*l_face[k].carac[10];
138 vec2[0]=carac[12]-l_face[k].carac[12];
139 vec2[1]=carac[13]-l_face[k].carac[13];
140 vec2[2]=carac[14]-l_face[k].carac[14];
141 ps2=(float)sqrt((double)PSCA(vec2,vec2));
142 ps2=carac[10]-ps2*carac[9]-l_face[k].carac[10];
143 }
144 if (EGAL(ps1,0.,0.0001))
145 if (EGAL(ps2,0.,0.0001))
146 {
147 ok=1;
148 l_face[k].gtrouve=1;
149 }
150 }
151 }
152 if (ok==0) r3d_zone(ORIGINAL,OLD,oct,dens,FACE,num,0,l_body);
153 }
154
155 for (k=0;k<nb_entite;k++)
156 if (l_face[k].gtrouve==0)
157 r3d_zone(RETARDE3,NEW,oct,dens,FACE,l_face[k].num,0,l_body);
158
159
160
161
162 return;
163 }