1 |
foucault |
27 |
//---------------------------------------------------------------------------
|
2 |
|
|
|
3 |
|
|
|
4 |
foucault |
176 |
#pragma hdrstop
|
5 |
foucault |
27 |
|
6 |
|
|
#include "gestionversion.h"
|
7 |
|
|
|
8 |
|
|
#include "CAD4FE_MCFile.h"
|
9 |
|
|
|
10 |
|
|
//---------------------------------------------------------------------------
|
11 |
|
|
|
12 |
|
|
#pragma package(smart_init)
|
13 |
|
|
|
14 |
|
|
#include "mg_file.h"
|
15 |
|
|
#include "CAD4FE_MCFile.h"
|
16 |
|
|
#include "pars_argument.h"
|
17 |
|
|
#include "parse.h"
|
18 |
|
|
|
19 |
|
|
//---------------------------------------------------------------------------
|
20 |
|
|
// CAD4FE Headers
|
21 |
|
|
#include "CAD4FE_MCEdge.h"
|
22 |
|
|
#include "CAD4FE_MCFace.h"
|
23 |
|
|
#include "CAD4FE_MCVertex.h"
|
24 |
|
|
#include "CAD4FE_PolySurface.h"
|
25 |
|
|
#include "CAD4FE_PolyCurve.h"
|
26 |
|
|
#include "CAD4FE_MCNode.h"
|
27 |
|
|
#include "CAD4FE_MCSegment.h"
|
28 |
|
|
#include "CAD4FE_MCTriangle.h"
|
29 |
foucault |
569 |
#include "CAD4FE_m3d_MCTriangle.h"
|
30 |
foucault |
27 |
//---------------------------------------------------------------------------
|
31 |
|
|
|
32 |
|
|
|
33 |
|
|
//---------------------------------------------------------------------------
|
34 |
|
|
|
35 |
|
|
#pragma package(smart_init)
|
36 |
|
|
|
37 |
|
|
using namespace CAD4FE;
|
38 |
|
|
|
39 |
|
|
MCFile::MCFile():MG_FILE()
|
40 |
|
|
{
|
41 |
|
|
}
|
42 |
|
|
|
43 |
|
|
MCFile::MCFile(char* chemin):MG_FILE(chemin)
|
44 |
|
|
{
|
45 |
|
|
FILE *in;
|
46 |
|
|
char ligne[3000];
|
47 |
|
|
in=fopen(chemin,"rt");
|
48 |
|
|
if (in!=NULL)
|
49 |
|
|
{
|
50 |
|
|
PARS_ARGUMENT param[100];
|
51 |
|
|
PARSE parse;
|
52 |
|
|
|
53 |
|
|
MG_GEOMETRIE *mggeo;
|
54 |
|
|
MG_MAILLAGE *mgmai;
|
55 |
|
|
|
56 |
|
|
//std::map <MG_SOMMET*, MCVertex *> mapMCVertex;
|
57 |
|
|
|
58 |
|
|
do
|
59 |
|
|
{
|
60 |
|
|
int ierr;
|
61 |
|
|
std::string ligne=parse.lire(in,';',&ierr);
|
62 |
|
|
parse.decode(ligne.c_str(),"@;",param);
|
63 |
|
|
const char *chaine=param[0].argument[0].c_str();
|
64 |
|
|
if ((chaine[0]=='/') && (chaine[1]=='/'))
|
65 |
|
|
{
|
66 |
|
|
if ((chaine[2]=='*')&&(chaine[3]=='i'))
|
67 |
|
|
{
|
68 |
|
|
unsigned long id;
|
69 |
|
|
sscanf(chaine,"//*i:%lu;",&id);
|
70 |
|
|
entiteidmax=id;
|
71 |
|
|
}
|
72 |
|
|
}
|
73 |
|
|
else if (param[0].argument[0]!="FIN")
|
74 |
|
|
{
|
75 |
|
|
parse.decode(ligne.c_str(),"%@=@(@);",param);
|
76 |
|
|
std::string entite=param[1].argument[0];
|
77 |
|
|
long id=atol(param[0].argument[0].c_str());
|
78 |
|
|
std::string data=param[2].argument[0] ;
|
79 |
|
|
MG_MAILLAGE *mgmai;
|
80 |
|
|
FEM_MAILLAGE *femmai;
|
81 |
|
|
|
82 |
|
|
if (entite=="MAILLAGE")
|
83 |
|
|
{
|
84 |
|
|
parse.decode(data.c_str(),"@",param+2);
|
85 |
|
|
long idgeo=cid(param[2].argument[0]);
|
86 |
|
|
mggeo=get_mg_geometrieid(idgeo);
|
87 |
|
|
mgmai=get_mg_maillageid(id);
|
88 |
|
|
}
|
89 |
|
|
if (entite=="TETRAEDRE")
|
90 |
|
|
{
|
91 |
|
|
if (mgmai->get_mg_tetraid(id) != NULL) continue;
|
92 |
|
|
parse.decode(data.c_str(),"@,@,@,@,@",param+2);
|
93 |
|
|
long idtopo=cid(param[2].argument[0]);
|
94 |
|
|
long idn1=cid(param[3].argument[0]);
|
95 |
|
|
long idn2=cid(param[4].argument[0]);
|
96 |
|
|
long idn3=cid(param[5].argument[0]);
|
97 |
|
|
long idn4=cid(param[6].argument[0]);
|
98 |
|
|
MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
|
99 |
|
|
MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
|
100 |
|
|
MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
|
101 |
|
|
MG_NOEUD* noeud4=mgmai->get_mg_noeudid(idn4);
|
102 |
|
|
MG_ELEMENT_TOPOLOGIQUE* topo;
|
103 |
|
|
if (idtopo>-1) topo=mggeo->get_mg_volumeid(idtopo);
|
104 |
|
|
else topo=NULL;
|
105 |
|
|
if (noeud1&&noeud2&&noeud3&&noeud4) mgmai->ajouter_mg_tetra(topo,noeud1,noeud2,noeud3,noeud4,id);
|
106 |
|
|
}
|
107 |
|
|
/*if (entite=="TRIANGLE")
|
108 |
|
|
{
|
109 |
|
|
if (mgmai->get_mg_triangleid(id) != NULL) continue;
|
110 |
|
|
parse.decode(data.c_str(),"@,@,@,@",param+2);
|
111 |
|
|
long idtopo=cid(param[2].argument[0]);
|
112 |
|
|
long idn1=cid(param[3].argument[0]);
|
113 |
|
|
long idn2=cid(param[4].argument[0]);
|
114 |
|
|
long idn3=cid(param[5].argument[0]);
|
115 |
|
|
MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
|
116 |
|
|
MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
|
117 |
|
|
MG_NOEUD* noeud3=mgmai->get_mg_noeudid(idn3);
|
118 |
|
|
MG_ELEMENT_TOPOLOGIQUE* topo;
|
119 |
|
|
if (idtopo>-1)
|
120 |
|
|
{
|
121 |
|
|
topo=mggeo->get_mg_faceid(idtopo);
|
122 |
|
|
if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
|
123 |
|
|
}
|
124 |
|
|
else topo=NULL;
|
125 |
|
|
if (noeud1&&noeud2&&noeud3)mgmai->ajouter_mg_triangle(topo,noeud1,noeud2,noeud3,id);
|
126 |
|
|
}
|
127 |
|
|
if (entite=="SEGMENT")
|
128 |
|
|
{
|
129 |
|
|
if (mgmai->get_mg_segmentid(id) != NULL) continue;
|
130 |
|
|
parse.decode(data.c_str(),"@,@,@",param+2);
|
131 |
|
|
long idtopo=cid(param[2].argument[0]);
|
132 |
|
|
long idn1=cid(param[3].argument[0]);
|
133 |
|
|
long idn2=cid(param[4].argument[0]);
|
134 |
|
|
MG_NOEUD* noeud1=mgmai->get_mg_noeudid(idn1);
|
135 |
|
|
MG_NOEUD* noeud2=mgmai->get_mg_noeudid(idn2);
|
136 |
|
|
MG_ELEMENT_TOPOLOGIQUE* topo;
|
137 |
|
|
if (idtopo>-1)
|
138 |
|
|
{
|
139 |
|
|
topo=mggeo->get_mg_areteid(idtopo);
|
140 |
|
|
if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
|
141 |
|
|
if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
|
142 |
|
|
}
|
143 |
|
|
else topo=NULL;
|
144 |
|
|
MG_SEGMENT* seg=new MG_SEGMENT(id,topo,noeud1,noeud2);
|
145 |
|
|
if (noeud1&&noeud2) mgmai->ajouter_mg_segment(seg);
|
146 |
|
|
} */
|
147 |
|
|
if (entite=="CAD4FE_MCSEGMENT")
|
148 |
|
|
{
|
149 |
|
|
parse.decode(data.c_str(),"@,@,@",param+2);
|
150 |
|
|
long idtopo=cid(param[2].argument[0]);
|
151 |
|
|
long idn1=cid(param[3].argument[0]);
|
152 |
|
|
long idn2=cid(param[4].argument[0]);
|
153 |
|
|
MCNode* noeud1=(MCNode*)mgmai->get_mg_noeudid(idn1);
|
154 |
|
|
MCNode* noeud2=(MCNode*)mgmai->get_mg_noeudid(idn2);
|
155 |
|
|
MG_ELEMENT_TOPOLOGIQUE* topo;
|
156 |
|
|
if (idtopo>-1)
|
157 |
|
|
{
|
158 |
|
|
topo=mggeo->get_mg_areteid(idtopo);
|
159 |
|
|
if (topo==NULL) topo=mggeo->get_mg_faceid(idtopo);
|
160 |
|
|
if (topo==NULL) topo=mggeo->get_mg_volumeid(idtopo);
|
161 |
|
|
}
|
162 |
|
|
else topo=NULL;
|
163 |
|
|
MCSegment * seg = new MCSegment(id,topo,noeud1,noeud2);
|
164 |
|
|
mgmai->ajouter_mg_segment(seg);
|
165 |
|
|
}
|
166 |
|
|
if (entite=="CAD4FE_MCNODE")
|
167 |
|
|
{
|
168 |
|
|
parse.decode(data.c_str(),"@,@,@,@,@",param+2);
|
169 |
|
|
long idRefTopo=cid(param[2].argument[0]);
|
170 |
|
|
long idMCTopo=cid(param[3].argument[0]);
|
171 |
|
|
double x=atof(param[4].argument[0].c_str());
|
172 |
|
|
double y=atof(param[5].argument[0].c_str());
|
173 |
|
|
double z=atof(param[6].argument[0].c_str());
|
174 |
|
|
MG_ELEMENT_TOPOLOGIQUE* refTopo=NULL;
|
175 |
|
|
if (refTopo==NULL) refTopo=mggeo->get_mg_sommetid(idRefTopo);
|
176 |
|
|
if (refTopo==NULL) refTopo=mggeo->get_mg_areteid(idRefTopo);
|
177 |
|
|
if (refTopo==NULL) refTopo=mggeo->get_mg_faceid(idRefTopo);
|
178 |
|
|
if (refTopo==NULL) refTopo=mggeo->get_mg_volumeid(idRefTopo);
|
179 |
|
|
MG_ELEMENT_TOPOLOGIQUE* mcTopo=NULL;
|
180 |
|
|
if (mcTopo==NULL) mcTopo=mggeo->get_mg_sommetid(idMCTopo);
|
181 |
|
|
if (mcTopo==NULL) mcTopo=mggeo->get_mg_areteid(idMCTopo);
|
182 |
|
|
if (mcTopo==NULL) mcTopo=mggeo->get_mg_faceid(idMCTopo);
|
183 |
|
|
if (mcTopo==NULL) mcTopo=mggeo->get_mg_volumeid(idMCTopo);
|
184 |
|
|
MCNode* noeud=new MCNode(id,mcTopo,refTopo,x,y,z);
|
185 |
|
|
mgmai->ajouter_mg_noeud(noeud);
|
186 |
|
|
}
|
187 |
|
|
if (entite=="CAD4FE_MCTRIANGLE")
|
188 |
|
|
{
|
189 |
|
|
parse.decode(data.c_str(),"@,@,@,@",param+2);
|
190 |
|
|
long idtopo=cid(param[2].argument[0]);
|
191 |
|
|
long idn1=cid(param[3].argument[0]);
|
192 |
|
|
long idn2=cid(param[4].argument[0]);
|
193 |
|
|
long idn3=cid(param[5].argument[0]);
|
194 |
|
|
MCNode* noeud1=(MCNode*)mgmai->get_mg_noeudid(idn1);
|
195 |
|
|
MCNode* noeud2=(MCNode*)mgmai->get_mg_noeudid(idn2);
|
196 |
|
|
MCNode* noeud3=(MCNode*)mgmai->get_mg_noeudid(idn3);
|
197 |
|
|
MCSegment* mgsegment[3]; |
198 |
|
|
MCNode *mgnoeud[3]={noeud1,noeud2,noeud3}; |
199 |
|
|
// la topo. d'un MCTriangle est obligatoirement une MCFace |
200 |
|
|
MCFace* mcFace=(MCFace*)mggeo->get_mg_faceid(idtopo);
|
201 |
|
|
for (int i=0;i<3;i++)
|
202 |
|
|
{ |
203 |
|
|
mgsegment[i]=(MCSegment*)mgmai->get_mg_segment(mgnoeud[i]->get_id(),mgnoeud[(i+1)%3]->get_id()); |
204 |
|
|
if (mgsegment[i]==NULL) |
205 |
|
|
{ |
206 |
|
|
mgsegment[i]=new MCSegment(mcFace,mgnoeud[i],mgnoeud[(i+1)%3]); |
207 |
|
|
mgmai->ajouter_mg_segment(mgsegment[i]); |
208 |
|
|
} |
209 |
|
|
} |
210 |
|
|
M3D_MCTriangle *triangle = new M3D_MCTriangle(id,mcFace,noeud1,noeud2,noeud3,mgsegment[0],mgsegment[1],mgsegment[2]);
|
211 |
|
|
mgmai->ajouter_mg_triangle(triangle);
|
212 |
|
|
}
|
213 |
|
|
|
214 |
|
|
}
|
215 |
|
|
}
|
216 |
|
|
while (param[0].argument[0]!="FIN");
|
217 |
|
|
|
218 |
|
|
fclose(in);
|
219 |
|
|
|
220 |
|
|
}
|
221 |
|
|
|
222 |
|
|
}
|
223 |
|
|
|
224 |
|
|
MCFile::~MCFile()
|
225 |
|
|
{
|
226 |
|
|
}
|
227 |
|
|
|
228 |
|
|
|
229 |
|
|
|
230 |
|
|
|