X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROPy%2FHYDROData_Document.sip;h=5b2e2e19bbee48164bed296a7f38840d6d88f159;hb=f58865bdfb548ebba53ecb264f17ef357fa4c409;hp=57f60e9bb7dc2cb06f3034b83af3b0b6f597074c;hpb=d0413fc6f8d2c004c7d2baac5d174c0502417d70;p=modules%2Fhydro.git diff --git a/src/HYDROPy/HYDROData_Document.sip b/src/HYDROPy/HYDROData_Document.sip index 57f60e9b..5b2e2e19 100644 --- a/src/HYDROPy/HYDROData_Document.sip +++ b/src/HYDROPy/HYDROData_Document.sip @@ -24,6 +24,12 @@ #include %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 @@ -46,21 +52,154 @@ 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( theObject ) ); + break; + } + case KIND_POLYLINE: + { + aRes = new HYDROData_Polyline3D( *dynamic_cast( theObject ) ); + break; + } + case KIND_BATHYMETRY: + { + aRes = new HYDROData_Bathymetry( *dynamic_cast( theObject ) ); + break; + } + case KIND_ALTITUDE: + { + aRes = new HYDROData_AltitudeObject( *dynamic_cast( theObject ) ); + break; + } + case KIND_IMMERSIBLE_ZONE: + { + aRes = new HYDROData_ImmersibleZone( *dynamic_cast( theObject ) ); + break; + } + case KIND_RIVER: + { + aRes = new HYDROData_River( *dynamic_cast( theObject ) ); + break; + } + case KIND_STREAM: + { + aRes = new HYDROData_Stream( *dynamic_cast( theObject ) ); + break; + } + case KIND_CONFLUENCE: + { + aRes = new HYDROData_Confluence( *dynamic_cast( theObject ) ); + break; + } + case KIND_CHANNEL: + { + aRes = new HYDROData_Channel( *dynamic_cast( theObject ) ); + break; + } + case KIND_OBSTACLE: + { + aRes = new HYDROData_Obstacle( *dynamic_cast( theObject ) ); + break; + } + case KIND_DIGUE: + { + aRes = new HYDROData_Digue( *dynamic_cast( theObject ) ); + break; + } + case KIND_PROFILE: + { + aRes = new HYDROData_Profile( *dynamic_cast( theObject ) ); + break; + } + case KIND_PROFILEUZ: + { + aRes = new HYDROData_ProfileUZ( *dynamic_cast( theObject ) ); + break; + } + case KIND_POLYLINEXY: + { + aRes = new HYDROData_PolylineXY( *dynamic_cast( theObject ) ); + break; + } + case KIND_CALCULATION: + { + aRes = new HYDROData_CalculationCase( *dynamic_cast( theObject ) ); + break; + } + case KIND_REGION: + { + aRes = new HYDROData_Region( *dynamic_cast( theObject ) ); + break; + } + case KIND_ZONE: + { + aRes = new HYDROData_Zone( *dynamic_cast( theObject ) ); + break; + } + case KIND_SHAPES_GROUP: + { + aRes = new HYDROData_ShapesGroup( *dynamic_cast( theObject ) ); + break; + } + case KIND_SPLITTED_GROUP: + { + aRes = new HYDROData_SplittedShapesGroup( *dynamic_cast( theObject ) ); + break; + } + case KIND_OBSTACLE_ALTITUDE: + { + aRes = new HYDROData_ObstacleAltitude( *dynamic_cast( 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 +262,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();