0031642: Visualization - crash in Graphic3d_Structure::SetVisual() on redisplaying...
[occt.git] / src / XCAFDoc / XCAFDoc_Datum.cxx
CommitLineData
973c2be1 1// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 2//
973c2be1 3// This file is part of Open CASCADE Technology software library.
b311480e 4//
d5f74e42 5// This library is free software; you can redistribute it and/or modify it under
6// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 7// by the Free Software Foundation, with special exception defined in the file
8// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9// distribution for complete text of the license and disclaimer of any warranty.
b311480e 10//
973c2be1 11// Alternatively, this file may be used under the terms of Open CASCADE
12// commercial license or contractual agreement.
b311480e 13
bc73b006 14#include <XCAFDoc_Datum.hxx>
7fd59977 15
42cf5bc1 16#include <Standard_GUID.hxx>
17#include <Standard_Type.hxx>
18#include <TCollection_HAsciiString.hxx>
19#include <TDF_Attribute.hxx>
20#include <TDF_Label.hxx>
1c9d3225 21#include <TDF_ChildIterator.hxx>
7fd59977 22#include <TDF_RelocationTable.hxx>
9ebaae37 23#include <TDataStd_AsciiString.hxx>
24#include <TDataStd_IntegerArray.hxx>
1c9d3225 25#include <TDataStd_RealArray.hxx>
9ebaae37 26#include <TDataStd_Integer.hxx>
27#include <TDataStd_Real.hxx>
28#include <TNaming_NamedShape.hxx>
29#include <TNaming_Builder.hxx>
5df609e7 30#include <TNaming_Tool.hxx>
31#include <TDataStd_Name.hxx>
9ebaae37 32
33#include <XCAFDimTolObjects_DatumObject.hxx>
34
92efcf78 35IMPLEMENT_STANDARD_RTTIEXT(XCAFDoc_Datum,TDF_Attribute)
36
9ebaae37 37enum ChildLab
38{
39 ChildLab_Name = 1,
6595eee7 40 ChildLab_Position,
9ebaae37 41 ChildLab_Modifiers,
42 ChildLab_ModifierWithValue,
1c9d3225 43 ChildLab_IsDTarget,
44 ChildLab_DTargetType,
fbcef69b 45 ChildLab_AxisLoc,
46 ChildLab_AxisN,
47 ChildLab_AxisRef,
1c9d3225 48 ChildLab_DTargetLength,
49 ChildLab_DTargetWidth,
6595eee7 50 ChildLab_DTargetNumber,
1c9d3225 51 ChildLab_DatumTarget,
fbcef69b 52 ChildLab_PlaneLoc,
53 ChildLab_PlaneN,
54 ChildLab_PlaneRef,
5df609e7 55 ChildLab_Pnt,
56 ChildLab_PntText,
57 ChildLab_Presentation
9ebaae37 58};
7fd59977 59
60//=======================================================================
61//function : XCAFDoc_Datum
62//purpose :
63//=======================================================================
7fd59977 64XCAFDoc_Datum::XCAFDoc_Datum()
65{
66}
67
68
69//=======================================================================
70//function : GetID
71//purpose :
72//=======================================================================
73
74const Standard_GUID& XCAFDoc_Datum::GetID()
75{
76 static Standard_GUID DID("58ed092e-44de-11d8-8776-001083004c77");
77 //static Standard_GUID ID("efd212e2-6dfd-11d4-b9c8-0060b0ee281b");
78 return DID;
79 //return ID;
80}
81
82
83//=======================================================================
84//function : Set
85//purpose :
86//=======================================================================
87
9ebaae37 88Handle(XCAFDoc_Datum) XCAFDoc_Datum::Set(const TDF_Label& theLabel,
89 const Handle(TCollection_HAsciiString)& theName,
90 const Handle(TCollection_HAsciiString)& theDescription,
91 const Handle(TCollection_HAsciiString)& theIdentification)
92{
93 Handle(XCAFDoc_Datum) aDatum;
94 if (!theLabel.FindAttribute(XCAFDoc_Datum::GetID(), aDatum)) {
95 aDatum = new XCAFDoc_Datum();
96 theLabel.AddAttribute(aDatum);
97 }
98 aDatum->Set(theName,theDescription,theIdentification);
99 return aDatum;
100}
101
102//=======================================================================
103//function : Set
104//purpose :
105//=======================================================================
106
107Handle(XCAFDoc_Datum) XCAFDoc_Datum::Set(const TDF_Label& theLabel)
7fd59977 108{
9ebaae37 109 Handle(XCAFDoc_Datum) aDatum;
110 if (!theLabel.FindAttribute(XCAFDoc_Datum::GetID(), aDatum)) {
111 aDatum = new XCAFDoc_Datum();
112 theLabel.AddAttribute(aDatum);
7fd59977 113 }
9ebaae37 114 return aDatum;
7fd59977 115}
116
117
118//=======================================================================
119//function : Set
120//purpose :
121//=======================================================================
122
9ebaae37 123void XCAFDoc_Datum::Set(const Handle(TCollection_HAsciiString)& theName,
124 const Handle(TCollection_HAsciiString)& theDescription,
125 const Handle(TCollection_HAsciiString)& theIdentification)
7fd59977 126{
9ebaae37 127 Backup();
128 myName = theName;
129 myDescription = theDescription;
130 myIdentification = theIdentification;
7fd59977 131}
132
133
134//=======================================================================
135//function : GetName
136//purpose :
137//=======================================================================
138
139Handle(TCollection_HAsciiString) XCAFDoc_Datum::GetName() const
140{
9ebaae37 141 if(myName.IsNull())
142 return new TCollection_HAsciiString();
7fd59977 143 return myName;
144}
145
7fd59977 146//=======================================================================
9ebaae37 147//function : GetDescriptio7n
7fd59977 148//purpose :
149//=======================================================================
150
151Handle(TCollection_HAsciiString) XCAFDoc_Datum::GetDescription() const
152{
153 return myDescription;
154}
155
156
157//=======================================================================
158//function : GetIdentification
159//purpose :
160//=======================================================================
161
162Handle(TCollection_HAsciiString) XCAFDoc_Datum::GetIdentification() const
163{
164 return myIdentification;
165}
166
9ebaae37 167//=======================================================================
168//function : SetObject
169//purpose :
170//=======================================================================
171
172void XCAFDoc_Datum::SetObject(const Handle(XCAFDimTolObjects_DatumObject)& theObject)
173{
174 Backup();
eacdb38f 175
176 if (theObject->GetSemanticName())
177 {
178 TCollection_ExtendedString str(theObject->GetSemanticName()->String());
179 TDataStd_Name::Set(Label(), str);
180 }
181
1c9d3225 182 TDF_ChildIterator anIter(Label());
183 for(;anIter.More(); anIter.Next())
184 {
185 anIter.Value().ForgetAllAttributes();
186 }
187 if (!theObject->GetName().IsNull() && !theObject->GetName()->IsEmpty())
5a1271c8 188 Handle(TDataStd_AsciiString) anAttName = TDataStd_AsciiString::Set(Label().FindChild(ChildLab_Name),
189 theObject->GetName()->String());
9ebaae37 190
fa53efef 191 Handle(TDataStd_Integer) aPosition = TDataStd_Integer::Set(Label().FindChild(ChildLab_Position),
5a1271c8 192 theObject->GetPosition());
6595eee7 193
1c9d3225 194 if(theObject->GetModifiers().Length() > 0)
5a1271c8 195 {
9ebaae37 196 Handle(TColStd_HArray1OfInteger) anArr = new TColStd_HArray1OfInteger(1,theObject->GetModifiers().Length());
197 for(Standard_Integer i = 1; i <= theObject->GetModifiers().Length(); i++)
198 anArr->SetValue(i,theObject->GetModifiers().Value(i));
5a1271c8 199 Handle(TDataStd_IntegerArray) aModifiers = TDataStd_IntegerArray::Set(Label().FindChild(ChildLab_Modifiers),
200 1, theObject->GetModifiers().Length());
201 if(!aModifiers.IsNull())
202 aModifiers->ChangeArray(anArr);
9ebaae37 203 }
204
205 XCAFDimTolObjects_DatumModifWithValue aM;
206 Standard_Real aV;
207 theObject->GetModifierWithValue(aM, aV);
208 if(aM != XCAFDimTolObjects_DatumModifWithValue_None)
209 {
fa53efef 210 Handle(TDataStd_Integer) aModifierWithValueM =
5a1271c8 211 TDataStd_Integer::Set(Label().FindChild(ChildLab_ModifierWithValue), aM);
fa53efef 212
213 Handle(TDataStd_Real) aModifierWithValueV =
5a1271c8 214 TDataStd_Real::Set(Label().FindChild(ChildLab_ModifierWithValue), aV);
9ebaae37 215 }
9ebaae37 216
fa53efef 217 Handle(TDataStd_Integer) aIsTarget = TDataStd_Integer::Set(Label().FindChild(ChildLab_IsDTarget),
5a1271c8 218 theObject->IsDatumTarget());
1c9d3225 219
220 if(theObject->IsDatumTarget())
9ebaae37 221 {
fa53efef 222 Handle(TDataStd_Integer) aType = TDataStd_Integer::Set(Label().FindChild(ChildLab_DTargetType),
5a1271c8 223 theObject->GetDatumTargetType());
1c9d3225 224
225 if(theObject->GetDatumTargetType() == XCAFDimTolObjects_DatumTargetType_Area)
226 {
227 if(!theObject->GetDatumTarget().IsNull())
228 {
229 TNaming_Builder tnBuild(Label().FindChild(ChildLab_DatumTarget));
230 tnBuild.Generated(theObject->GetDatumTarget());
231 }
232 }
400af1bc 233 else if (theObject->HasDatumTargetParams())
1c9d3225 234 {
1c9d3225 235 gp_Ax2 anAx = theObject->GetDatumTargetAxis();
fbcef69b 236 Handle(TColStd_HArray1OfReal) aLocArr = new TColStd_HArray1OfReal(1, 3);
237 for (Standard_Integer i = 1; i <= 3; i++)
238 aLocArr->SetValue(i, anAx.Location().Coord(i));
239 Handle(TDataStd_RealArray) aLoc = TDataStd_RealArray::Set(Label().FindChild(ChildLab_AxisLoc), 1, 3);
240 if (!aLoc.IsNull())
241 aLoc->ChangeArray(aLocArr);
242
243 Handle(TColStd_HArray1OfReal) aNArr = new TColStd_HArray1OfReal(1, 3);
244 for (Standard_Integer i = 1; i <= 3; i++)
245 aNArr->SetValue(i, anAx.Direction().Coord(i));
246 Handle(TDataStd_RealArray) aN = TDataStd_RealArray::Set(Label().FindChild(ChildLab_AxisN), 1, 3);
247 if (!aN.IsNull())
248 aN->ChangeArray(aNArr);
249
250 Handle(TColStd_HArray1OfReal) aRArr = new TColStd_HArray1OfReal(1, 3);
251 for (Standard_Integer i = 1; i <= 3; i++)
252 aRArr->SetValue(i, anAx.XDirection().Coord(i));
253 Handle(TDataStd_RealArray) aR = TDataStd_RealArray::Set(Label().FindChild(ChildLab_AxisRef), 1, 3);
254 if (!aR.IsNull())
255 aR->ChangeArray(aRArr);
1c9d3225 256
257 if(theObject->GetDatumTargetType() != XCAFDimTolObjects_DatumTargetType_Point)
258 {
fa53efef 259 Handle(TDataStd_Real) aLen = TDataStd_Real::Set(Label().FindChild(ChildLab_DTargetLength),
5a1271c8 260 theObject->GetDatumTargetLength());
1c9d3225 261 if(theObject->GetDatumTargetType() == XCAFDimTolObjects_DatumTargetType_Rectangle)
fa53efef 262 Handle(TDataStd_Real) aWidth = TDataStd_Real::Set(Label().FindChild(ChildLab_DTargetWidth),
5a1271c8 263 theObject->GetDatumTargetWidth());
1c9d3225 264 }
265 }
fa53efef 266 Handle(TDataStd_Integer) aNum = TDataStd_Integer::Set(Label().FindChild(ChildLab_DTargetNumber),
5a1271c8 267 theObject->GetDatumTargetNumber());
9ebaae37 268 }
5df609e7 269
270 if (theObject->HasPlane())
271 {
fbcef69b 272 gp_Ax2 anAx = theObject->GetPlane();
273
274 Handle(TColStd_HArray1OfReal) aLocArr = new TColStd_HArray1OfReal(1, 3);
275 for (Standard_Integer i = 1; i <= 3; i++)
276 aLocArr->SetValue(i, anAx.Location().Coord(i));
277 Handle(TDataStd_RealArray) aLoc = TDataStd_RealArray::Set(Label().FindChild(ChildLab_PlaneLoc), 1, 3);
278 if (!aLoc.IsNull())
279 aLoc->ChangeArray(aLocArr);
280
281 Handle(TColStd_HArray1OfReal) aNArr = new TColStd_HArray1OfReal(1, 3);
282 for (Standard_Integer i = 1; i <= 3; i++)
283 aNArr->SetValue(i, anAx.Direction().Coord(i));
284 Handle(TDataStd_RealArray) aN = TDataStd_RealArray::Set(Label().FindChild(ChildLab_PlaneN), 1, 3);
285 if (!aN.IsNull())
286 aN->ChangeArray(aNArr);
287
288 Handle(TColStd_HArray1OfReal) aRArr = new TColStd_HArray1OfReal(1, 3);
289 for (Standard_Integer i = 1; i <= 3; i++)
290 aRArr->SetValue(i, anAx.XDirection().Coord(i));
291 Handle(TDataStd_RealArray) aR = TDataStd_RealArray::Set(Label().FindChild(ChildLab_PlaneRef), 1, 3);
292 if (!aR.IsNull())
293 aR->ChangeArray(aRArr);
5df609e7 294 }
295
296 if (theObject->HasPoint())
297 {
fbcef69b 298 gp_Pnt aPnt = theObject->GetPoint();
299
300 Handle(TColStd_HArray1OfReal) aLocArr = new TColStd_HArray1OfReal(1, 3);
301 for (Standard_Integer i = 1; i <= 3; i++)
302 aLocArr->SetValue(i, aPnt.Coord(i));
303 Handle(TDataStd_RealArray) aLoc = TDataStd_RealArray::Set(Label().FindChild(ChildLab_Pnt), 1, 3);
304 if (!aLoc.IsNull())
305 aLoc->ChangeArray(aLocArr);
5df609e7 306 }
307
308 if (theObject->HasPointText())
309 {
fbcef69b 310 gp_Pnt aPntText = theObject->GetPointTextAttach();
311
312 Handle(TColStd_HArray1OfReal) aLocArr = new TColStd_HArray1OfReal(1, 3);
313 for (Standard_Integer i = 1; i <= 3; i++)
314 aLocArr->SetValue(i, aPntText.Coord(i));
315 Handle(TDataStd_RealArray) aLoc = TDataStd_RealArray::Set(Label().FindChild(ChildLab_PntText), 1, 3);
316 if (!aLoc.IsNull())
317 aLoc->ChangeArray(aLocArr);
5df609e7 318 }
b8bf9595 319
5df609e7 320 TopoDS_Shape aPresentation = theObject->GetPresentation();
321 if( !aPresentation.IsNull())
322 {
323 TDF_Label aLPres = Label().FindChild( ChildLab_Presentation);
324 TNaming_Builder tnBuild(aLPres);
325 tnBuild.Generated(aPresentation);
326 Handle(TCollection_HAsciiString) aName = theObject->GetPresentationName();
327 if( !aName.IsNull() )
328 {
329 TCollection_ExtendedString str ( aName->String() );
330 TDataStd_Name::Set ( aLPres, str );
331 }
332 }
333
9ebaae37 334}
335
336//=======================================================================
337//function : GetObject
338//purpose :
339//=======================================================================
340
341Handle(XCAFDimTolObjects_DatumObject) XCAFDoc_Datum::GetObject() const
342{
343 Handle(XCAFDimTolObjects_DatumObject) anObj = new XCAFDimTolObjects_DatumObject();
344
eacdb38f 345 Handle(TDataStd_Name) aSemanticNameAttr;
346 Handle(TCollection_HAsciiString) aSemanticName;
347 if (Label().FindAttribute(TDataStd_Name::GetID(), aSemanticNameAttr))
348 {
349 const TCollection_ExtendedString& aName = aSemanticNameAttr->Get();
350 if (!aName.IsEmpty())
351 aSemanticName = new TCollection_HAsciiString(aName);
352 }
353 anObj->SetSemanticName(aSemanticName);
354
9ebaae37 355 Handle(TDataStd_AsciiString) anAttName;
356 if(Label().FindChild(ChildLab_Name).FindAttribute(TDataStd_AsciiString::GetID(), anAttName))
357 {
358 Handle(TCollection_HAsciiString) aStr = new TCollection_HAsciiString(anAttName->Get());
359 anObj->SetName(aStr);
360 }
361
362 Handle(TDataStd_IntegerArray) anArr;
363 if(Label().FindChild(ChildLab_Modifiers).FindAttribute(TDataStd_IntegerArray::GetID(), anArr)
364 && !anArr->Array().IsNull())
365 {
366 XCAFDimTolObjects_DatumModifiersSequence aModifiers;
367 for(Standard_Integer i = 1; i <= anArr->Length(); i++)
368 aModifiers.Append((XCAFDimTolObjects_DatumSingleModif)anArr->Value(i));
369 anObj->SetModifiers(aModifiers);
370 }
371
372 Handle(TDataStd_Integer) aModifierWithValueM;
373 if(Label().FindChild(ChildLab_ModifierWithValue).FindAttribute(TDataStd_Integer::GetID(), aModifierWithValueM))
374 {
375 Handle(TDataStd_Real) aModifierWithValueV;
376 if(Label().FindChild(ChildLab_ModifierWithValue).FindAttribute(TDataStd_Real::GetID(), aModifierWithValueV))
377 {
378 anObj->SetModifierWithValue((XCAFDimTolObjects_DatumModifWithValue)aModifierWithValueM->Get(),aModifierWithValueV->Get());
379 }
380 }
381
6595eee7 382 Handle(TDataStd_Integer) aPosition;
383 if(Label().FindChild(ChildLab_Position).FindAttribute(TDataStd_Integer::GetID(), aPosition))
384 {
385 anObj->SetPosition(aPosition->Get());
386 }
387
fbcef69b 388 Handle(TDataStd_RealArray) aLoc, aN, aR;
389 if (Label().FindChild(ChildLab_PlaneLoc).FindAttribute(TDataStd_RealArray::GetID(), aLoc) && aLoc->Length() == 3 &&
390 Label().FindChild(ChildLab_PlaneN).FindAttribute(TDataStd_RealArray::GetID(), aN) && aN->Length() == 3 &&
391 Label().FindChild(ChildLab_PlaneRef).FindAttribute(TDataStd_RealArray::GetID(), aR) && aR->Length() == 3)
5df609e7 392 {
fbcef69b 393 gp_Pnt aL(aLoc->Value(aLoc->Lower()), aLoc->Value(aLoc->Lower() + 1), aLoc->Value(aLoc->Lower() + 2));
394 gp_Dir aD(aN->Value(aN->Lower()), aN->Value(aN->Lower() + 1), aN->Value(aN->Lower() + 2));
395 gp_Dir aDR(aR->Value(aR->Lower()), aR->Value(aR->Lower() + 1), aR->Value(aR->Lower() + 2));
396 gp_Ax2 anAx(aL, aD, aDR);
5df609e7 397 anObj->SetPlane(anAx);
398 }
399
fbcef69b 400 Handle(TDataStd_RealArray) aPnt;
401 if (Label().FindChild(ChildLab_Pnt).FindAttribute(TDataStd_RealArray::GetID(), aPnt) && aPnt->Length() == 3)
5df609e7 402 {
fbcef69b 403 gp_Pnt aP(aLoc->Value(aPnt->Lower()), aPnt->Value(aPnt->Lower() + 1), aPnt->Value(aPnt->Lower() + 2));
404 anObj->SetPoint(aP);
5df609e7 405 }
406
fbcef69b 407 Handle(TDataStd_RealArray) aPntText;
408 if (Label().FindChild(ChildLab_PntText).FindAttribute(TDataStd_RealArray::GetID(), aPntText) && aPntText->Length() == 3)
5df609e7 409 {
fbcef69b 410 gp_Pnt aP(aPntText->Value(aPntText->Lower()), aPntText->Value(aPntText->Lower() + 1), aPntText->Value(aPntText->Lower() + 2));
411 anObj->SetPointTextAttach(aP);
5df609e7 412 }
413
1c9d3225 414 Handle(TDataStd_Integer) aIsDTarget;
415 if(Label().FindChild(ChildLab_IsDTarget).FindAttribute(TDataStd_Integer::GetID(), aIsDTarget))
416 {
417 anObj->IsDatumTarget((aIsDTarget->Get() != 0));
418 }
419 else
420 {
421 return anObj;
422 }
423
424 if (aIsDTarget->Get() != 0)
9ebaae37 425 {
1c9d3225 426 Handle(TDataStd_Integer) aDTargetType;
427 if(Label().FindChild(ChildLab_DTargetType).FindAttribute(TDataStd_Integer::GetID(), aDTargetType))
428 {
429 anObj->SetDatumTargetType((XCAFDimTolObjects_DatumTargetType)aDTargetType->Get());
430 if(anObj->GetDatumTargetType() == XCAFDimTolObjects_DatumTargetType_Area)
431 {
432 Handle(TNaming_NamedShape) aDatumTarget;
433 if(Label().FindChild(ChildLab_DatumTarget).FindAttribute(TNaming_NamedShape::GetID(), aDatumTarget))
434 {
435 anObj->SetDatumTarget(aDatumTarget->Get());
436 }
437 }
438 else
439 {
fbcef69b 440 if (Label().FindChild(ChildLab_AxisLoc).FindAttribute(TDataStd_RealArray::GetID(), aLoc) && aLoc->Length() == 3 &&
441 Label().FindChild(ChildLab_AxisN).FindAttribute(TDataStd_RealArray::GetID(), aN) && aN->Length() == 3 &&
442 Label().FindChild(ChildLab_AxisRef).FindAttribute(TDataStd_RealArray::GetID(), aR) && aR->Length() == 3)
1c9d3225 443 {
fbcef69b 444 gp_Pnt aL(aLoc->Value(aLoc->Lower()), aLoc->Value(aLoc->Lower() + 1), aLoc->Value(aLoc->Lower() + 2));
445 gp_Dir aD(aN->Value(aN->Lower()), aN->Value(aN->Lower() + 1), aN->Value(aN->Lower() + 2));
446 gp_Dir aDR(aR->Value(aR->Lower()), aR->Value(aR->Lower() + 1), aR->Value(aR->Lower() + 2));
447 gp_Ax2 anAx(aL, aD, aDR);
1c9d3225 448 anObj->SetDatumTargetAxis(anAx);
449 }
450
451 if(anObj->GetDatumTargetType() != XCAFDimTolObjects_DatumTargetType_Point)
452 {
453 Handle(TDataStd_Real) aLen;
6595eee7 454 if(Label().FindChild(ChildLab_DTargetLength).FindAttribute(TDataStd_Real::GetID(), aLen))
1c9d3225 455 {
456 anObj->SetDatumTargetLength(aLen->Get());
457 }
458 if(anObj->GetDatumTargetType() == XCAFDimTolObjects_DatumTargetType_Rectangle)
459 {
460 Handle(TDataStd_Real) aWidth;
6595eee7 461 if(Label().FindChild(ChildLab_DTargetWidth).FindAttribute(TDataStd_Real::GetID(), aWidth))
1c9d3225 462 {
463 anObj->SetDatumTargetWidth(aWidth->Get());
464 }
465 }
466 }
467 }
468 }
6595eee7 469 Handle(TDataStd_Integer) aNum;
470 if(Label().FindChild(ChildLab_DTargetNumber).FindAttribute(TDataStd_Integer::GetID(), aNum))
471 {
472 anObj->SetDatumTargetNumber(aNum->Get());
473 }
474 else
475 {
476 anObj->SetDatumTargetNumber(0);
477 }
9ebaae37 478 }
479
5df609e7 480 Handle(TNaming_NamedShape) aNS;
481 TDF_Label aLPres = Label().FindChild( ChildLab_Presentation);
482 if ( aLPres.FindAttribute(TNaming_NamedShape::GetID(), aNS) )
483 {
484
485 TopoDS_Shape aPresentation = TNaming_Tool::GetShape(aNS);
486 if( !aPresentation.IsNull())
487 {
488 Handle(TDataStd_Name) aNameAtrr;
489 Handle(TCollection_HAsciiString) aPresentName;
490 if (aLPres.FindAttribute(TDataStd_Name::GetID(),aNameAtrr))
491 {
492 const TCollection_ExtendedString& aName = aNameAtrr->Get();
493
494 if( !aName.IsEmpty())
495 aPresentName = new TCollection_HAsciiString(aName);
496 }
497
498 anObj->SetPresentation(aPresentation, aPresentName);
499 }
500 }
9ebaae37 501 return anObj;
502}
7fd59977 503
504//=======================================================================
505//function : ID
506//purpose :
507//=======================================================================
508
509const Standard_GUID& XCAFDoc_Datum::ID() const
510{
511 return GetID();
512}
513
514
515//=======================================================================
516//function : Restore
517//purpose :
518//=======================================================================
519
9ebaae37 520void XCAFDoc_Datum::Restore(const Handle(TDF_Attribute)& theWith)
7fd59977 521{
9ebaae37 522 myName = Handle(XCAFDoc_Datum)::DownCast(theWith)->GetName();
523 myDescription = Handle(XCAFDoc_Datum)::DownCast(theWith)->GetDescription();
524 myIdentification = Handle(XCAFDoc_Datum)::DownCast(theWith)->GetIdentification();
7fd59977 525}
526
527
528//=======================================================================
529//function : NewEmpty
530//purpose :
531//=======================================================================
532
533Handle(TDF_Attribute) XCAFDoc_Datum::NewEmpty() const
534{
535 return new XCAFDoc_Datum();
536}
537
538
539//=======================================================================
540//function : Paste
541//purpose :
542//=======================================================================
543
9ebaae37 544void XCAFDoc_Datum::Paste(const Handle(TDF_Attribute)& theInto,
7fd59977 545 const Handle(TDF_RelocationTable)& /*RT*/) const
546{
9ebaae37 547 Handle(XCAFDoc_Datum)::DownCast(theInto)->Set(myName,myDescription,myIdentification);
7fd59977 548}
549
bc73b006 550//=======================================================================
551//function : DumpJson
552//purpose :
553//=======================================================================
554void XCAFDoc_Datum::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
555{
556 OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
557
558 OCCT_DUMP_BASE_CLASS (theOStream, theDepth, TDF_Attribute)
559
560 OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myName.get())
561 OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myDescription.get())
562 OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myIdentification.get())
563}