1 // Created on: 2001-09-04
2 // Created by: Julia DOROVSKIKH
3 // Copyright (c) 2001-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 #include <XmlMDataXtd_PresentationDriver.hxx>
17
18 #include <Message_Messenger.hxx>
19 #include <Standard_Type.hxx>
20 #include <TDF_Attribute.hxx>
21 #include <XmlObjMgt.hxx>
22 #include <XmlObjMgt_Persistent.hxx>
23 #include <TDataXtd_Presentation.hxx>
24 #include <Quantity_Color.hxx>
25
IMPLEMENT_STANDARD_RTTIEXT(XmlMDataXtd_PresentationDriver,XmlMDF_ADriver)26 IMPLEMENT_STANDARD_RTTIEXT(XmlMDataXtd_PresentationDriver,XmlMDF_ADriver)
27
28 IMPLEMENT_DOMSTRING (GuidString, "guid")
29 IMPLEMENT_DOMSTRING (IsDisplayedString, "isdisplayed")
30 IMPLEMENT_DOMSTRING (ColorString, "color")
31 IMPLEMENT_DOMSTRING (MaterialString, "material")
32 IMPLEMENT_DOMSTRING (TransparencyString,"transparency")
33 IMPLEMENT_DOMSTRING (WidthString, "width")
34 IMPLEMENT_DOMSTRING (ModeString, "mode")
35
36 IMPLEMENT_DOMSTRING (DisplayedString, "true")
37
38 //=======================================================================
39 //function : XmlMDataXtd_PresentationDriver
40 //purpose : Constructor
41 //=======================================================================
42 XmlMDataXtd_PresentationDriver::XmlMDataXtd_PresentationDriver
43 (const Handle(Message_Messenger)& theMsgDriver)
44 : XmlMDF_ADriver (theMsgDriver, NULL)
45 {}
46
47 //=======================================================================
48 //function : NewEmpty
49 //purpose :
50 //=======================================================================
Handle(TDF_Attribute)51 Handle(TDF_Attribute) XmlMDataXtd_PresentationDriver::NewEmpty() const
52 {
53 return (new TDataXtd_Presentation());
54 }
55
56 //=======================================================================
57 //function : Paste
58 //purpose : persistent -> transient (retrieve)
59 //=======================================================================
Paste(const XmlObjMgt_Persistent & theSource,const Handle (TDF_Attribute)& theTarget,XmlObjMgt_RRelocationTable &) const60 Standard_Boolean XmlMDataXtd_PresentationDriver::Paste
61 (const XmlObjMgt_Persistent& theSource,
62 const Handle(TDF_Attribute)& theTarget,
63 XmlObjMgt_RRelocationTable& ) const
64 {
65 TCollection_ExtendedString aMessageString;
66 XmlObjMgt_DOMString aDOMStr;
67
68 Handle(TDataXtd_Presentation) aTPrs =
69 Handle(TDataXtd_Presentation)::DownCast(theTarget);
70 const XmlObjMgt_Element& anElem = theSource;
71
72 //convert attribute value into GUID
73 aDOMStr = anElem.getAttribute(::GuidString());
74 if (aDOMStr == NULL)
75 {
76 myMessageDriver->Send("Cannot retrieve guid string from attribute", Message_Fail);
77 return Standard_False;
78 }
79 Standard_CString aGuidStr = (Standard_CString) aDOMStr.GetString();
80 aTPrs->SetDriverGUID(aGuidStr);
81
82 // is displayed
83 aDOMStr = anElem.getAttribute(::IsDisplayedString());
84 aTPrs->SetDisplayed(aDOMStr != NULL);
85
86 Standard_Integer anIValue;
87
88 // color
89 aDOMStr = anElem.getAttribute(::ColorString());
90 if (aDOMStr != NULL)
91 {
92 if (!aDOMStr.GetInteger(anIValue))
93 {
94 aMessageString = TCollection_ExtendedString
95 ("Cannot retrieve Integer value from \"") + aDOMStr + "\"";
96 myMessageDriver->Send (aMessageString, Message_Fail);
97 return Standard_False;
98 }
99
100 const Quantity_NameOfColor aNameOfColor = TDataXtd_Presentation::getColorNameFromOldEnum (anIValue);
101 aTPrs->SetColor(aNameOfColor);
102 }
103 else
104 {
105 aTPrs->UnsetColor();
106 }
107
108 // material
109 aDOMStr = anElem.getAttribute(::MaterialString());
110 if (aDOMStr != NULL)
111 {
112 if (!aDOMStr.GetInteger(anIValue))
113 {
114 aMessageString = TCollection_ExtendedString
115 ("Cannot retrieve Integer value from \"") + aDOMStr + "\"";
116 myMessageDriver->Send (aMessageString, Message_Fail);
117 return Standard_False;
118 }
119 aTPrs->SetMaterialIndex(anIValue);
120 }
121 else
122 {
123 aTPrs->UnsetMaterial();
124 }
125
126 Standard_Real aValue;
127
128 // transparency
129 aDOMStr = anElem.getAttribute(::TransparencyString());
130 if (aDOMStr != NULL)
131 {
132 if (!XmlObjMgt::GetReal(aDOMStr, aValue))
133 {
134 aMessageString = TCollection_ExtendedString
135 ("Cannot retrieve Real value from \"") + aDOMStr + "\"";
136 myMessageDriver->Send (aMessageString, Message_Fail);
137 return Standard_False;
138 }
139 aTPrs->SetTransparency(aValue);
140 }
141 else
142 {
143 aTPrs->UnsetTransparency();
144 }
145
146 // width
147 aDOMStr = anElem.getAttribute(::WidthString());
148 if (aDOMStr != NULL)
149 {
150 if (!XmlObjMgt::GetReal(aDOMStr, aValue))
151 {
152 aMessageString = TCollection_ExtendedString
153 ("Cannot retrieve Real value from \"") + aDOMStr + "\"";
154 myMessageDriver->Send (aMessageString, Message_Fail);
155 return Standard_False;
156 }
157 aTPrs->SetWidth(aValue);
158 }
159 else
160 {
161 aTPrs->UnsetWidth();
162 }
163
164 // mode
165 aDOMStr = anElem.getAttribute(::ModeString());
166 if (aDOMStr != NULL)
167 {
168 if (!aDOMStr.GetInteger(anIValue))
169 {
170 aMessageString = TCollection_ExtendedString
171 ("Cannot retrieve Integer value from \"") + aDOMStr + "\"";
172 myMessageDriver->Send (aMessageString, Message_Fail);
173 return Standard_False;
174 }
175 aTPrs->SetMode(anIValue);
176 }
177 else
178 {
179 aTPrs->UnsetMode();
180 }
181
182 return Standard_True;
183 }
184
185 //=======================================================================
186 //function : Paste
187 //purpose : transient -> persistent (store)
188 //=======================================================================
Paste(const Handle (TDF_Attribute)& theSource,XmlObjMgt_Persistent & theTarget,XmlObjMgt_SRelocationTable &) const189 void XmlMDataXtd_PresentationDriver::Paste
190 (const Handle(TDF_Attribute)& theSource,
191 XmlObjMgt_Persistent& theTarget,
192 XmlObjMgt_SRelocationTable&) const
193 {
194 Handle(TDataXtd_Presentation) aTPrs =
195 Handle(TDataXtd_Presentation)::DownCast(theSource);
196 if (aTPrs.IsNull()) return;
197
198 //convert GUID into attribute value
199 Standard_Character aGuidStr [40];
200 Standard_PCharacter pGuidStr;
201 pGuidStr=aGuidStr;
202 aTPrs->GetDriverGUID().ToCString (pGuidStr);
203 theTarget.Element().setAttribute(::GuidString(), aGuidStr);
204
205 // is displayed
206 if (aTPrs->IsDisplayed())
207 theTarget.Element().setAttribute(::IsDisplayedString(), ::DisplayedString());
208
209 Standard_Integer aNb;
210
211 // color
212 if (aTPrs->HasOwnColor())
213 {
214 aNb = TDataXtd_Presentation::getOldColorNameFromNewEnum (aTPrs->Color());
215 theTarget.Element().setAttribute(::ColorString(), aNb);
216 }
217
218 // material
219 if (aTPrs->HasOwnMaterial())
220 {
221 aNb = aTPrs->MaterialIndex();
222 theTarget.Element().setAttribute(::MaterialString(), aNb);
223 }
224
225 // transparency
226 if (aTPrs->HasOwnTransparency())
227 {
228 TCollection_AsciiString aRNbStr (aTPrs->Transparency());
229 theTarget.Element().setAttribute(::TransparencyString(), aRNbStr.ToCString());
230 }
231
232 // width
233 if (aTPrs->HasOwnWidth())
234 {
235 TCollection_AsciiString aRNbStr (aTPrs->Width());
236 theTarget.Element().setAttribute(::WidthString(), aRNbStr.ToCString());
237 }
238
239 // mode
240 if (aTPrs->HasOwnMode())
241 {
242 aNb = aTPrs->Mode();
243 theTarget.Element().setAttribute(::ModeString(), aNb);
244 }
245 }
246