e93f1118a823eaa52ccb78ef480ab9d1aa4b786d
[occt.git] / src / IGESData / IGESData_IGESReaderData.cxx
1 // Copyright (c) 1999-2012 OPEN CASCADE SAS
2 //
3 // The content of this file is subject to the Open CASCADE Technology Public
4 // License Version 6.5 (the "License"). You may not use the content of this file
5 // except in compliance with the License. Please obtain a copy of the License
6 // at http://www.opencascade.org and read it completely before using this file.
7 //
8 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
9 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
10 //
11 // The Original Code and all software distributed under the License is
12 // distributed on an "AS IS" basis, without warranty of any kind, and the
13 // Initial Developer hereby disclaims all such warranties, including without
14 // limitation, any warranties of merchantability, fitness for a particular
15 // purpose or non-infringement. Please see the License for the specific terms
16 // and conditions governing the rights and limitations under the License.
17
18 #include <IGESData_IGESReaderData.ixx>
19 #include <IGESData_IGESModel.hxx>
20 #include <IGESData_IGESEntity.hxx>
21 #include <IGESData_UndefinedEntity.hxx>
22 #include <Interface_FileParameter.hxx>
23 #include <Interface_ParamList.hxx>
24 #include <Interface_ParamType.hxx>
25 #include <TCollection_HAsciiString.hxx>
26 #include <Interface_Macros.hxx>
27
28
29
30 IGESData_IGESReaderData::IGESData_IGESReaderData
31   (const Standard_Integer nbe, const Standard_Integer nbp)
32     : Interface_FileReaderData (nbe,nbp) , thectyp (0,0) , thedirs(0,nbe)  
33 {
34   thestep = IGESData_ReadDir;  thedefw = 0.;
35   theparh = new Interface_ParamSet(30);
36   thestar = new TColStd_HSequenceOfHAsciiString();
37   thechk = new Interface_Check;
38 }
39
40
41     void IGESData_IGESReaderData::AddStartLine
42   (const Standard_CString aval)
43 {
44   thestar->Append (new TCollection_HAsciiString(aval));
45 }
46
47     Handle(TColStd_HSequenceOfHAsciiString) IGESData_IGESReaderData::StartSection
48   () const
49       {  return thestar;  }
50
51     void IGESData_IGESReaderData::AddGlobal
52   (const Interface_ParamType atype, const Standard_CString aval)
53 {
54   theparh->Append(aval,strlen(aval),atype,0);
55 }
56
57     void IGESData_IGESReaderData::SetGlobalSection ()
58       {  thehead.Init(theparh,thechk);  }
59
60     const IGESData_GlobalSection& IGESData_IGESReaderData::GlobalSection () const
61       {  return thehead;  }
62
63     void IGESData_IGESReaderData::SetDirPart
64   (const Standard_Integer num,
65    const Standard_Integer  i1, const Standard_Integer  i2,
66    const Standard_Integer  i3, const Standard_Integer  i4,
67    const Standard_Integer  i5, const Standard_Integer  i6,
68    const Standard_Integer  i7, const Standard_Integer  i8,
69    const Standard_Integer  i9, const Standard_Integer i10,
70    const Standard_Integer i11, const Standard_Integer i12,
71    const Standard_Integer i13, const Standard_Integer i14,
72    const Standard_Integer i15, const Standard_Integer i16,
73    const Standard_Integer i17,
74    const Standard_CString res1,  const Standard_CString res2,
75    const Standard_CString label, const Standard_CString subs)
76 {
77   IGESData_DirPart& DP = thedirs(num);
78   DP.Init(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,
79           i15,i16,i17,res1,res2,label,subs);
80 ////  thedirs(num) = DP;  // verifier si utile
81   //InitParams(num); gka optimization memory
82 }
83
84
85     const IGESData_DirPart& IGESData_IGESReaderData::DirPart
86   (const Standard_Integer num) const
87       {  return thedirs(num);  }
88
89     void IGESData_IGESReaderData::DirValues
90   (const Standard_Integer num,
91    Standard_Integer&  i1, Standard_Integer&  i2, Standard_Integer&  i3,
92    Standard_Integer&  i4, Standard_Integer&  i5, Standard_Integer&  i6,
93    Standard_Integer&  i7, Standard_Integer&  i8, Standard_Integer&  i9,
94    Standard_Integer& i10, Standard_Integer& i11, Standard_Integer& i12,
95    Standard_Integer& i13, Standard_Integer& i14, Standard_Integer& i15,
96    Standard_Integer& i16, Standard_Integer& i17,
97    Standard_CString& res1,  Standard_CString& res2,
98    Standard_CString& label, Standard_CString& subs) const
99 {
100   thedirs(num).Values(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,
101                       i15,i16,i17,res1,res2,label,subs);
102 }
103
104     IGESData_IGESType IGESData_IGESReaderData::DirType
105   (const Standard_Integer num) const
106       {  return thedirs(num).Type();  }
107
108     Standard_Integer IGESData_IGESReaderData::NbEntities () const
109       {  return thedirs.Upper();  }
110
111     Standard_Integer IGESData_IGESReaderData::FindNextRecord
112   (const Standard_Integer num) const
113 {
114   if (num >= thedirs.Upper()) return 0;
115   else return (num + 1);
116 }
117
118
119 // Reference a d'autres entites : c'est a la fois tres simple et problematique
120 // Tres simple : une reference a une entite est un numero (dans directory list)
121 // qui vaut (2*N-1) si N est le rang vrai de l'entite
122 // Problematique : ce numero est un Entier ... rien ne le distingue d'un autre
123 // D'ou critere : tout entier impair inferieur a 2*NbRecords PEUT etre une
124 // reference ... C'est a chaque entite de faire ensuite son tri ...
125 //  Attention, une reference peut etre donnee en "Pointeur Negatif"
126 // N.B.: DirPart non concernes (lecture specifique assuree par IGESEntity)
127
128     void IGESData_IGESReaderData::SetEntityNumbers ()
129 {
130 //   On essaie de se baser uniquement sur calcul de IGESRead
131 /*
132   Standard_Integer nbd = thedirs.Upper();
133   for (Standard_Integer i = 1; i <= nbd; i ++) {
134     Standard_Integer nbp = NbParams(i);
135     for (Standard_Integer j = 1; j <= nbp; j ++) {
136       Interface_FileParameter& FP = ChangeParam(i,j);
137       if (FP.ParamType() == Interface_ParamInteger) {
138         Standard_Integer val = atoi(FP.CValue());
139         if (val > 0) {
140           if (val != ((val/2) *2) && val < 2*nbd) {  // candidat possible
141             FP.SetEntityNumber((val+1)/2);
142           }
143         } else if (val < 0) {
144           Standard_Integer mval = -val;
145           if (mval != ((mval/2) *2) && mval < 2*nbd) {  // candidat possible
146             FP.SetEntityNumber((mval+1)/2);
147           }
148         }
149
150       }
151     }
152   }
153 */
154 }
155
156
157 //=======================================================================
158 //function : GlobalCheck
159 //purpose  : 
160 //=======================================================================
161
162 Handle(Interface_Check) IGESData_IGESReaderData::GlobalCheck () const
163 {
164   return thechk;
165 }
166
167
168 //=======================================================================
169 //function : SetDefaultLineWeight
170 //purpose  : 
171 //=======================================================================
172
173 void IGESData_IGESReaderData::SetDefaultLineWeight (const Standard_Real defw)
174 {
175   thedefw = defw;
176 }
177
178
179 //=======================================================================
180 //function : DefaultLineWeight
181 //purpose  : 
182 //=======================================================================
183
184 Standard_Real IGESData_IGESReaderData::DefaultLineWeight () const
185 {
186   return thedefw;
187 }