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

File Contents

# Content
1 /*****************************************************************
2
3 oc_enreg.c Type:Func
4
5 Enregistrement des caracteristiques de l abre octal
6
7 Date de creation : Thu Jul 3 11:45:15 1997
8
9 Derniere version : Thu Jul 10 09:58:13 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 <math.h>
29 #include "const.h"
30 #include "memoire.h"
31 #include "struct.h"
32 #include "prototype.h"
33
34 /**************************/
35 /* variables globales */
36 extern struct s_acis *acis;
37 extern struct environnement env;
38 extern struct s_mesh *mesh;
39 extern struct s_param *para;
40
41
42
43 /**************************/
44 /* programme principal */
45
46 void oc_enreg(void)
47 {
48 struct s_octree *oct;
49 struct s_vertex *vertex;
50 struct s_edge *edge;
51 struct s_face *face;
52 struct s_straight *straight;
53 struct s_ellipse *ellipse;
54 struct s_plane *plane;
55 struct s_cone *cone;
56 char mess[255];
57 FILE *out;
58 int i,j;
59 float dir[4],ox[4],oy[4];
60 float x1,x2,y1,y2,z1,z2,x[12],y[12],z[12];
61 int nint[6];
62
63
64 strcpy(mess,env.fich);
65 mess[strlen(mess)-4]=0;
66 strcat(mess,".oct");
67 out=fopen(mess,"wt");
68 fprintf(out,"***** Parametres generaux *****\n");
69 fprintf(out,"%f %f %d %d\n",env.epsilon,env.dens,env.relatif,mesh->nb_octree);
70 fprintf(out,"***** Definition de l arbre *****\n");
71 for (i=0;i<mesh->nb_octree;i++)
72 {
73 oct=ADRESSE(i,octree,mesh->);
74 fprintf(out,"+ %d %d",i,oct->feuille);
75 fprintf(out," %f %f %f %f\n",oct->x,oct->y,oct->z,oct->taille);
76 if (oct->feuille==0)
77 {
78 fprintf(out," %d",oct->fils[0]->num);
79 fprintf(out," %d",oct->fils[1]->num);
80 fprintf(out," %d",oct->fils[2]->num);
81 fprintf(out," %d",oct->fils[3]->num);
82 fprintf(out," %d",oct->fils[4]->num);
83 fprintf(out," %d",oct->fils[5]->num);
84 fprintf(out," %d",oct->fils[6]->num);
85 fprintf(out," %d\n",oct->fils[7]->num);
86 }
87 }
88
89
90
91 fprintf(out,"***** Caracteristiques des feuilles *****\n");
92 for (i=0;i<mesh->nb_octree;i++)
93 {
94 oct=ADRESSE(i,octree,mesh->);
95 if (oct->feuille==1)
96 {
97 x1=oct->x;
98 y1=oct->y;
99 z1=oct->z;
100 x2=oct->x+oct->taille;
101 y2=oct->y+oct->taille;
102 z2=oct->z+oct->taille;
103 fprintf(out,"+ %d %f %d %d %d\n",i,oct->dens,oct->nb_vertex,oct->nb_edge,oct->nb_face);
104 for (j=0;j<oct->nb_vertex;j++)
105 {
106 vertex=oct->vertex[j];
107 fprintf(out," POINT %d %f %f %f\n",vertex->num,vertex->point->coord[0],vertex->point->coord[1],vertex->point->coord[2]);
108 }
109 for (j=0;j<oct->nb_edge;j++)
110 {
111 edge=oct->edge[j];
112 if (strcmp(acis->type_entite[edge->curve],"straight-curve")==0)
113 {
114 straight=(struct s_straight *)acis->entity[edge->curve];
115 memcpy(dir,straight->param->dir,3*sizeof(float));
116 eval_vecteur(dir);
117 fprintf(out," STRAIGHT %d %f %f %f\n",edge->num,dir[0],dir[1],dir[2]);
118 fprintf(out," 2 %d %d\n",edge->owning_coedge->owning_loop->owning_face->num,edge->owning_coedge->partner_coedge->owning_loop->owning_face->num);
119 nint[0]=geo_int_stra_plane(edge,straight,x1,y1,z1,x2,y1,z1,x1,y2,z1,&x[0],&y[0],&z[0]);
120 nint[1]=geo_int_stra_plane(edge,straight,x2,y1,z1,x2,y1,z2,x2,y2,z1,&x[1],&y[1],&z[1]);
121 nint[2]=geo_int_stra_plane(edge,straight,x2,y1,z2,x1,y1,z2,x2,y2,z2,&x[2],&y[2],&z[2]);
122 nint[3]=geo_int_stra_plane(edge,straight,x1,y1,z2,x1,y1,z1,x1,y2,z2,&x[3],&y[3],&z[3]);
123 nint[4]=geo_int_stra_plane(edge,straight,x1,y2,z1,x2,y2,z1,x1,y2,z2,&x[4],&y[4],&z[4]);
124 nint[5]=geo_int_stra_plane(edge,straight,x1,y1,z1,x2,y1,z1,x1,y1,z2,&x[5],&y[5],&z[5]);
125 fprintf(out," %d %d %d %d %d %d\n",nint[0],nint[1],nint[2],nint[3],nint[4],nint[5]);
126 if (nint[0]==1) fprintf(out," %f %f %f\n",x[0],y[0],z[0]);
127 if (nint[1]==1) fprintf(out," %f %f %f\n",x[1],y[1],z[1]);
128 if (nint[2]==1) fprintf(out," %f %f %f\n",x[2],y[2],z[2]);
129 if (nint[3]==1) fprintf(out," %f %f %f\n",x[3],y[3],z[3]);
130 if (nint[4]==1) fprintf(out," %f %f %f\n",x[4],y[4],z[4]);
131 if (nint[5]==1) fprintf(out," %f %f %f\n",x[5],y[5],z[5]);
132 }
133 if (strcmp(acis->type_entite[edge->curve],"ellipse-curve")==0)
134 {
135 ellipse=(struct s_ellipse *)acis->entity[edge->curve];
136 memcpy(ox,ellipse->param->u,3*sizeof(float));
137 memcpy(oy,ellipse->param->v,3*sizeof(float));
138 eval_vecteur(ox);
139 eval_vecteur(oy);
140 fprintf(out," ELLIPSE %d %f %f %f %f %f %f %f %f %f %f %f\n",edge->num,ellipse->param->centre[0],ellipse->param->centre[1],ellipse->param->centre[2],ellipse->param->a,ox[0],ox[1],ox[2],ellipse->param->b,oy[0],oy[1],oy[2]);
141 fprintf(out," 2 %d %d\n",edge->owning_coedge->owning_loop->owning_face->num,edge->owning_coedge->partner_coedge->owning_loop->owning_face->num);
142 nint[0]=geo_int_elli_plane(edge,ellipse,x1,y1,z1,x2,y1,z1,x1,y2,z1,&x[0],&y[0],&z[0]);
143 nint[1]=geo_int_elli_plane(edge,ellipse,x2,y1,z1,x2,y1,z2,x2,y2,z1,&x[2],&y[2],&z[2]);
144 nint[2]=geo_int_elli_plane(edge,ellipse,x2,y1,z2,x1,y1,z2,x2,y2,z2,&x[4],&y[4],&z[4]);
145 nint[3]=geo_int_elli_plane(edge,ellipse,x1,y1,z2,x1,y1,z1,x1,y2,z2,&x[6],&y[6],&z[6]);
146 nint[4]=geo_int_elli_plane(edge,ellipse,x1,y2,z1,x2,y2,z1,x1,y2,z2,&x[8],&y[8],&z[8]);
147 nint[5]=geo_int_elli_plane(edge,ellipse,x1,y1,z1,x2,y1,z1,x1,y1,z2,&x[10],&y[10],&z[10]);
148 fprintf(out," %d %d %d %d %d %d\n",nint[0],nint[1],nint[2],nint[3],nint[4],nint[5]);
149 if (nint[0]>0) fprintf(out," %f %f %f\n",x[0],y[0],z[0]);
150 if (nint[0]>1) fprintf(out," %f %f %f\n",x[1],y[1],z[1]);
151 if (nint[1]>0) fprintf(out," %f %f %f\n",x[2],y[2],z[2]);
152 if (nint[1]>1) fprintf(out," %f %f %f\n",x[3],y[3],z[3]);
153 if (nint[2]>0) fprintf(out," %f %f %f\n",x[4],y[4],z[4]);
154 if (nint[2]>1) fprintf(out," %f %f %f\n",x[5],y[5],z[5]);
155 if (nint[3]>0) fprintf(out," %f %f %f\n",x[6],y[6],z[6]);
156 if (nint[3]>1) fprintf(out," %f %f %f\n",x[7],y[7],z[7]);
157 if (nint[4]>0) fprintf(out," %f %f %f\n",x[8],y[8],z[8]);
158 if (nint[4]>1) fprintf(out," %f %f %f\n",x[9],y[9],z[9]);
159 if (nint[5]>0) fprintf(out," %f %f %f\n",x[10],y[10],z[10]);
160 if (nint[5]>1) fprintf(out," %f %f %f\n",x[11],y[11],z[11]);
161 }
162 }
163 for (j=0;j<oct->nb_face;j++)
164 {
165 face=oct->face[j];
166 if (strcmp(acis->type_entite[face->surface],"plane-surface")==0)
167 {
168 plane=(struct s_plane *)acis->entity[face->surface];
169 memcpy(dir,plane->normal,3*sizeof(float));
170 eval_vecteur(dir);
171 fprintf(out," PLANE %d %f %f %f %f %f %f\n",face->num,plane->root[0],plane->root[1],plane->root[2],dir[0],dir[1],dir[2]);
172 }
173 if (strcmp(acis->type_entite[face->surface],"cone-surface")==0)
174 {
175 cone=(struct s_cone *)acis->entity[face->surface];
176 memcpy(dir,cone->param->w,3*sizeof(float));
177 memcpy(ox,cone->param->u,3*sizeof(float));
178 memcpy(oy,cone->param->v,3*sizeof(float));
179 eval_vecteur(ox);
180 eval_vecteur(oy);
181 eval_vecteur(dir);
182 fprintf(out," CONE %d %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f\n",face->num,cone->param->centre[0],cone->param->centre[1],cone->param->centre[2],cone->param->a,ox[0],ox[1],ox[2],cone->param->b,oy[0],oy[1],oy[2],dir[0],dir[1],dir[2],cone->param->tg);
183 }
184
185 }
186
187
188 }
189 }
190 fclose(out);
191 }