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

# User Rev Content
1 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     }