ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/CAD4FE/src/CAD4FE_MCFile.cpp
Revision: 253
Committed: Tue Jul 13 19:40:46 2010 UTC (14 years, 10 months ago) by francois
File size: 10454 byte(s)
Log Message:
changement de hiearchie et utilisation de ccmake + mise a jour

File Contents

# User Rev Content
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     #include "CAD4FE_M3D_MCTriangle.h"
30     //---------------------------------------------------------------------------
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