0031313: Foundation Classes - Dump improvement for classes
[occt.git] / src / XmlTObjDrivers / XmlTObjDrivers_XYZDriver.cxx
1 // Created on: 2004-11-24
2 // Created by: Edward AGAPOV
3 // Copyright (c) 2004-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 // The original implementation Copyright: (C) RINA S.p.A
17
18
19 #include <XmlTObjDrivers_XYZDriver.hxx>
20
21 #include <Message_Messenger.hxx>
22 #include <TDF_Attribute.hxx>
23
24 #include <XmlObjMgt.hxx>
25 #include <XmlObjMgt_Persistent.hxx>
26 #include <XmlObjMgt_RRelocationTable.hxx>
27
28 #include <TObj_TXYZ.hxx>
29
30
31 IMPLEMENT_STANDARD_RTTIEXT(XmlTObjDrivers_XYZDriver,XmlMDF_ADriver)
32 IMPLEMENT_DOMSTRING (CoordX,             "X")
33 IMPLEMENT_DOMSTRING (CoordY,             "Y")
34 IMPLEMENT_DOMSTRING (CoordZ,             "Z")
35
36 //=======================================================================
37 //function : XmlTObjDrivers_XYZDriver
38 //purpose  : constructor
39 //=======================================================================
40
41 XmlTObjDrivers_XYZDriver::XmlTObjDrivers_XYZDriver
42                          (const Handle(Message_Messenger)& theMessageDriver)
43 : XmlMDF_ADriver( theMessageDriver, NULL)
44 {
45 }
46
47 //=======================================================================
48 //function : NewEmpty
49 //purpose  : Creates a new attribute
50 //=======================================================================
51
52 Handle(TDF_Attribute) XmlTObjDrivers_XYZDriver::NewEmpty() const
53 {
54   return new TObj_TXYZ;
55 }
56
57 //=======================================================================
58 //function : Paste
59 //purpose  : Translate the contents of <aSource> and put it
60 //           into <aTarget>, using the relocation table
61 //           <aRelocTable> to keep the sharings.
62 //=======================================================================
63
64 Standard_Boolean XmlTObjDrivers_XYZDriver::Paste
65                          (const XmlObjMgt_Persistent&  Source,
66                           const Handle(TDF_Attribute)& Target,
67                           XmlObjMgt_RRelocationTable&  /*RelocTable*/) const
68 {
69   const XmlObjMgt_Element& anElement = Source;
70   
71   // get co-ordinates
72   TCollection_AsciiString CoordX = anElement.getAttribute(::CoordX());
73   TCollection_AsciiString CoordY = anElement.getAttribute(::CoordY());
74   TCollection_AsciiString CoordZ = anElement.getAttribute(::CoordZ());
75
76   // creating gp_XYZ
77   gp_XYZ aXYZ;
78   Standard_CString aStr;
79   Standard_Real aCoord;
80
81   aStr = CoordX.ToCString();
82   if(!XmlObjMgt::GetReal( aStr, aCoord )) return Standard_False;
83   aXYZ.SetX(aCoord);
84
85   aStr = CoordY.ToCString();
86   if(!XmlObjMgt::GetReal( aStr, aCoord )) return Standard_False;
87   aXYZ.SetY(aCoord);
88
89   aStr = CoordZ.ToCString();
90   if(!XmlObjMgt::GetReal( aStr, aCoord )) return Standard_False;
91   aXYZ.SetZ(aCoord);
92
93   // setting gp_XYZ
94   Handle(TObj_TXYZ) aTarget = Handle(TObj_TXYZ)::DownCast (Target);
95   aTarget->Set ( aXYZ );
96
97   return Standard_True;
98 }
99
100 //=======================================================================
101 //function : Paste
102 //purpose  : Translate the contents of <aSource> and put it
103 //           into <aTarget>, using the relocation table
104 //           <aRelocTable> to keep the sharings.
105 //           Store master and referred labels as entry, the other model referred
106 //           as entry in model-container
107 //=======================================================================
108
109 void XmlTObjDrivers_XYZDriver::Paste
110                          (const Handle(TDF_Attribute)& Source,
111                           XmlObjMgt_Persistent&        Target,
112                           XmlObjMgt_SRelocationTable&  /*RelocTable*/) const
113 {
114   Handle(TObj_TXYZ) aSource =
115     Handle(TObj_TXYZ)::DownCast (Source);
116
117   if(aSource.IsNull()) return;
118
119   gp_XYZ aXYZ = aSource->Get();
120
121   TCollection_AsciiString aCoord;
122
123   // co-ordinate X
124   aCoord = TCollection_AsciiString( aXYZ.X() );
125   Target.Element().setAttribute(::CoordX(), aCoord.ToCString());
126
127   // co-ordinate Y
128   aCoord = TCollection_AsciiString( aXYZ.Y() );
129   Target.Element().setAttribute(::CoordY(), aCoord.ToCString());
130
131   // co-ordinate Z
132   aCoord = TCollection_AsciiString( aXYZ.Z() );
133   Target.Element().setAttribute(::CoordZ(), aCoord.ToCString());
134 }