Salome HOME
SIP: HYDROData_AltitudeObject is included.
[modules/hydro.git] / src / HYDROPy / HYDROData_Document.sip
index 57f60e9bb7dc2cb06f3034b83af3b0b6f597074c..e3b416f1aa51c2daa00f0cba46fdeb2c89dca6c1 100644 (file)
 #include <HYDROData_Document.h>
 %End
 
+%ModuleHeaderCode
+HYDROData_Entity* copyObject( HYDROData_Entity* theObject );
+Handle(HYDROData_Entity) createHandle( HYDROData_Entity* theObject );
+HYDROData_Entity* createPointer( const Handle(HYDROData_Entity)& theObject );
+%End
+
 enum Data_DocError {
   DocError_OK = 0, ///< success
   DocError_ResourcesProblem, ///< resources files are invalid or not found
@@ -33,7 +39,7 @@ enum Data_DocError {
   DocError_UnknownProblem ///< problem has unknown nature
 };
 
-class HYDROData_Document
+class HYDROData_Document 
 {
 %TypeHeaderCode
 #include <HYDROData_Document.h>
@@ -46,21 +52,134 @@ class HYDROData_Document
       sipClass = NULL;
 %End
 
+%TypeCode
+
+  HYDROData_Entity* copyObject( HYDROData_Entity* theObject )
+  {
+    HYDROData_Entity* aRes = NULL;
+    if ( theObject == NULL )
+      return aRes;
+
+    switch( theObject->GetKind() )
+    {
+      case KIND_IMAGE:
+      {
+        aRes = new HYDROData_Image( *dynamic_cast<HYDROData_Image*>( theObject ) );
+        break;
+      }
+      case KIND_BATHYMETRY:
+      {
+        aRes = new HYDROData_Bathymetry( *dynamic_cast<HYDROData_Bathymetry*>( theObject ) );
+        break;
+      }
+      case KIND_ALTITUDE:
+      {
+        aRes = new HYDROData_AltitudeObject( *dynamic_cast<HYDROData_AltitudeObject*>( theObject ) );
+        break;
+      }
+      case KIND_OBSTACLE_ALTITUDE:
+      {
+        aRes = new HYDROData_ObstacleAltitude( *dynamic_cast<HYDROData_ObstacleAltitude*>( theObject ) );
+        break;
+      }
+      case KIND_IMMERSIBLE_ZONE:
+      {
+        aRes = new HYDROData_ImmersibleZone( *dynamic_cast<HYDROData_ImmersibleZone*>( theObject ) );
+        break;
+      }
+      case KIND_POLYLINE:
+      {
+        aRes = new HYDROData_Polyline3D( *dynamic_cast<HYDROData_Polyline3D*>( theObject ) );
+        break;
+      }
+      case KIND_PROFILE:
+      {
+        aRes = new HYDROData_Profile( *dynamic_cast<HYDROData_Profile*>( theObject ) );
+        break;
+      }
+      case KIND_PROFILEUZ:
+      {
+        aRes = new HYDROData_ProfileUZ( *dynamic_cast<HYDROData_ProfileUZ*>( theObject ) );
+        break;
+      }
+      case KIND_POLYLINEXY:
+      {
+        aRes = new HYDROData_PolylineXY( *dynamic_cast<HYDROData_PolylineXY*>( theObject ) );
+        break;
+      }
+      case KIND_CALCULATION:
+      {
+        aRes = new HYDROData_CalculationCase( *dynamic_cast<HYDROData_CalculationCase*>( theObject ) );
+        break;
+      }
+      case KIND_OBSTACLE:
+      {
+        aRes = new HYDROData_Obstacle( *dynamic_cast<HYDROData_Obstacle*>( theObject ) );
+        break;
+      }
+      case KIND_REGION:
+      {
+        aRes = new HYDROData_Region( *dynamic_cast<HYDROData_Region*>( theObject ) );
+        break;
+      }
+      case KIND_ZONE:
+      {
+        aRes = new HYDROData_Zone( *dynamic_cast<HYDROData_Zone*>( theObject ) );
+        break;
+      }
+      case KIND_DIGUE:
+      {
+        aRes = new HYDROData_Digue( *dynamic_cast<HYDROData_Digue*>( theObject ) );
+        break;
+      }
+      case KIND_CHANNEL:
+      {
+        aRes = new HYDROData_Channel( *dynamic_cast<HYDROData_Channel*>( theObject ) );
+        break;
+      }
+      case KIND_STREAM:
+      {
+        aRes = new HYDROData_Stream( *dynamic_cast<HYDROData_Stream*>( theObject ) );
+        break;
+      }
+    }
+    
+    return aRes;
+  }
+  
+  Handle(HYDROData_Entity) createHandle( HYDROData_Entity* theObject )
+  {
+    Handle(HYDROData_Entity) aRes = copyObject( theObject );
+    return aRes;
+  }
+  
+  HYDROData_Entity* createPointer( const Handle(HYDROData_Entity)& theObject )
+  {
+    HYDROData_Entity* aRes = NULL;
+    
+    if ( !theObject.IsNull() )
+      aRes = copyObject( theObject.operator->() );
+    
+    return aRes;
+  }
+
+%End
+
 public:
 
   //! Returns the existing document or creates new if it is not exist
   static HYDROData_Document Document( const int theStudyID ) [Handle_HYDROData_Document (const int)] ;
   %MethodCode
 
+    Handle(HYDROData_Document) aDocument;
+
     Py_BEGIN_ALLOW_THREADS
-    Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( a0 );
+    aDocument = HYDROData_Document::Document( a0 );
+    Py_END_ALLOW_THREADS
+
     if ( !aDocument.IsNull() )
-    {
       sipRes = aDocument.operator->();
-    }
-    
-    Py_END_ALLOW_THREADS
-    
+
   %End
 
   //! Returns true if data model contains document for this study
@@ -123,36 +242,21 @@ public:
   //! Creates and locates in the document a new object
   //! \param theKind kind of the created object, can not be UNKNOWN
   //! \returns the created object
-  HYDROData_Object CreateObject( const ObjectKind theKind ) [Handle_HYDROData_Object (const ObjectKind)] ;
+  HYDROData_Entity CreateObject( const ObjectKind theKind ) [Handle_HYDROData_Entity (const ObjectKind)] ;
   %MethodCode
 
+    Handle(HYDROData_Entity) anObject;
     Py_BEGIN_ALLOW_THREADS
-    
-    Handle(HYDROData_Object) anObject = 
-      sipSelfWasArg ? sipCpp->HYDROData_Document::CreateObject( a0 ) : sipCpp->CreateObject( a0 );
-    if ( !anObject.IsNull() )
-    {
-      switch( anObject->GetKind() )
-      {
-        case KIND_BATHYMETRY:
-        {
-          Handle(HYDROData_Bathymetry) aBathymetry =
-            Handle(HYDROData_Bathymetry)::DownCast( anObject );
-          sipRes = new HYDROData_Bathymetry( *aBathymetry.operator->() );
-          break;
-        }
-      }
-    }
-        
+    anObject =  sipSelfWasArg ? sipCpp->HYDROData_Document::CreateObject( a0 ) :
+                                sipCpp->CreateObject( a0 );
     Py_END_ALLOW_THREADS
+
+    sipRes = createPointer( anObject );
     
   %End
 
 protected:
 
-  //friend class HYDROData_Iterator;
-  //friend class test_HYDROData_Document;
-
   //! Creates new document: private because "Document" method must be used instead of direct creation.
   HYDROData_Document();