0030700: Visualization, TKOpenGl - support PBR Metallic-Roughness shading model
[occt.git] / src / XCAFDoc / XCAFDoc_Datum.cxx
1 // Copyright (c) 1999-2014 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
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
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.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14
15 #include <Standard_GUID.hxx>
16 #include <Standard_Type.hxx>
17 #include <TCollection_HAsciiString.hxx>
18 #include <TDF_Attribute.hxx>
19 #include <TDF_Label.hxx>
20 #include <TDF_ChildIterator.hxx>
21 #include <TDF_RelocationTable.hxx>
22 #include <XCAFDoc_Datum.hxx>
23 #include <TDataStd_AsciiString.hxx>
24 #include <TDataStd_IntegerArray.hxx>
25 #include <TDataStd_RealArray.hxx>
26 #include <TDataStd_Integer.hxx>
27 #include <TDataStd_Real.hxx>
28 #include <TNaming_NamedShape.hxx>
29 #include <TNaming_Builder.hxx>
30 #include <TNaming_Tool.hxx>
31 #include <TDataStd_Name.hxx>
32
33 #include <XCAFDimTolObjects_DatumObject.hxx>
34
35 IMPLEMENT_STANDARD_RTTIEXT(XCAFDoc_Datum,TDF_Attribute)
36
37 enum ChildLab
38 {
39   ChildLab_Name = 1,
40   ChildLab_Position,
41   ChildLab_Modifiers,
42   ChildLab_ModifierWithValue,
43   ChildLab_IsDTarget,
44   ChildLab_DTargetType,
45   ChildLab_AxisLoc,
46   ChildLab_AxisN,
47   ChildLab_AxisRef,
48   ChildLab_DTargetLength,
49   ChildLab_DTargetWidth,
50   ChildLab_DTargetNumber,
51   ChildLab_DatumTarget,
52   ChildLab_PlaneLoc,
53   ChildLab_PlaneN,
54   ChildLab_PlaneRef,
55   ChildLab_Pnt,
56   ChildLab_PntText,
57   ChildLab_Presentation
58 };
59
60 //=======================================================================
61 //function : XCAFDoc_Datum
62 //purpose  : 
63 //=======================================================================
64 XCAFDoc_Datum::XCAFDoc_Datum()
65 {
66 }
67
68
69 //=======================================================================
70 //function : GetID
71 //purpose  : 
72 //=======================================================================
73
74 const 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
88 Handle(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
107 Handle(XCAFDoc_Datum) XCAFDoc_Datum::Set(const TDF_Label& theLabel) 
108 {
109   Handle(XCAFDoc_Datum) aDatum;
110   if (!theLabel.FindAttribute(XCAFDoc_Datum::GetID(), aDatum)) {
111     aDatum = new XCAFDoc_Datum();
112     theLabel.AddAttribute(aDatum);
113   }
114   return aDatum;
115 }
116
117
118 //=======================================================================
119 //function : Set
120 //purpose  : 
121 //=======================================================================
122
123 void XCAFDoc_Datum::Set(const Handle(TCollection_HAsciiString)& theName,
124                         const Handle(TCollection_HAsciiString)& theDescription,
125                         const Handle(TCollection_HAsciiString)& theIdentification) 
126 {
127   Backup();
128   myName = theName;
129   myDescription = theDescription;
130   myIdentification = theIdentification;
131 }
132
133
134 //=======================================================================
135 //function : GetName
136 //purpose  : 
137 //=======================================================================
138
139 Handle(TCollection_HAsciiString) XCAFDoc_Datum::GetName() const
140 {
141   if(myName.IsNull())
142     return new TCollection_HAsciiString();
143   return myName;
144 }
145
146 //=======================================================================
147 //function : GetDescriptio7n
148 //purpose  : 
149 //=======================================================================
150
151 Handle(TCollection_HAsciiString) XCAFDoc_Datum::GetDescription() const
152 {
153   return myDescription;
154 }
155
156
157 //=======================================================================
158 //function : GetIdentification
159 //purpose  : 
160 //=======================================================================
161
162 Handle(TCollection_HAsciiString) XCAFDoc_Datum::GetIdentification() const
163 {
164   return myIdentification;
165 }
166
167 //=======================================================================
168 //function : SetObject
169 //purpose  : 
170 //=======================================================================
171
172 void XCAFDoc_Datum::SetObject(const Handle(XCAFDimTolObjects_DatumObject)& theObject)
173 {
174   Backup();
175
176   if (theObject->GetSemanticName())
177   {
178     TCollection_ExtendedString str(theObject->GetSemanticName()->String());
179     TDataStd_Name::Set(Label(), str);
180   }
181
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())
188     Handle(TDataStd_AsciiString) anAttName = TDataStd_AsciiString::Set(Label().FindChild(ChildLab_Name),
189                                              theObject->GetName()->String());
190
191   Handle(TDataStd_Integer) aPosition = TDataStd_Integer::Set(Label().FindChild(ChildLab_Position),
192                                        theObject->GetPosition());
193
194   if(theObject->GetModifiers().Length() > 0)
195   {   
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));
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);
203   }
204
205   XCAFDimTolObjects_DatumModifWithValue aM;
206   Standard_Real aV;
207   theObject->GetModifierWithValue(aM, aV);
208   if(aM != XCAFDimTolObjects_DatumModifWithValue_None)
209   {
210     Handle(TDataStd_Integer) aModifierWithValueM = 
211       TDataStd_Integer::Set(Label().FindChild(ChildLab_ModifierWithValue), aM);
212
213     Handle(TDataStd_Real) aModifierWithValueV = 
214       TDataStd_Real::Set(Label().FindChild(ChildLab_ModifierWithValue), aV);
215   }
216
217   Handle(TDataStd_Integer) aIsTarget = TDataStd_Integer::Set(Label().FindChild(ChildLab_IsDTarget), 
218                                        theObject->IsDatumTarget());
219
220   if(theObject->IsDatumTarget())
221   {
222     Handle(TDataStd_Integer) aType = TDataStd_Integer::Set(Label().FindChild(ChildLab_DTargetType), 
223                                      theObject->GetDatumTargetType());
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     }
233     else if (theObject->HasDatumTargetParams())
234     {
235       gp_Ax2 anAx = theObject->GetDatumTargetAxis();
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);
256
257       if(theObject->GetDatumTargetType() != XCAFDimTolObjects_DatumTargetType_Point)
258       {
259         Handle(TDataStd_Real) aLen = TDataStd_Real::Set(Label().FindChild(ChildLab_DTargetLength),
260                                      theObject->GetDatumTargetLength());
261         if(theObject->GetDatumTargetType() == XCAFDimTolObjects_DatumTargetType_Rectangle)
262           Handle(TDataStd_Real) aWidth = TDataStd_Real::Set(Label().FindChild(ChildLab_DTargetWidth),
263                                          theObject->GetDatumTargetWidth());
264       }
265     }
266     Handle(TDataStd_Integer) aNum = TDataStd_Integer::Set(Label().FindChild(ChildLab_DTargetNumber), 
267                                     theObject->GetDatumTargetNumber());
268   }
269
270   if (theObject->HasPlane())
271   {
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);
294   }
295
296   if (theObject->HasPoint())
297   {
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);
306   }
307
308   if (theObject->HasPointText())
309   {
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);
318   }
319
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  
334 }
335
336 //=======================================================================
337 //function : GetObject
338 //purpose  : 
339 //=======================================================================
340
341 Handle(XCAFDimTolObjects_DatumObject) XCAFDoc_Datum::GetObject() const
342 {
343   Handle(XCAFDimTolObjects_DatumObject) anObj = new XCAFDimTolObjects_DatumObject();
344
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
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
382   Handle(TDataStd_Integer) aPosition;
383   if(Label().FindChild(ChildLab_Position).FindAttribute(TDataStd_Integer::GetID(), aPosition))
384   {
385     anObj->SetPosition(aPosition->Get());
386   }
387
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)
392   {
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);
397     anObj->SetPlane(anAx);
398   }
399
400   Handle(TDataStd_RealArray) aPnt;
401   if (Label().FindChild(ChildLab_Pnt).FindAttribute(TDataStd_RealArray::GetID(), aPnt) && aPnt->Length() == 3)
402   {
403     gp_Pnt aP(aLoc->Value(aPnt->Lower()), aPnt->Value(aPnt->Lower() + 1), aPnt->Value(aPnt->Lower() + 2));
404     anObj->SetPoint(aP);
405   }
406
407   Handle(TDataStd_RealArray) aPntText;
408   if (Label().FindChild(ChildLab_PntText).FindAttribute(TDataStd_RealArray::GetID(), aPntText) && aPntText->Length() == 3)
409   {
410     gp_Pnt aP(aPntText->Value(aPntText->Lower()), aPntText->Value(aPntText->Lower() + 1), aPntText->Value(aPntText->Lower() + 2));
411     anObj->SetPointTextAttach(aP);
412   }
413
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)
425   {
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       {
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)
443         {
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);
448           anObj->SetDatumTargetAxis(anAx);
449         }
450
451         if(anObj->GetDatumTargetType() != XCAFDimTolObjects_DatumTargetType_Point)
452         {
453           Handle(TDataStd_Real) aLen;
454           if(Label().FindChild(ChildLab_DTargetLength).FindAttribute(TDataStd_Real::GetID(), aLen))
455           {
456             anObj->SetDatumTargetLength(aLen->Get());
457           }
458           if(anObj->GetDatumTargetType() == XCAFDimTolObjects_DatumTargetType_Rectangle)
459           {
460             Handle(TDataStd_Real) aWidth;
461             if(Label().FindChild(ChildLab_DTargetWidth).FindAttribute(TDataStd_Real::GetID(), aWidth))
462             {
463               anObj->SetDatumTargetWidth(aWidth->Get());
464             }
465           }
466         }
467       }
468     }
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     }
478   }
479
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   }
501   return anObj;
502 }
503
504 //=======================================================================
505 //function : ID
506 //purpose  : 
507 //=======================================================================
508
509 const Standard_GUID& XCAFDoc_Datum::ID() const
510 {
511   return GetID();
512 }
513
514
515 //=======================================================================
516 //function : Restore
517 //purpose  : 
518 //=======================================================================
519
520 void XCAFDoc_Datum::Restore(const Handle(TDF_Attribute)& theWith) 
521 {
522   myName = Handle(XCAFDoc_Datum)::DownCast(theWith)->GetName();
523   myDescription = Handle(XCAFDoc_Datum)::DownCast(theWith)->GetDescription();
524   myIdentification = Handle(XCAFDoc_Datum)::DownCast(theWith)->GetIdentification();
525 }
526
527
528 //=======================================================================
529 //function : NewEmpty
530 //purpose  : 
531 //=======================================================================
532
533 Handle(TDF_Attribute) XCAFDoc_Datum::NewEmpty() const
534 {
535   return new XCAFDoc_Datum();
536 }
537
538
539 //=======================================================================
540 //function : Paste
541 //purpose  : 
542 //=======================================================================
543
544 void XCAFDoc_Datum::Paste(const Handle(TDF_Attribute)& theInto,
545                           const Handle(TDF_RelocationTable)& /*RT*/) const
546 {
547   Handle(XCAFDoc_Datum)::DownCast(theInto)->Set(myName,myDescription,myIdentification);
548 }
549