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

File Contents

# Content
1 /*****************************************************************
2
3 acismesh.c Type:PP
4
5 maillage d'un solide ACIS
6
7 Date de creation : Mon Nov 25 17:03:26 1996
8
9 Derniere version : Wed Aug 6 11:36:03 1997
10
11
12
13
14
15
16
17
18
19 Vincent FRANCOIS
20
21 *****************************************************************/
22
23
24
25
26
27 /**************************/
28 /* include */
29 #include <stdio.h>
30 #include <string.h>
31 #include <math.h>
32 #include <stdlib.h>
33 #include "const.h"
34 #include "memoire.h"
35 #include "struct.h"
36 #include "prototype.h"
37
38 /**************************/
39 /* variables globales */
40 struct s_acis *acis;
41 struct environnement env;
42 struct s_mesh *mesh;
43 struct s_param *para;
44 struct s_maillage *maillage;
45
46 /**************************/
47 /* programme principal */
48
49 int acismesh(int argc,char argv[][100])
50 {
51 int i;
52 int batch=0;
53 struct s_face *face;
54 struct s_edge *edge;
55 struct s_noeud *noeud;
56 struct s_octree *octree;
57 struct s_vertex *vertex;
58 struct s_facette *facette;
59 struct s_mnoeud *mnoeud;
60 struct s_mfacette *mfacette;
61 struct s_mbodyette *mbodyette;
62
63 voir();
64 /* presentation */
65 aff_text("\n");
66 aff_text("\n");
67 aff_text("**********************\n");
68 aff_text("----------------------\n");
69 aff_text(" ACISMESH\n");
70 aff_text(" UQTR-ERIN 1996-97\n");
71 aff_text("----------------------\n");
72 aff_text("**********************\n");
73 aff_text("\n");
74 aff_text("\n");
75 /* recuperation des parametres de base */
76 env.dens=0.;
77 env.epsilon=0.05;
78 env.analyse=0;
79 env.opti=5;
80 env.opti2=0;
81 env.remesh=0;
82 env.zone=4;
83 env.geo=0;
84 i=0;
85 while (i<argc)
86 {
87 if (strcmp(argv[i],"-fich")==0) strcpy(env.fich,argv[i+1]);
88 if (strcmp(argv[i],"-mesh")==0)
89 {
90 strcpy(env.fich2,argv[i+1]);
91 env.remesh=1;
92 }
93 if (strcmp(argv[i],"-dens")==0) env.dens=(float)atof(argv[i+1]);
94 if (strcmp(argv[i],"-epsilon")==0) env.epsilon=(float)atof(argv[i+1]);
95 if (strcmp(argv[i],"-opti2d")==0) env.opti=(int)atoi(argv[i+1]);
96 if (strcmp(argv[i],"-opti3d")==0) env.opti2=1;
97 if (strcmp(argv[i],"-batch")==0) batch=1;
98 if (strcmp(argv[i],"-zone")==0) env.zone=(float)atof(argv[i+1]);
99 if (strcmp(argv[i],"-analyse")==0) env.analyse=1;
100 if (strcmp(argv[i],"-geo")==0)
101 {
102 env.geo=1;
103 batch=1;
104 }
105 i++;
106 }
107 if ((env.dens==0.)&&(env.remesh==0)&&(env.geo==0))
108 {
109 aff_text(MAIN_ERREUR);
110 goto fin;
111 }
112 if (env.epsilon<0.)
113 {
114 env.epsilon=(-env.epsilon);
115 env.relatif=1;
116 }
117 else env.relatif=0;
118 /* allocation de memoire pour acis*/
119 cal_cpu();
120 acis=(struct s_acis *)calloc(1,sizeof(struct s_acis));
121 NEW_ALLOC(body,acis->);
122 NEW_ALLOC(attrib,acis->);
123 NEW_ALLOC(lump,acis->);
124 NEW_ALLOC(shell,acis->);
125 NEW_ALLOC(face,acis->);
126 NEW_ALLOC(loop,acis->);
127 NEW_ALLOC(subshell,acis->);
128 NEW_ALLOC(wire,acis->);
129 NEW_ALLOC(coedge,acis->);
130 NEW_ALLOC(edge,acis->);
131 NEW_ALLOC(vertex,acis->);
132 NEW_ALLOC(cone,acis->);
133 NEW_ALLOC(ellipse,acis->);
134 NEW_ALLOC(pcurve,acis->);
135 NEW_ALLOC(plane,acis->);
136 NEW_ALLOC(point,acis->);
137 NEW_ALLOC(straight,acis->);
138 NEW_ALLOC(transform,acis->);
139 /* allocation pour parametrisation */
140 para=(struct s_param *)calloc(1,sizeof(struct s_param));
141 NEW_ALLOC(par_ellipse,para->);
142 NEW_ALLOC(par_straight,para->);
143 NEW_ALLOC(par_cone,para->);
144 NEW_ALLOC(par_plane,para->);
145 /* allocation structures de maillage */
146 mesh=(struct s_mesh *)calloc(1,sizeof(struct s_mesh));
147 NEW_ALLOC(noeud,mesh->);
148 NEW_ALLOC(segment,mesh->);
149 NEW_ALLOC(triangle,mesh->);
150 NEW_ALLOC(tetra,mesh->);
151 /* chargement du modele */
152 acis_charge();
153 if (env.remesh==0) /* maillage */
154 {
155 /* maillage des vertex */
156 m0d();
157 /* maillage des edges */
158 m1d();
159 /* enregistrement du maillage lineique */
160 if (env.geo==0)
161 {
162 m1d_enreg();
163 /* maillage des face */
164 m2d();
165 /* maillage du volume */
166 m3d();
167 /* resultat */
168 cal_cpu();
169 m2d_resultat(6);
170 m2d_resultat(10);
171 }
172 }
173 else /* remaillage */
174 {
175 maillage=(struct s_maillage *)calloc(1,sizeof(struct s_maillage));
176 NEW_ALLOC(mnoeud,maillage->);
177 NEW_ALLOC(msegment,maillage->);
178 NEW_ALLOC(mtriangle,maillage->);
179 NEW_ALLOC(mtetra,maillage->);
180 NEW_ALLOC(octree,mesh->);
181 NEW_ALLOC(mfacette,maillage->);
182 NEW_ALLOC(mbodyette,maillage->);
183 /* recuperation de l arbre */
184 r3d_c_octree();
185 /* comparaison des geometrie */
186 r3d_comp();
187 /* generation du maillage recupere */
188 r3d_gene();
189 LIBERE_LIEN(noeud,octree,mesh->);
190 LIBERE_LIEN(segment,octree,mesh->);
191 LIBERE_LIEN(triangle,octree,mesh->);
192 LIBERE_LIEN(tetra,octree,mesh->);
193 LIBERE_LIEN(vertex,octree,mesh->);
194 LIBERE_LIEN(face,octree,mesh->);
195 LIBERE_LIEN(edge,octree,mesh->);
196 LIBERE(octree,mesh->);
197 LIBERE_LIEN(triangle,facette,mesh->);
198 LIBERE(facette,mesh->);
199 LIBERE_LIEN(mtriangle,mfacette,maillage->);
200 LIBERE(mfacette,maillage->);
201 LIBERE_LIEN(mtetra,mbodyette,maillage->);
202 LIBERE(mbodyette,maillage->);
203 LIBERE_LIEN(mtriangle,mnoeud,maillage->);
204 LIBERE_LIEN(mtetra,mnoeud,maillage->);
205 LIBERE(mnoeud,maillage->);
206 LIBERE(msegment,maillage->);
207 LIBERE(mtriangle,maillage->);
208 LIBERE(mtetra,maillage->);
209 LIBERE_LIEN(mnoeud,octree,mesh->);
210 LIBERE_LIEN(msegment,octree,mesh->);
211 LIBERE_LIEN(mtriangle,octree,mesh->);
212 LIBERE_LIEN(mtetra,octree,mesh->);
213 free(maillage);
214 /*resultat */
215 cal_cpu();
216 m2d_resultat(6);
217 m2d_resultat(10);
218 }
219 /* liberation de memoire acis*/
220 LIBERE_LIEN(segment,edge,acis->);
221 LIBERE_LIEN(triangle,face,acis->);
222 LIBERE_LIEN(edge,vertex,acis->);
223 LIBERE(body,acis->);
224 LIBERE(attrib,acis->);
225 LIBERE(lump,acis->);
226 LIBERE(shell,acis->);
227 for (i=0;i<acis->nb_face;i++)
228 {
229 face=ADRESSE(i,face,acis->);
230 if (face->rap_face!=NULL) free(face->rap_face);
231 face->rap_face=NULL;
232 }
233 LIBERE(face,acis->);
234 LIBERE(loop,acis->);
235 LIBERE(subshell,acis->);
236 LIBERE(wire,acis->);
237 LIBERE(coedge,acis->);
238 for (i=0;i<acis->nb_edge;i++)
239 {
240 edge=ADRESSE(i,edge,acis->);
241 if (edge->dens_influ!=NULL) free(edge->dens_influ);
242 edge->dens_influ=NULL;
243 if (edge->rap_edge!=NULL) free(edge->rap_edge);
244 edge->rap_edge=NULL;
245 }
246 LIBERE(edge,acis->);
247 LIBERE(vertex,acis->);
248 LIBERE(cone,acis->);
249 LIBERE(ellipse,acis->);
250 LIBERE(pcurve,acis->);
251 LIBERE(plane,acis->);
252 LIBERE(point,acis->);
253 LIBERE(straight,acis->);
254 LIBERE(transform,acis->);
255 free(acis->entity);
256 for (i=0;i<acis->nb_entity;i++)
257 free(acis->type_entite[i]);
258 free(acis->type_entite);
259 free(acis);
260 /* liberation parametrisation */
261 LIBERE(par_ellipse,para->);
262 LIBERE(par_straight,para->);
263 LIBERE(par_cone,para->);
264 LIBERE(par_plane,para->);
265 free(para);
266 /* liberation maillage */
267 LIBERE_LIEN(segment,noeud,mesh->);
268 LIBERE_LIEN(triangle,noeud,mesh->);
269 LIBERE(noeud,mesh->);
270 LIBERE(segment,mesh->);
271 LIBERE(triangle,mesh->);
272 LIBERE(tetra,mesh->);
273 free(mesh);
274 fin:;
275 return(batch);
276 }