ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/CAD4FE/src/CAD4FE_MCFile.cpp
Revision: 27
Committed: Thu Jul 5 15:26:40 2007 UTC (17 years, 10 months ago) by foucault
Original Path: magic/lib/CAD4FE/CAD4FE/src/CAD4FE_MCFile.cpp
File size: 10476 byte(s)
Log Message:

File Contents

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