0024927: Getting rid of "Persistent" functionality -- Code
[occt.git] / src / MDataXtd / MDataXtd_ConstraintStorageDriver.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 #include <MDataXtd_ConstraintStorageDriver.ixx>
15 #include <PDataXtd_Constraint.hxx>
16 #include <TDataXtd_Constraint.hxx>
17 #include <TNaming_NamedShape.hxx>
18 #include <PNaming_NamedShape.hxx>
19 #include <PDF_HAttributeArray1.hxx>
20 #include <Standard_NoSuchObject.hxx>
21 #include <TDataXtd_ConstraintEnum.hxx>
22 #include <Standard_NoSuchObject.hxx>
23 #include <Standard_DomainError.hxx>
24 #include <MDataXtd.hxx>
25 #include <CDM_MessageDriver.hxx>
26
27
28
29 //=======================================================================
30 //function : MDataXtd_ConstraintStorageDriver
31 //purpose  : 
32 //=======================================================================
33
34 MDataXtd_ConstraintStorageDriver::MDataXtd_ConstraintStorageDriver(const Handle(CDM_MessageDriver)& theMsgDriver):MDF_ASDriver(theMsgDriver)
35 {
36 }
37
38
39 //=======================================================================
40 //function : VersionNumber
41 //purpose  : 
42 //=======================================================================
43
44 Standard_Integer MDataXtd_ConstraintStorageDriver::VersionNumber() const
45 { return 0; }
46
47
48 //=======================================================================
49 //function : SourceType
50 //purpose  : 
51 //=======================================================================
52
53 Handle(Standard_Type) MDataXtd_ConstraintStorageDriver::SourceType() const
54 { return STANDARD_TYPE (TDataXtd_Constraint); }
55
56
57 //=======================================================================
58 //function : NewEmpty
59 //purpose  : 
60 //=======================================================================
61
62 Handle(PDF_Attribute) MDataXtd_ConstraintStorageDriver::NewEmpty() const
63 { return new PDataXtd_Constraint; }
64
65
66 //=======================================================================
67 //function : Paste
68 //purpose  : 
69 //=======================================================================
70
71 void MDataXtd_ConstraintStorageDriver::Paste (
72   const Handle(TDF_Attribute)&        Source,
73   const Handle(PDF_Attribute)&        Target,
74   const Handle(MDF_SRelocationTable)& RelocTable) const
75 {
76   Handle(TDataXtd_Constraint) S = 
77      Handle(TDataXtd_Constraint)::DownCast (Source);
78   Handle(PDataXtd_Constraint) T = 
79     Handle(PDataXtd_Constraint)::DownCast (Target);
80
81   Handle(PDataStd_Real) TValue;
82   Handle(TDataStd_Real) Value = S->GetValue ();
83   if (!Value.IsNull ()) {
84     if (!RelocTable->HasRelocation (Value, TValue )) {
85       Standard_NoSuchObject::Raise("MDataXtd_ConstraintStorageDriver::Paste");
86     }
87     T->Set (TValue);
88   }
89
90   Standard_Integer NbGeom = S->NbGeometries ();
91   if (NbGeom >= 1) {
92     Handle(PDF_HAttributeArray1) PGeometries = new PDF_HAttributeArray1 (1, NbGeom);
93     for (Standard_Integer i = 1; i <= NbGeom; i++) {
94       Handle(PDF_Attribute) PG;
95       if (!S->GetGeometry (i).IsNull()) {
96         if(!RelocTable->HasRelocation (S->GetGeometry (i), PG)) {
97           Standard_NoSuchObject::Raise("MDataXtd_ConstraintStorageDriver::Paste");
98         }
99       }
100       PGeometries->SetValue (i,PG);
101     }
102     T->SetGeometries (PGeometries);
103   }
104
105   Handle(TNaming_NamedShape) TPlane = S->GetPlane();
106   Handle(PNaming_NamedShape) PPlane;
107   if (!TPlane.IsNull()) {
108     if (!RelocTable->HasRelocation (TPlane, PPlane )) {
109       Standard_NoSuchObject::Raise("MDataXtd_ConstraintStorageDriver::Paste");
110     }
111     T->SetPlane(PPlane);
112   }
113   
114   T->SetType (MDataXtd::ConstraintTypeToInteger(S->GetType ()));
115   T->Verified(S->Verified());
116   T->Inverted(S->Inverted());
117   T->Reversed(S->Reversed());
118 }
119
120
121
122
123