3 // Author: DAUTRY Philippe
4 // Copyright: Matra Datavision 1997
5 // modified Sergey Zaritchny
7 // History: Version Date Purpose
8 // 0.0 Aug 4 1997 Creation
12 #include <MDataXtd.ixx>
13 #include <MDF_ASDriverTable.hxx>
14 #include <MDF_ARDriverTable.hxx>
15 #include <CDM_MessageDriver.hxx>
19 #include <MDataXtd_ShapeStorageDriver.hxx>
20 #include <MDataXtd_PointStorageDriver.hxx>
21 #include <MDataXtd_AxisStorageDriver.hxx>
22 #include <MDataXtd_PlaneStorageDriver.hxx>
23 #include <MDataXtd_GeometryStorageDriver.hxx>
24 #include <MDataXtd_ConstraintStorageDriver.hxx>
25 #include <MDataXtd_PlacementStorageDriver.hxx>
26 #include <MDataXtd_PatternStdStorageDriver.hxx>
31 #include <MDataXtd_ShapeRetrievalDriver.hxx>
32 #include <MDataXtd_PointRetrievalDriver.hxx>
33 #include <MDataXtd_AxisRetrievalDriver.hxx>
34 #include <MDataXtd_PlaneRetrievalDriver.hxx>
35 #include <MDataXtd_GeometryRetrievalDriver.hxx>
36 #include <MDataXtd_ConstraintRetrievalDriver.hxx>
37 #include <MDataXtd_PlacementRetrievalDriver.hxx>
38 #include <MDataXtd_PatternStdRetrievalDriver.hxx>
43 #include <TDataStd_RealEnum.hxx>
44 #include <TDataXtd_ConstraintEnum.hxx>
45 #include <TDataXtd_GeometryEnum.hxx>
46 #include <Standard_DomainError.hxx>
47 #include <MgtGeom.hxx>
48 #include <Geom_Curve.hxx>
49 #include <Geom_Surface.hxx>
50 #include <Geom_Point.hxx>
51 #include <Geom_Axis1Placement.hxx>
52 #include <Geom_Axis2Placement.hxx>
53 #include <Geom_Direction.hxx>
54 #include <Geom_VectorWithMagnitude.hxx>
55 #include <PGeom_Curve.hxx>
56 #include <PGeom_Surface.hxx>
57 #include <PGeom_Point.hxx>
58 #include <PGeom_Axis1Placement.hxx>
59 #include <PGeom_Axis2Placement.hxx>
60 #include <PGeom_Direction.hxx>
61 #include <PGeom_VectorWithMagnitude.hxx>
62 #include <Standard_NullObject.hxx>
64 //=======================================================================
65 //function : AddStorageDriver
67 //=======================================================================
69 void MDataXtd::AddStorageDrivers
70 (const Handle(MDF_ASDriverHSequence)& aDriverSeq, const Handle(CDM_MessageDriver)& theMsgDriver)
72 aDriverSeq->Append(new MDataXtd_ShapeStorageDriver(theMsgDriver));
73 aDriverSeq->Append(new MDataXtd_PointStorageDriver(theMsgDriver));
74 aDriverSeq->Append(new MDataXtd_AxisStorageDriver(theMsgDriver));
75 aDriverSeq->Append(new MDataXtd_PlaneStorageDriver(theMsgDriver));
76 aDriverSeq->Append(new MDataXtd_GeometryStorageDriver(theMsgDriver));
77 aDriverSeq->Append(new MDataXtd_ConstraintStorageDriver(theMsgDriver));
78 aDriverSeq->Append(new MDataXtd_PlacementStorageDriver(theMsgDriver));
79 aDriverSeq->Append(new MDataXtd_PatternStdStorageDriver(theMsgDriver));
83 //=======================================================================
84 //function : AddRetrievalDriver
86 //=======================================================================
88 void MDataXtd::AddRetrievalDrivers
89 (const Handle(MDF_ARDriverHSequence)& aDriverSeq,const Handle(CDM_MessageDriver)& theMsgDriver)
91 aDriverSeq->Append(new MDataXtd_ShapeRetrievalDriver(theMsgDriver));
92 aDriverSeq->Append(new MDataXtd_PointRetrievalDriver(theMsgDriver));
93 aDriverSeq->Append(new MDataXtd_AxisRetrievalDriver(theMsgDriver));
94 aDriverSeq->Append(new MDataXtd_PlaneRetrievalDriver(theMsgDriver));
95 aDriverSeq->Append(new MDataXtd_GeometryRetrievalDriver(theMsgDriver));
96 aDriverSeq->Append(new MDataXtd_ConstraintRetrievalDriver(theMsgDriver));
97 aDriverSeq->Append(new MDataXtd_PlacementRetrievalDriver(theMsgDriver));
98 aDriverSeq->Append(new MDataXtd_PatternStdRetrievalDriver(theMsgDriver));
101 //=======================================================================
102 //function : ConstraintTypeToInteger
104 //=======================================================================
106 Standard_Integer MDataXtd::ConstraintTypeToInteger(const TDataXtd_ConstraintEnum e)
109 // planar constraints
110 case TDataXtd_RADIUS : return 0;
111 case TDataXtd_DIAMETER : return 1;
112 case TDataXtd_MINOR_RADIUS : return 2;
113 case TDataXtd_MAJOR_RADIUS : return 3;
114 case TDataXtd_TANGENT : return 4;
115 case TDataXtd_PARALLEL : return 5;
116 case TDataXtd_PERPENDICULAR : return 6;
117 case TDataXtd_CONCENTRIC : return 7;
118 case TDataXtd_COINCIDENT : return 8;
119 case TDataXtd_DISTANCE : return 9;
120 case TDataXtd_ANGLE : return 10;
121 case TDataXtd_EQUAL_RADIUS : return 11;
122 case TDataXtd_SYMMETRY : return 12;
123 case TDataXtd_MIDPOINT : return 13;
124 case TDataXtd_EQUAL_DISTANCE : return 14;
125 case TDataXtd_FIX : return 15;
126 case TDataXtd_RIGID : return 16;
127 // placement constraints
128 case TDataXtd_FROM : return 17;
129 case TDataXtd_AXIS : return 18;
130 case TDataXtd_MATE : return 19;
131 case TDataXtd_ALIGN_FACES : return 20;
132 case TDataXtd_ALIGN_AXES : return 21;
133 case TDataXtd_AXES_ANGLE : return 22;
134 case TDataXtd_FACES_ANGLE : return 23;
135 case TDataXtd_ROUND : return 24;
136 case TDataXtd_OFFSET : return 25;
139 Standard_DomainError::Raise("TDataXtd_ConstraintEnum; enum term unknown");
144 //=======================================================================
145 //function : IntegerToConstraintType
147 //=======================================================================
149 TDataXtd_ConstraintEnum MDataXtd::IntegerToConstraintType(const Standard_Integer i)
153 // planar constraints
154 case 0 : return TDataXtd_RADIUS;
155 case 1 : return TDataXtd_DIAMETER;
156 case 2 : return TDataXtd_MINOR_RADIUS;
157 case 3 : return TDataXtd_MAJOR_RADIUS;
158 case 4 : return TDataXtd_TANGENT;
159 case 5 : return TDataXtd_PARALLEL;
160 case 6 : return TDataXtd_PERPENDICULAR;
161 case 7 : return TDataXtd_CONCENTRIC;
162 case 8 : return TDataXtd_COINCIDENT;
163 case 9 : return TDataXtd_DISTANCE;
164 case 10 : return TDataXtd_ANGLE;
165 case 11 : return TDataXtd_EQUAL_RADIUS;
166 case 12 : return TDataXtd_SYMMETRY;
167 case 13 : return TDataXtd_MIDPOINT;
168 case 14 : return TDataXtd_EQUAL_DISTANCE;
169 case 15 : return TDataXtd_FIX;
170 case 16 : return TDataXtd_RIGID;
171 // placement constraints
172 case 17 : return TDataXtd_FROM;
173 case 18 : return TDataXtd_AXIS;
174 case 19 : return TDataXtd_MATE;
175 case 20 : return TDataXtd_ALIGN_FACES;
176 case 21 : return TDataXtd_ALIGN_AXES;
177 case 22 : return TDataXtd_AXES_ANGLE;
178 case 23 : return TDataXtd_FACES_ANGLE;
179 case 24 : return TDataXtd_ROUND;
180 case 25 : return TDataXtd_OFFSET;
182 Standard_DomainError::Raise("TDataXtd_ConstraintEnum; enum term unknown ");
184 return TDataXtd_TANGENT;
187 //=======================================================================
188 //function : GeometryTypeToInteger
190 //=======================================================================
192 Standard_Integer MDataXtd::GeometryTypeToInteger(const TDataXtd_GeometryEnum e)
195 case TDataXtd_ANY_GEOM : return 0;
196 case TDataXtd_POINT : return 1;
197 case TDataXtd_LINE : return 2;
198 case TDataXtd_CIRCLE : return 3;
199 case TDataXtd_ELLIPSE : return 4;
202 Standard_DomainError::Raise("TDataXtd_GeometryEnum; enum term unknown");
207 //=======================================================================
208 //function : IntegerToGeometryType
210 //=======================================================================
212 TDataXtd_GeometryEnum MDataXtd::IntegerToGeometryType(const Standard_Integer i)
216 case 0 : return TDataXtd_ANY_GEOM;
217 case 1 : return TDataXtd_POINT;
218 case 2 : return TDataXtd_LINE;
219 case 3 : return TDataXtd_CIRCLE;
220 case 4 : return TDataXtd_ELLIPSE;
223 Standard_DomainError::Raise("TDataXtd_GeometryEnum; enum term unknown ");
225 return TDataXtd_ANY_GEOM;
228 Handle(Geom_Geometry) MDataXtd::Translate (const Handle(PGeom_Geometry)& Geometry) {
229 Handle(Standard_Type) GeometryType = Geometry->DynamicType ();
231 if (GeometryType == STANDARD_TYPE(PGeom_Surface)) {
232 Handle(PGeom_Surface)& Surface = (Handle(PGeom_Surface)&) Geometry;
233 return MgtGeom::Translate (Surface);
235 else if (GeometryType == STANDARD_TYPE(PGeom_Curve)) {
236 Handle(PGeom_Curve)& Curve = (Handle(PGeom_Curve)&) Geometry;
237 return MgtGeom::Translate (Curve);
239 else if (GeometryType == STANDARD_TYPE(PGeom_Point)) {
240 Handle(PGeom_Point)& Point = (Handle(PGeom_Point)&) Geometry;
241 return MgtGeom::Translate (Point);
243 else if (GeometryType == STANDARD_TYPE(PGeom_Axis1Placement)) {
244 Handle(PGeom_Axis1Placement)& Axis1 = (Handle(PGeom_Axis1Placement)&) Geometry;
245 return MgtGeom::Translate (Axis1);
247 else if (GeometryType == STANDARD_TYPE(Geom_Axis2Placement)) {
248 Handle(PGeom_Axis2Placement)& Axis2 = (Handle(PGeom_Axis2Placement)&) Geometry;
249 return MgtGeom::Translate (Axis2);
251 else if (GeometryType == STANDARD_TYPE(PGeom_Direction)) {
252 Handle(PGeom_Direction)& Dir = (Handle(PGeom_Direction)&) Geometry;
253 return MgtGeom::Translate (Dir);
255 else if (GeometryType == STANDARD_TYPE(PGeom_VectorWithMagnitude)) {
256 Handle(PGeom_VectorWithMagnitude)& Vec = (Handle(PGeom_VectorWithMagnitude)&) Geometry;
257 return MgtGeom::Translate (Vec);
260 Standard_NullObject::Raise("No mapping for the current Persistent Geometry");
263 Handle(Geom_Surface) dummy;
268 Handle(PGeom_Geometry) MDataXtd::Translate (const Handle(Geom_Geometry)& Geometry) {
270 Handle(Standard_Type) GeometryType = Geometry->DynamicType ();
272 if (GeometryType == STANDARD_TYPE(Geom_Surface)) {
273 Handle(Geom_Surface)& Surface = (Handle(Geom_Surface)&) Geometry;
274 return MgtGeom::Translate (Surface);
276 else if (GeometryType == STANDARD_TYPE(Geom_Curve)) {
277 Handle(Geom_Curve)& Curve = (Handle(Geom_Curve)&) Geometry;
278 return MgtGeom::Translate (Curve);
280 else if (GeometryType == STANDARD_TYPE(Geom_Point)) {
281 Handle(Geom_Point)& Point = (Handle(Geom_Point)&) Geometry;
282 return MgtGeom::Translate (Point);
284 else if (GeometryType == STANDARD_TYPE(Geom_Axis1Placement)) {
285 Handle(Geom_Axis1Placement)& Axis1 = (Handle(Geom_Axis1Placement)&) Geometry;
286 return MgtGeom::Translate (Axis1);
288 else if (GeometryType == STANDARD_TYPE(Geom_Axis2Placement)) {
289 Handle(Geom_Axis2Placement)& Axis2 = (Handle(Geom_Axis2Placement)&) Geometry;
290 return MgtGeom::Translate (Axis2);
292 else if (GeometryType == STANDARD_TYPE(Geom_Direction)) {
293 Handle(Geom_Direction)& Dir = (Handle(Geom_Direction)&) Geometry;
294 return MgtGeom::Translate (Dir);
296 else if (GeometryType == STANDARD_TYPE(Geom_VectorWithMagnitude)) {
297 Handle(Geom_VectorWithMagnitude)& Vec = (Handle(Geom_VectorWithMagnitude)&) Geometry;
298 return MgtGeom::Translate (Vec);
301 Standard_NullObject::Raise("No mapping for the current Transient Geometry");
304 Handle(PGeom_Surface) dummy;