Salome HOME
SALOME PAL V1_4_1
[modules/smesh.git] / src / DriverUNV / UNV2411_Structure.cxx
1 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
3 // 
4 //  This library is free software; you can redistribute it and/or 
5 //  modify it under the terms of the GNU Lesser General Public 
6 //  License as published by the Free Software Foundation; either 
7 //  version 2.1 of the License. 
8 // 
9 //  This library is distributed in the hope that it will be useful, 
10 //  but WITHOUT ANY WARRANTY; without even the implied warranty of 
11 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
12 //  Lesser General Public License for more details. 
13 // 
14 //  You should have received a copy of the GNU Lesser General Public 
15 //  License along with this library; if not, write to the Free Software 
16 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
17 // 
18 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
19
20 #include <fstream>      
21
22 #include "UNV2411_Structure.hxx"
23 #include "UNV_Utilities.hxx"
24
25 using namespace std;
26 using namespace UNV;
27 using namespace UNV2411;
28
29 #ifdef _DEBUG_
30 static int MYDEBUG = 1;
31 #else
32 static int MYDEBUG = 0;
33 #endif
34
35 static string _label_dataset = "2411";
36
37 UNV2411::TRecord::TRecord():
38   exp_coord_sys_num(0),
39   disp_coord_sys_num(0),
40   color(0)
41 {}
42
43 void UNV2411::Read(std::ifstream& in_stream, TDataSet& theDataSet)
44 {
45   if(!in_stream.good())
46     EXCEPTION(runtime_error,"ERROR: Input file not good.");
47
48   /*
49    * adjust the \p istream to our
50    * position
51    */
52   if(!beginning_of_dataset(in_stream,_label_dataset))
53     EXCEPTION(runtime_error,"ERROR: Could not find "<<_label_dataset<<" dataset!");
54
55   /**
56    * always 3 coordinates in the UNV file, no matter
57    * which dimensionality libMesh is in
58    */
59   TNodeLab aLabel;
60   std::string num_buf;
61   for(; !in_stream.eof();){
62     in_stream >> aLabel ;
63     if(aLabel == -1){
64       // end of dataset is reached
65       break;
66     }
67
68     TRecord aRec;
69     in_stream>>aRec.exp_coord_sys_num;
70     in_stream>>aRec.disp_coord_sys_num;
71     in_stream>>aRec.color;
72
73     /*
74      * take care of the
75      * floating-point data
76      */
77     for(int d = 0; d < 3; d++){
78       in_stream>>num_buf;
79       aRec.coord[d] = D_to_e(num_buf);
80     }
81
82     theDataSet.insert(TDataSet::value_type(aLabel,aRec));
83   }
84 }
85
86
87 void UNV2411::Write(std::ofstream& out_stream, const TDataSet& theDataSet)
88 {
89   if(!out_stream.good())
90     EXCEPTION(runtime_error,"ERROR: Output file not good.");
91   
92   /*
93    * Write beginning of dataset
94    */
95   out_stream<<"    -1\n";
96   out_stream<<"  "<<_label_dataset<<"\n";
97
98   TDataSet::const_iterator anIter = theDataSet.begin();
99   for(; anIter != theDataSet.end(); anIter++){
100     const TNodeLab& aLabel = anIter->first;
101     const TRecord& aRec = anIter->second;
102     char buf[78];
103     sprintf(buf, "%10d%10d%10d%10d\n", 
104             aLabel,
105             aRec.exp_coord_sys_num,
106             aRec.disp_coord_sys_num,
107             aRec.color);
108     out_stream<<buf;
109
110     // the coordinates
111     sprintf(buf, "%25.16E%25.16E%25.16E\n", 
112             aRec.coord[0],
113             aRec.coord[1],
114             aRec.coord[2]);
115     out_stream<<buf;
116   }
117   
118   
119   /*
120    * Write end of dataset
121    */
122   out_stream<<"    -1\n";
123 }