1 // File: XmlMDataXtd_PatternStdDriver.cxx
2 // Created: Fri Aug 24 20:46:58 2001
3 // Author: Alexnder GRIGORIEV
4 // Copyright: Open Cascade 2001
7 #include <XmlMDataXtd_PatternStdDriver.ixx>
9 #include <TDataStd_Real.hxx>
10 #include <TDataStd_Integer.hxx>
11 #include <TDataXtd_PatternStd.hxx>
12 #include <TNaming_NamedShape.hxx>
14 IMPLEMENT_DOMSTRING (SignatureString, "signature")
15 IMPLEMENT_DOMSTRING (Axis1RevString, "axis1reversed")
16 IMPLEMENT_DOMSTRING (Axis2RevString, "axis2reversed")
18 IMPLEMENT_DOMSTRING (NbInstances1RefString, "nbinstances1")
19 IMPLEMENT_DOMSTRING (Value1RefString, "value1ref")
20 IMPLEMENT_DOMSTRING (Axis1RefString, "axis1")
22 IMPLEMENT_DOMSTRING (NbInstances2RefString, "nbinstances2")
23 IMPLEMENT_DOMSTRING (Value2RefString, "value2ref")
24 IMPLEMENT_DOMSTRING (Axis2RefString, "axis2")
26 IMPLEMENT_DOMSTRING (MirrorRefString, "mirror")
28 IMPLEMENT_DOMSTRING (TrueString, "true")
30 //=======================================================================
31 //function : XmlMDataXtd_PatternStdDriver
32 //purpose : Constructor
33 //=======================================================================
34 XmlMDataXtd_PatternStdDriver::XmlMDataXtd_PatternStdDriver
35 (const Handle(CDM_MessageDriver)& theMsgDriver)
36 : XmlMDF_ADriver (theMsgDriver, NULL)
39 //=======================================================================
42 //=======================================================================
43 Handle(TDF_Attribute) XmlMDataXtd_PatternStdDriver::NewEmpty() const
45 return (new TDataXtd_PatternStd());
48 //=======================================================================
51 //=======================================================================
52 Standard_Boolean XmlMDataXtd_PatternStdDriver::Paste
53 (const XmlObjMgt_Persistent& theSource,
54 const Handle(TDF_Attribute)& theTarget,
55 XmlObjMgt_RRelocationTable& theRelocTable) const
57 Handle(TDataXtd_PatternStd) aP =
58 Handle(TDataXtd_PatternStd)::DownCast(theTarget);
59 const XmlObjMgt_Element& anElem = theSource;
62 TCollection_ExtendedString aMsgString;
64 Standard_Integer signature;
65 if (!anElem.getAttribute(::SignatureString()).GetInteger(signature))
67 aMsgString = TCollection_ExtendedString
68 ("XmlMDataXtd_PatternStdDriver: Bad or undefined value for a \"")
69 + ::SignatureString() + "\" attribute (must be integer)";
70 WriteMessage (aMsgString);
71 return Standard_False;
74 aP->Signature(signature);
76 XmlObjMgt_DOMString aString = anElem.getAttribute(::Axis1RevString());
77 aP->Axis1Reversed(aString != NULL);
78 aString = anElem.getAttribute(::Axis2RevString());
79 aP->Axis2Reversed(aString != NULL);
81 Handle(TNaming_NamedShape) TNS;
82 Handle(TDataStd_Real) TReal;
83 Handle(TDataStd_Integer) TInt;
87 if (!anElem.getAttribute(::Axis1RefString()).GetInteger(aNb))
89 aMsgString = TCollection_ExtendedString
90 ("XmlMDataXtd_PatternStdDriver: Bad or undefined value for a \"")
91 + ::Axis1RefString() + "\" attribute (must be integer)";
92 WriteMessage (aMsgString);
93 return Standard_False;
95 if (theRelocTable.IsBound(aNb))
96 TNS = Handle(TNaming_NamedShape)::DownCast(theRelocTable.Find(aNb));
99 TNS = new TNaming_NamedShape;
100 theRelocTable.Bind(aNb, TNS);
104 if (!anElem.getAttribute(::Value1RefString()).GetInteger(aNb))
106 aMsgString = TCollection_ExtendedString
107 ("XmlMDataXtd_PatternStdDriver: Bad or undefined value for a \"")
108 + ::Value1RefString() + "\" attribute (must be integer)";
109 WriteMessage (aMsgString);
110 return Standard_False;
112 if (theRelocTable.IsBound(aNb))
113 TReal = Handle(TDataStd_Real)::DownCast(theRelocTable.Find(aNb));
116 TReal = new TDataStd_Real;
117 theRelocTable.Bind(aNb, TReal);
121 if (!anElem.getAttribute(::NbInstances1RefString()).GetInteger(aNb))
123 aMsgString = TCollection_ExtendedString
124 ("XmlMDataXtd_PatternStdDriver: Bad or undefined value for a \"")
125 + ::NbInstances1RefString() + "\" attribute (must be integer)";
126 WriteMessage (aMsgString);
127 return Standard_False;
129 if (theRelocTable.IsBound(aNb))
130 TInt = Handle(TDataStd_Integer)::DownCast(theRelocTable.Find(aNb));
133 TInt = new TDataStd_Integer;
134 theRelocTable.Bind(aNb, TInt);
136 aP->NbInstances1(TInt);
140 if (!anElem.getAttribute(::Axis2RefString()).GetInteger(aNb))
142 aMsgString = TCollection_ExtendedString
143 ("XmlMDataXtd_PatternStdDriver: Bad or undefined value for a \"")
144 + ::Axis2RefString() + "\" attribute (must be integer)";
145 WriteMessage (aMsgString);
146 return Standard_False;
148 if (theRelocTable.IsBound(aNb))
149 TNS = Handle(TNaming_NamedShape)::DownCast(theRelocTable.Find(aNb));
152 TNS = new TNaming_NamedShape;
153 theRelocTable.Bind(aNb, TNS);
157 if (!anElem.getAttribute(::Value2RefString()).GetInteger(aNb))
159 aMsgString = TCollection_ExtendedString
160 ("XmlMDataXtd_PatternStdDriver: Bad or undefined value for a \"")
161 + ::Value2RefString() + "\" attribute (must be integer)";
162 WriteMessage (aMsgString);
163 return Standard_False;
165 if (theRelocTable.IsBound(aNb))
166 TReal = Handle(TDataStd_Real)::DownCast(theRelocTable.Find(aNb));
169 TReal = new TDataStd_Real;
170 theRelocTable.Bind(aNb, TReal);
174 if (!anElem.getAttribute(::NbInstances2RefString()).GetInteger(aNb))
176 aMsgString = TCollection_ExtendedString
177 ("XmlMDataXtd_PatternStdDriver: Bad or undefined value for a \"")
178 + ::NbInstances2RefString() + "\" attribute (must be integer)";
179 WriteMessage (aMsgString);
180 return Standard_False;
182 if (theRelocTable.IsBound(aNb))
183 TInt = Handle(TDataStd_Integer)::DownCast(theRelocTable.Find(aNb));
186 TInt = new TDataStd_Integer;
187 theRelocTable.Bind(aNb, TInt);
189 aP->NbInstances2(TInt);
194 if (!anElem.getAttribute(::MirrorRefString()).GetInteger(aNb))
196 aMsgString = TCollection_ExtendedString
197 ("XmlMDataXtd_PatternStdDriver: Bad or undefined value for a \"")
198 + ::MirrorRefString() + "\" attribute (must be integer)";
199 WriteMessage (aMsgString);
200 return Standard_False;
202 if (theRelocTable.IsBound(aNb))
203 TNS = Handle(TNaming_NamedShape)::DownCast(theRelocTable.Find(aNb));
206 TNS = new TNaming_NamedShape;
207 theRelocTable.Bind(aNb, TNS);
211 return Standard_True;
214 //=======================================================================
217 //=======================================================================
218 void XmlMDataXtd_PatternStdDriver::Paste
219 (const Handle(TDF_Attribute)& theSource,
220 XmlObjMgt_Persistent& theTarget,
221 XmlObjMgt_SRelocationTable& theRelocTable) const
223 Handle(TDataXtd_PatternStd) aP =
224 Handle(TDataXtd_PatternStd)::DownCast(theSource);
225 XmlObjMgt_Element& anElem = theTarget;
227 Standard_Integer signature = aP->Signature();
228 anElem.setAttribute(::SignatureString(), signature);
230 if (aP->Axis1Reversed())
231 anElem.setAttribute(::Axis1RevString(), ::TrueString());
232 if (aP->Axis2Reversed())
233 anElem.setAttribute(::Axis2RevString(), ::TrueString());
235 Handle(TNaming_NamedShape) TNS;
236 Handle(TDataStd_Real) TReal;
237 Handle(TDataStd_Integer) TInt;
239 Standard_Integer aNb;
245 aNb = theRelocTable.FindIndex(TNS);
248 aNb = theRelocTable.Add(TNS);
250 anElem.setAttribute(::Axis1RefString(), aNb);
253 TReal = aP->Value1();
254 aNb = theRelocTable.FindIndex(TReal);
257 aNb = theRelocTable.Add(TReal);
259 anElem.setAttribute(::Value1RefString(), aNb);
261 // number of instances 1
262 TInt = aP->NbInstances1();
263 aNb = theRelocTable.FindIndex(TInt);
266 aNb = theRelocTable.Add(TInt);
268 anElem.setAttribute(::NbInstances1RefString(), aNb);
274 aNb = theRelocTable.FindIndex(TNS);
277 aNb = theRelocTable.Add(TNS);
279 anElem.setAttribute(::Axis2RefString(), aNb);
282 TReal = aP->Value2();
283 aNb = theRelocTable.FindIndex(TReal);
286 aNb = theRelocTable.Add(TReal);
288 anElem.setAttribute(::Value2RefString(), aNb);
290 // number of instances 2
291 TInt = aP->NbInstances2();
292 aNb = theRelocTable.FindIndex(TInt);
295 aNb = theRelocTable.Add(TInt);
297 anElem.setAttribute(::NbInstances2RefString(), aNb);
303 aNb = theRelocTable.FindIndex(TNS);
306 aNb = theRelocTable.Add(TNS);
308 anElem.setAttribute(::MirrorRefString(), aNb);