0024023: Revamp the OCCT Handle -- ambiguity
[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
17#include <TDataStd_Variable.ixx>
18#include <TDF_Label.hxx>
19#include <TDataStd_Real.hxx>
20#include <TDataStd_Name.hxx>
21#include <Standard_DomainError.hxx>
22
23
24//=======================================================================
25//function : GetID
26//purpose :
27//=======================================================================
28
29const Standard_GUID& TDataStd_Variable::GetID()
30{
31 static Standard_GUID TDataStd_VariableID("ce241469-8e57-11d1-8953-080009dc4425");
32 return TDataStd_VariableID;
33}
34
35//=======================================================================
36//function : Set
37//purpose :
38//=======================================================================
39
40Handle(TDataStd_Variable) TDataStd_Variable::Set(const TDF_Label& L)
41{
42 Handle(TDataStd_Variable) A;
43 if (!L.FindAttribute (TDataStd_Variable::GetID(), A)) {
44 A = new TDataStd_Variable ();
45 L.AddAttribute(A);
46 }
47 return A;
48}
49
50//=======================================================================
51//function : TDataStd_Variable
52//purpose :
53//=======================================================================
54
55TDataStd_Variable::TDataStd_Variable()
56 :isConstant(Standard_False),
57 myUnit("SCALAR")
58{
59}
60
61//=======================================================================
62//function : Name
63//purpose :
64//=======================================================================
65
66void TDataStd_Variable::Name (const TCollection_ExtendedString& string)
67{
68 TDataStd_Name::Set(Label(),string);
69}
70
71//=======================================================================
72//function : Name
73//purpose :
74//=======================================================================
75const TCollection_ExtendedString& TDataStd_Variable::Name () const
76{
77 Handle(TDataStd_Name) N;
78 if (!Label().FindAttribute(TDataStd_Name::GetID(),N)) {
79 Standard_DomainError::Raise("TDataStd_Variable::Name : invalid model");
80 }
81 return N->Get();
82}
83
84//=======================================================================
85//function : IsValued
86//purpose :
87//=======================================================================
88
89Standard_Boolean TDataStd_Variable::IsValued () const
90{
91 return (Label().IsAttribute (TDataStd_Real::GetID()));
92}
93
94//=======================================================================
95//function : Real
96//purpose :
97//=======================================================================
98
99Handle(TDataStd_Real) TDataStd_Variable::Real() const
100{
101 Handle(TDataStd_Real) R;
102 if (!Label().FindAttribute(TDataStd_Real::GetID(),R)) {
103 Standard_DomainError::Raise("TDataStd_Variable::Real : invalid model");
104 }
105 return R;
106}
107
108//=======================================================================
109//function : Set
110//purpose :
111//=======================================================================
112
113void TDataStd_Variable::Set (const Standard_Real value, const TDataStd_RealEnum dimension) const
114{
115 if (!IsValued()) {
116 Handle(TDataStd_Real) R = TDataStd_Real::Set(Label(),value);
117 R->SetDimension (dimension);
118 }
119 else {
120 Handle(TDataStd_Real) R = TDataStd_Real::Set(Label(),value);
121 }
122}
123
124
125//=======================================================================
126//function : Get
127//purpose :
128//=======================================================================
129
130Standard_Real TDataStd_Variable::Get () const
131{
132 Handle(TDataStd_Real) R;
133 if (!Label().FindAttribute(TDataStd_Real::GetID(),R)) {
134 Standard_DomainError::Raise("TDataStd_Variable::Get : invalid model");
135 }
136 return R->Get();
137}
138
139
140
141//=======================================================================
142//function : IsAssigned
143//purpose :
144//=======================================================================
145
146Standard_Boolean TDataStd_Variable::IsAssigned () const
147{
148 return (Label().IsAttribute(TDataStd_Expression::GetID()));
149}
150
151//=======================================================================
152//function : Assign
153//purpose :
154//=======================================================================
155
156Handle(TDataStd_Expression) TDataStd_Variable::Assign () const
157{
158 Handle(TDataStd_Expression) E = TDataStd_Expression::Set(Label());
159 return E;
160}
161
162//=======================================================================
163//function : Desassign
164//purpose :
165//=======================================================================
166
167void TDataStd_Variable::Desassign () const
168{
169 Handle(TDataStd_Expression) E;
170 if (!Label().FindAttribute(TDataStd_Expression::GetID(),E)) {
171 Standard_DomainError::Raise("TDataStd_Variable::Deassign");
172 }
173 Label().ForgetAttribute(E);
174}
175
176//=======================================================================
177//function : Expression
178//purpose :
179//=======================================================================
180
181Handle(TDataStd_Expression) TDataStd_Variable::Expression () const
182{
183 Handle(TDataStd_Expression) E;
184 if (!Label().FindAttribute(TDataStd_Expression::GetID(),E)) {
185 Standard_DomainError::Raise("TDataStd_Variable::GetExpression");
186 }
187 return E;
188}
189
190//=======================================================================
191//function : IsCaptured
192//purpose :
193//=======================================================================
194
195Standard_Boolean TDataStd_Variable::IsCaptured() const
196{
197 return Real()->IsCaptured();
198}
199
200//=======================================================================
201//function : IsConstant
202//purpose :
203//=======================================================================
204
205Standard_Boolean TDataStd_Variable::IsConstant () const
206{
207 return isConstant;
208}
209
210//=======================================================================
211//function : Constant
212//purpose :
213//=======================================================================
214
215void TDataStd_Variable::Constant (const Standard_Boolean status)
216{
217 // OCC2932 correction
218 if(isConstant == status) return;
219
220 Backup();
221 isConstant = status;
222}
223
224//=======================================================================
225//function : Unit
226//purpose :
227//=======================================================================
228void TDataStd_Variable::Unit(const TCollection_AsciiString& unit)
229{
230 // OCC2932 correction
231 if(myUnit == unit)
232 return;
233
234 Backup();
235 myUnit = unit;
236}
237//=======================================================================
238//function : Unit
239//purpose :
240//=======================================================================
241const TCollection_AsciiString& TDataStd_Variable::Unit() const
242{
243 return myUnit;
244}
245
246//=======================================================================
247//function : ID
248//purpose :
249//=======================================================================
250
251const Standard_GUID& TDataStd_Variable::ID() const
252{
253 return GetID();
254}
255
256//=======================================================================
257//function : Restore
258//purpose :
259//=======================================================================
260
261void TDataStd_Variable::Restore (const Handle(TDF_Attribute)& With)
262{
263 Handle(TDataStd_Variable) V = Handle(TDataStd_Variable)::DownCast (With);
264 isConstant = V->IsConstant();
265 myUnit = V->Unit();
266}
267
268//=======================================================================
269//function : NewEmpty
270//purpose :
271//=======================================================================
272
273Handle(TDF_Attribute) TDataStd_Variable::NewEmpty() const
274{
275 return new TDataStd_Variable();
276}
277
278//=======================================================================
279//function : Paste
280//purpose :
281//=======================================================================
282
283void TDataStd_Variable::Paste (const Handle(TDF_Attribute)& Into,
284 const Handle(TDF_RelocationTable)& /*RT*/) const
285{
286 Handle(TDataStd_Variable) V = Handle(TDataStd_Variable)::DownCast (Into);
287 V->Constant(isConstant);
288 V->Unit(myUnit);
289}
290
291
292//=======================================================================
293//function : References
294//purpose :
295//=======================================================================
296
297void TDataStd_Variable::References(const Handle(TDF_DataSet)& DS) const
298{
299 Handle(TDataStd_Name) N;
300 if (Label().FindAttribute(TDataStd_Name::GetID(),N)) {
301 DS->AddAttribute(N);
302 }
303}
304
305//=======================================================================
306//function : Dump
307//purpose :
308//=======================================================================
309
310Standard_OStream& TDataStd_Variable::Dump(Standard_OStream& anOS) const
311{
312 anOS << "Variable";
313 return anOS;
314}
315