From edbef848d8f2ddf7508dcfbc45024a2bf7a4e0a9 Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 24 Jan 2014 06:08:58 +0000 Subject: [PATCH] GetAltitudeForPoint() method redefinition. --- src/HYDROData/HYDROData_CalculationCase.cxx | 23 ++++--- src/HYDROData/HYDROData_CalculationCase.h | 9 +++ src/HYDROPy/HYDROData_CalculationCase.sip | 75 +++++++++++++++++---- 3 files changed, 85 insertions(+), 22 deletions(-) diff --git a/src/HYDROData/HYDROData_CalculationCase.cxx b/src/HYDROData/HYDROData_CalculationCase.cxx index 9e05aa3f..97fa637d 100644 --- a/src/HYDROData/HYDROData_CalculationCase.cxx +++ b/src/HYDROData/HYDROData_CalculationCase.cxx @@ -250,8 +250,8 @@ void HYDROData_CalculationCase::Update() { const QString& anObjName = aSplitData.ObjectNames.at( i ); - Handle(HYDROData_Object) aRefObject = Handle(HYDROData_Object)::DownCast( - HYDROData_Tool::FindObjectByName( aDocument, anObjName ) ); + Handle(HYDROData_Object) aRefObject = + Handle(HYDROData_Object)::DownCast( aDocument->FindObjectByName( anObjName ) ); if ( aRefObject.IsNull() ) continue; @@ -516,14 +516,19 @@ void HYDROData_CalculationCase::RemoveSplittedGroups() double HYDROData_CalculationCase::GetAltitudeForPoint( const gp_XY& thePoint ) const { - double aResAltitude = HYDROData_IAltitudeObject::GetInvalidAltitude(); - Handle(HYDROData_Zone) aZone = GetZoneFromPoint( thePoint ); - if ( aZone.IsNull() ) + return GetAltitudeForPoint( thePoint, aZone ); +} + +double HYDROData_CalculationCase::GetAltitudeForPoint( const gp_XY& thePoint, + const Handle(HYDROData_Zone)& theZone ) const +{ + double aResAltitude = HYDROData_IAltitudeObject::GetInvalidAltitude(); + if ( theZone.IsNull() ) return aResAltitude; - HYDROData_Zone::MergeAltitudesType aZoneMergeType = aZone->GetMergeType(); - if ( !aZone->IsMergingNeed() ) + HYDROData_Zone::MergeAltitudesType aZoneMergeType = theZone->GetMergeType(); + if ( !theZone->IsMergingNeed() ) { aZoneMergeType = HYDROData_Zone::Merge_UNKNOWN; } @@ -534,13 +539,13 @@ double HYDROData_CalculationCase::GetAltitudeForPoint( const gp_XY& thePoint ) c if ( aZoneMergeType == HYDROData_Zone::Merge_Object ) { - Handle(HYDROData_IAltitudeObject) aMergeAltitude = aZone->GetMergeAltitude(); + Handle(HYDROData_IAltitudeObject) aMergeAltitude = theZone->GetMergeAltitude(); if ( !aMergeAltitude.IsNull() ) aResAltitude = aMergeAltitude->GetAltitudeForPoint( thePoint ); } else { - HYDROData_SequenceOfObjects aZoneObjects = aZone->GetGeometryObjects(); + HYDROData_SequenceOfObjects aZoneObjects = theZone->GetGeometryObjects(); HYDROData_SequenceOfObjects::Iterator anIter( aZoneObjects ); for ( ; anIter.More(); anIter.Next() ) { diff --git a/src/HYDROData/HYDROData_CalculationCase.h b/src/HYDROData/HYDROData_CalculationCase.h index 0f2d6579..e6b493f3 100644 --- a/src/HYDROData/HYDROData_CalculationCase.h +++ b/src/HYDROData/HYDROData_CalculationCase.h @@ -214,6 +214,15 @@ public: */ HYDRODATA_EXPORT virtual double GetAltitudeForPoint( const gp_XY& thePoint ) const; + /** + * Returns altitude for given point on given zone. + * \param theZone reference zone to check + * \param thePoint the point to examine + * \return result altitude value + */ + HYDRODATA_EXPORT virtual double GetAltitudeForPoint( const gp_XY& thePoint, + const Handle(HYDROData_Zone)& theZone ) const; + /** * Returns zone to which the point is belongs. * \param thePoint the point to examine diff --git a/src/HYDROPy/HYDROData_CalculationCase.sip b/src/HYDROPy/HYDROData_CalculationCase.sip index bf1cb020..c3f78b0c 100644 --- a/src/HYDROPy/HYDROData_CalculationCase.sip +++ b/src/HYDROPy/HYDROData_CalculationCase.sip @@ -289,14 +289,58 @@ public: * \param thePoint the point to examine * \return result altitude value */ - double GetAltitudeForPoint( const gp_XY& thePoint ) const; + double GetAltitudeForPoint( SIP_PYTUPLE thePoint ) const [double ( const gp_XY& )]; + %MethodCode + double aRes = 0.0; + + double x = 0.0, y = 0.0; + if ( PyArg_ParseTuple( a0, "dd", &x, &y ) ) + { + gp_XY aPnt( x, y ); + + Py_BEGIN_ALLOW_THREADS + aRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::GetAltitudeForPoint( aPnt ) : + sipCpp->GetAltitudeForPoint( aPnt ); + Py_END_ALLOW_THREADS + } + + sipRes = aRes; + %End + + /** + * Returns altitude for given point. + * \param thePoint the point to examine + * \return result altitude value + */ + double GetAltitudeForPoint( SIP_PYTUPLE thePoint, + HYDROData_Zone theZone ) const + [double ( const Handle_HYDROData_Zone&, const gp_XY& )]; + %MethodCode + double aRes = 0.0; + + double x = 0.0, y = 0.0; + if ( PyArg_ParseTuple( a0, "dd", &x, &y ) ) + { + gp_XY aPnt( x, y ); + + Handle(HYDROData_Zone) aRef = + Handle(HYDROData_Zone)::DownCast( createHandle( a1 ) ); + + Py_BEGIN_ALLOW_THREADS + aRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::GetAltitudeForPoint( aPnt, aRef ) : + sipCpp->GetAltitudeForPoint( aPnt, aRef ); + Py_END_ALLOW_THREADS + } + + sipRes = aRes; + %End /** * Returns zone to which the point is belongs. * \param thePoint the point to examine * \return result zone */ - HYDROData_Zone GetZoneFromPoint( SIP_PYTUPLE ) const [Handle_HYDROData_Zone ( const gp_XY& )]; + HYDROData_Zone GetZoneFromPoint( SIP_PYTUPLE thePoint ) const [Handle_HYDROData_Zone ( const gp_XY& )]; %MethodCode Handle(HYDROData_Zone) aRes; @@ -320,22 +364,27 @@ public: * \param theZone the zone to examine * \return result classification */ - PointClassification GetPointClassification( - const gp_XY& thePoint, - HYDROData_Zone theZone ) const - [PointClassification ( const gp_XY&, const Handle_HYDROData_Zone& )]; - + PointClassification GetPointClassification( SIP_PYTUPLE thePoint, + HYDROData_Zone theZone ) const + [PointClassification ( const gp_XY&, const Handle_HYDROData_Zone& )]; %MethodCode - Handle(HYDROData_Zone) aRef = - Handle(HYDROData_Zone)::DownCast( createHandle( a1 ) ); - - if ( !aRef.IsNull() ) + HYDROData_CalculationCase::PointClassification aRes = HYDROData_CalculationCase::POINT_OUT; + + double x = 0.0, y = 0.0; + if ( PyArg_ParseTuple( a0, "dd", &x, &y ) ) { + gp_XY aPnt( x, y ); + + Handle(HYDROData_Zone) aRef = + Handle(HYDROData_Zone)::DownCast( createHandle( a1 ) ); + Py_BEGIN_ALLOW_THREADS - sipRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::GetPointClassification( *a0, aRef ) : - sipCpp->GetPointClassification( *a0, aRef ); + aRes = sipSelfWasArg ? sipCpp->HYDROData_CalculationCase::GetPointClassification( aPnt, aRef ) : + sipCpp->GetPointClassification( aPnt, aRef ); Py_END_ALLOW_THREADS } + + sipRes = aRes; %End protected: -- 2.39.2