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