0028714: Dimension of TDataStd_Real is not serialized to document
[occt.git] / src / TDataStd / TDataStd_Variable.cxx
1 // Created on: 1997-12-10
2 // Created by: Denis PASCAL
3 // Copyright (c) 1997-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17
18 #include <Standard_DomainError.hxx>
19 #include <Standard_GUID.hxx>
20 #include <Standard_Type.hxx>
21 #include <TCollection_AsciiString.hxx>
22 #include <TCollection_ExtendedString.hxx>
23 #include <TDataStd_Expression.hxx>
24 #include <TDataStd_Name.hxx>
25 #include <TDataStd_Real.hxx>
26 #include <TDataStd_Variable.hxx>
27 #include <TDF_Attribute.hxx>
28 #include <TDF_DataSet.hxx>
29 #include <TDF_Label.hxx>
30 #include <TDF_RelocationTable.hxx>
31
32 IMPLEMENT_STANDARD_RTTIEXT(TDataStd_Variable,TDF_Attribute)
33
34 //=======================================================================
35 //function : GetID
36 //purpose  : 
37 //=======================================================================
38 const Standard_GUID& TDataStd_Variable::GetID() 
39 {  
40   static Standard_GUID TDataStd_VariableID("ce241469-8e57-11d1-8953-080009dc4425");
41   return TDataStd_VariableID;
42 }
43
44 //=======================================================================
45 //function : Set
46 //purpose  : 
47 //=======================================================================
48
49 Handle(TDataStd_Variable) TDataStd_Variable::Set(const TDF_Label& L)
50 {  
51   Handle(TDataStd_Variable) A;
52   if (!L.FindAttribute (TDataStd_Variable::GetID(), A)) {
53     A = new TDataStd_Variable (); 
54     L.AddAttribute(A);
55   }
56   return A;
57 }
58
59 //=======================================================================
60 //function : TDataStd_Variable
61 //purpose  : 
62 //=======================================================================
63
64 TDataStd_Variable::TDataStd_Variable() 
65   :isConstant(Standard_False),
66    myUnit("SCALAR")
67 {
68 }
69
70 //=======================================================================
71 //function : Name
72 //purpose  : 
73 //=======================================================================
74
75 void TDataStd_Variable::Name (const TCollection_ExtendedString& string)
76
77   TDataStd_Name::Set(Label(),string);  
78 }
79
80 //=======================================================================
81 //function : Name
82 //purpose  : 
83 //=======================================================================
84 const TCollection_ExtendedString& TDataStd_Variable::Name () const 
85 {
86   Handle(TDataStd_Name) N;
87   if (!Label().FindAttribute(TDataStd_Name::GetID(),N)) {
88     throw Standard_DomainError("TDataStd_Variable::Name : invalid model");
89   }
90   return N->Get();
91 }
92
93 //=======================================================================
94 //function : IsValued
95 //purpose  : 
96 //=======================================================================
97
98 Standard_Boolean TDataStd_Variable::IsValued () const
99 {
100   return (Label().IsAttribute (TDataStd_Real::GetID()));
101 }
102
103 //=======================================================================
104 //function : Real
105 //purpose  : 
106 //=======================================================================
107
108 Handle(TDataStd_Real) TDataStd_Variable::Real() const
109 {
110   Handle(TDataStd_Real) R;
111   if (!Label().FindAttribute(TDataStd_Real::GetID(),R)) {
112     throw Standard_DomainError("TDataStd_Variable::Real : invalid model");
113   }
114   return R;
115 }
116
117
118 //=======================================================================
119 //function : Set
120 //purpose  : 
121 //=======================================================================
122
123 void TDataStd_Variable::Set (const Standard_Real value) const
124 {
125   Handle(TDataStd_Real) R = TDataStd_Real::Set(Label(), value);
126 }
127
128
129 //=======================================================================
130 //function : Set
131 //purpose  : 
132 //=======================================================================
133
134 void TDataStd_Variable::Set (const Standard_Real value, const TDataStd_RealEnum dimension) const
135 {  
136   if (!IsValued()) {
137     Handle(TDataStd_Real) R = TDataStd_Real::Set(Label(),value);
138     Standard_DISABLE_DEPRECATION_WARNINGS
139     R->SetDimension (dimension);
140     Standard_ENABLE_DEPRECATION_WARNINGS
141   }
142   else {
143     Handle(TDataStd_Real) R = TDataStd_Real::Set(Label(),value);
144   }
145 }
146
147
148 //=======================================================================
149 //function : Get
150 //purpose  : 
151 //=======================================================================
152
153 Standard_Real TDataStd_Variable::Get () const
154 {  
155   Handle(TDataStd_Real) R;
156   if (!Label().FindAttribute(TDataStd_Real::GetID(),R)) {
157     throw Standard_DomainError("TDataStd_Variable::Get : invalid model");
158   }
159   return R->Get();
160 }
161
162
163
164 //=======================================================================
165 //function : IsAssigned
166 //purpose  : 
167 //=======================================================================
168
169 Standard_Boolean TDataStd_Variable::IsAssigned () const
170 {
171   return (Label().IsAttribute(TDataStd_Expression::GetID()));
172 }
173
174 //=======================================================================
175 //function : Assign
176 //purpose  : 
177 //=======================================================================
178
179 Handle(TDataStd_Expression) TDataStd_Variable::Assign () const
180 {
181   Handle(TDataStd_Expression) E = TDataStd_Expression::Set(Label());
182   return E;
183 }
184
185 //=======================================================================
186 //function : Desassign
187 //purpose  : 
188 //=======================================================================
189
190 void TDataStd_Variable::Desassign () const
191 {  
192   Handle(TDataStd_Expression) E;
193   if (!Label().FindAttribute(TDataStd_Expression::GetID(),E)) {
194     throw Standard_DomainError("TDataStd_Variable::Deassign");
195   }   
196   Label().ForgetAttribute(E);
197 }
198
199 //=======================================================================
200 //function : Expression
201 //purpose  : 
202 //=======================================================================
203
204 Handle(TDataStd_Expression) TDataStd_Variable::Expression () const
205 {
206   Handle(TDataStd_Expression) E;
207   if (!Label().FindAttribute(TDataStd_Expression::GetID(),E)) {
208     throw Standard_DomainError("TDataStd_Variable::GetExpression");
209   }
210   return E;
211 }
212
213 //=======================================================================
214 //function : IsCaptured
215 //purpose  : 
216 //=======================================================================
217
218 Standard_Boolean TDataStd_Variable::IsCaptured() const
219 {  
220   return Real()->IsCaptured();
221 }
222
223 //=======================================================================
224 //function : IsConstant
225 //purpose  : 
226 //=======================================================================
227
228 Standard_Boolean TDataStd_Variable::IsConstant () const
229 {
230   return isConstant;
231 }
232
233 //=======================================================================
234 //function : Constant
235 //purpose  : 
236 //=======================================================================
237
238 void TDataStd_Variable::Constant (const Standard_Boolean status) 
239 {
240   // OCC2932 correction
241   if(isConstant == status) return;
242
243   Backup();
244   isConstant = status;
245 }
246
247 //=======================================================================
248 //function : Unit
249 //purpose  : 
250 //=======================================================================
251 void TDataStd_Variable::Unit(const TCollection_AsciiString& unit)
252 {
253   // OCC2932 correction
254   if(myUnit == unit)
255     return;
256
257   Backup();
258   myUnit = unit;
259 }
260 //=======================================================================
261 //function : Unit
262 //purpose  : 
263 //=======================================================================
264 const TCollection_AsciiString& TDataStd_Variable::Unit() const 
265 {
266   return myUnit;
267 }
268
269 //=======================================================================
270 //function : ID
271 //purpose  : 
272 //=======================================================================
273
274 const Standard_GUID& TDataStd_Variable::ID() const
275 {
276   return GetID();
277 }
278
279 //=======================================================================
280 //function : Restore
281 //purpose  : 
282 //=======================================================================
283
284 void TDataStd_Variable::Restore (const Handle(TDF_Attribute)& With) 
285 {
286   Handle(TDataStd_Variable) V = Handle(TDataStd_Variable)::DownCast (With);
287   isConstant = V->IsConstant();
288   myUnit = V->Unit();
289 }
290
291 //=======================================================================
292 //function : NewEmpty
293 //purpose  : 
294 //=======================================================================
295
296 Handle(TDF_Attribute) TDataStd_Variable::NewEmpty() const
297 {
298   return new TDataStd_Variable();
299 }
300
301 //=======================================================================
302 //function : Paste
303 //purpose  : 
304 //=======================================================================
305
306 void TDataStd_Variable::Paste (const Handle(TDF_Attribute)& Into,
307                                const Handle(TDF_RelocationTable)& /*RT*/) const
308 {   
309   Handle(TDataStd_Variable) V = Handle(TDataStd_Variable)::DownCast (Into); 
310   V->Constant(isConstant);
311   V->Unit(myUnit); 
312 }
313
314
315 //=======================================================================
316 //function : References
317 //purpose  : 
318 //=======================================================================
319
320 void TDataStd_Variable::References(const Handle(TDF_DataSet)& DS) const
321 {
322   Handle(TDataStd_Name) N;
323   if (Label().FindAttribute(TDataStd_Name::GetID(),N)) {
324     DS->AddAttribute(N);
325   }    
326 }
327
328 //=======================================================================
329 //function : Dump
330 //purpose  : 
331 //=======================================================================
332
333 Standard_OStream& TDataStd_Variable::Dump(Standard_OStream& anOS) const
334 {  
335   anOS << "Variable";
336   return anOS;
337 }
338