0028714: Dimension of TDataStd_Real is not serialized to document
[occt.git] / src / TDataStd / TDataStd_Variable.cxx
CommitLineData
b311480e 1// Created on: 1997-12-10
2// Created by: Denis PASCAL
3// Copyright (c) 1997-1999 Matra Datavision
973c2be1 4// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 5//
973c2be1 6// This file is part of Open CASCADE Technology software library.
b311480e 7//
d5f74e42 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
973c2be1 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.
b311480e 13//
973c2be1 14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
7fd59977 16
7fd59977 17
42cf5bc1 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>
7fd59977 31
92efcf78 32IMPLEMENT_STANDARD_RTTIEXT(TDataStd_Variable,TDF_Attribute)
33
7fd59977 34//=======================================================================
35//function : GetID
36//purpose :
37//=======================================================================
7fd59977 38const 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
49Handle(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
64TDataStd_Variable::TDataStd_Variable()
65 :isConstant(Standard_False),
66 myUnit("SCALAR")
67{
68}
69
70//=======================================================================
71//function : Name
72//purpose :
73//=======================================================================
74
75void TDataStd_Variable::Name (const TCollection_ExtendedString& string)
76{
77 TDataStd_Name::Set(Label(),string);
78}
79
80//=======================================================================
81//function : Name
82//purpose :
83//=======================================================================
84const TCollection_ExtendedString& TDataStd_Variable::Name () const
85{
86 Handle(TDataStd_Name) N;
87 if (!Label().FindAttribute(TDataStd_Name::GetID(),N)) {
9775fa61 88 throw Standard_DomainError("TDataStd_Variable::Name : invalid model");
7fd59977 89 }
90 return N->Get();
91}
92
93//=======================================================================
94//function : IsValued
95//purpose :
96//=======================================================================
97
98Standard_Boolean TDataStd_Variable::IsValued () const
99{
100 return (Label().IsAttribute (TDataStd_Real::GetID()));
101}
102
103//=======================================================================
104//function : Real
105//purpose :
106//=======================================================================
107
108Handle(TDataStd_Real) TDataStd_Variable::Real() const
109{
110 Handle(TDataStd_Real) R;
111 if (!Label().FindAttribute(TDataStd_Real::GetID(),R)) {
9775fa61 112 throw Standard_DomainError("TDataStd_Variable::Real : invalid model");
7fd59977 113 }
114 return R;
115}
116
58e5d30e 117
118//=======================================================================
119//function : Set
120//purpose :
121//=======================================================================
122
123void TDataStd_Variable::Set (const Standard_Real value) const
124{
125 Handle(TDataStd_Real) R = TDataStd_Real::Set(Label(), value);
126}
127
128
7fd59977 129//=======================================================================
130//function : Set
131//purpose :
132//=======================================================================
133
134void 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);
58e5d30e 138 Standard_DISABLE_DEPRECATION_WARNINGS
7fd59977 139 R->SetDimension (dimension);
58e5d30e 140 Standard_ENABLE_DEPRECATION_WARNINGS
7fd59977 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
153Standard_Real TDataStd_Variable::Get () const
154{
155 Handle(TDataStd_Real) R;
156 if (!Label().FindAttribute(TDataStd_Real::GetID(),R)) {
9775fa61 157 throw Standard_DomainError("TDataStd_Variable::Get : invalid model");
7fd59977 158 }
159 return R->Get();
160}
161
162
163
164//=======================================================================
165//function : IsAssigned
166//purpose :
167//=======================================================================
168
169Standard_Boolean TDataStd_Variable::IsAssigned () const
170{
171 return (Label().IsAttribute(TDataStd_Expression::GetID()));
172}
173
174//=======================================================================
175//function : Assign
176//purpose :
177//=======================================================================
178
179Handle(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
190void TDataStd_Variable::Desassign () const
191{
192 Handle(TDataStd_Expression) E;
193 if (!Label().FindAttribute(TDataStd_Expression::GetID(),E)) {
9775fa61 194 throw Standard_DomainError("TDataStd_Variable::Deassign");
7fd59977 195 }
196 Label().ForgetAttribute(E);
197}
198
199//=======================================================================
200//function : Expression
201//purpose :
202//=======================================================================
203
204Handle(TDataStd_Expression) TDataStd_Variable::Expression () const
205{
206 Handle(TDataStd_Expression) E;
207 if (!Label().FindAttribute(TDataStd_Expression::GetID(),E)) {
9775fa61 208 throw Standard_DomainError("TDataStd_Variable::GetExpression");
7fd59977 209 }
210 return E;
211}
212
213//=======================================================================
214//function : IsCaptured
215//purpose :
216//=======================================================================
217
218Standard_Boolean TDataStd_Variable::IsCaptured() const
219{
220 return Real()->IsCaptured();
221}
222
223//=======================================================================
224//function : IsConstant
225//purpose :
226//=======================================================================
227
228Standard_Boolean TDataStd_Variable::IsConstant () const
229{
230 return isConstant;
231}
232
233//=======================================================================
234//function : Constant
235//purpose :
236//=======================================================================
237
238void 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//=======================================================================
251void 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//=======================================================================
264const TCollection_AsciiString& TDataStd_Variable::Unit() const
265{
266 return myUnit;
267}
268
269//=======================================================================
270//function : ID
271//purpose :
272//=======================================================================
273
274const Standard_GUID& TDataStd_Variable::ID() const
275{
276 return GetID();
277}
278
279//=======================================================================
280//function : Restore
281//purpose :
282//=======================================================================
283
284void 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
296Handle(TDF_Attribute) TDataStd_Variable::NewEmpty() const
297{
298 return new TDataStd_Variable();
299}
300
301//=======================================================================
302//function : Paste
303//purpose :
304//=======================================================================
305
306void 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
320void 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
333Standard_OStream& TDataStd_Variable::Dump(Standard_OStream& anOS) const
334{
335 anOS << "Variable";
336 return anOS;
337}
338