X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_CalculationCase.cxx;h=509c2c5fb0bb63ffbd4ca5dd173f9d7aa5d15aa0;hb=81c9f5cdf82909d0aebd2c491c50fa7516cc80b7;hp=12b146a048d913cd2eaadbb4465c59f6f52b5aee;hpb=791827126f944e6796e236176994bc983e36440d;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_CalculationCase.cxx b/src/HYDROData/HYDROData_CalculationCase.cxx index 12b146a0..509c2c5f 100644 --- a/src/HYDROData/HYDROData_CalculationCase.cxx +++ b/src/HYDROData/HYDROData_CalculationCase.cxx @@ -42,6 +42,10 @@ #define CALCULATION_REGIONS_PREF GetName() + "_Reg" #define CALCULATION_ZONES_PREF GetName() + "_Zone" #define CALCULATION_GROUPS_PREF GetName() + "_" +//#define DEB_CLASS2D 1 +#ifdef DEB_CLASS2D +#include +#endif #define EXPORT_NAME "HYDRO_" + GetName() @@ -87,7 +91,7 @@ void HYDROData_CalculationCase::SetName( const QString& theName ) } } - HYDROData_SequenceOfObjects aGroups = GetGeometryGroups(); + HYDROData_SequenceOfObjects aGroups = GetSplittedGroups(); anIter.Init( aGroups ); for ( ; anIter.More(); anIter.Next() ) @@ -523,6 +527,22 @@ double HYDROData_CalculationCase::GetAltitudeForPoint( const gp_XY& thePoint ) c return GetAltitudeForPoint( thePoint, aZone ); } +double HYDROData_CalculationCase::GetAltitudeForPoint( const gp_XY& thePoint, + const Handle(HYDROData_Region)& theRegion ) const +{ + double aResAltitude = HYDROData_IAltitudeObject::GetInvalidAltitude(); + + Handle(HYDROData_Zone) aZone = GetZoneFromPoint( thePoint ); + if ( !aZone.IsNull() ) + { + Handle(HYDROData_Region) aRefRegion = Handle(HYDROData_Region)::DownCast( aZone->GetFatherObject() ); + if ( IsEqual( aRefRegion, theRegion ) ) + aResAltitude = GetAltitudeForPoint( thePoint, aZone ); + } + + return aResAltitude; +} + double HYDROData_CalculationCase::GetAltitudeForPoint( const gp_XY& thePoint, const Handle(HYDROData_Zone)& theZone ) const { @@ -540,11 +560,20 @@ double HYDROData_CalculationCase::GetAltitudeForPoint( const gp_XY& return aResAltitude; } + HYDROData_IInterpolator* aZoneInterpolator = theZone->GetInterpolator(); if ( aZoneMergeType == HYDROData_Zone::Merge_Object ) { Handle(HYDROData_IAltitudeObject) aMergeAltitude = theZone->GetMergeAltitude(); if ( !aMergeAltitude.IsNull() ) - aResAltitude = aMergeAltitude->GetAltitudeForPoint( thePoint ); + { + if ( aZoneInterpolator != NULL ) + { + aZoneInterpolator->SetAltitudeObject( aMergeAltitude ); + aResAltitude = aZoneInterpolator->GetAltitudeForPoint( thePoint ); + } + else + aResAltitude = aMergeAltitude->GetAltitudeForPoint( thePoint ); + } } else { @@ -561,7 +590,15 @@ double HYDROData_CalculationCase::GetAltitudeForPoint( const gp_XY& if ( anObjAltitude.IsNull() ) continue; - double aPointAltitude = anObjAltitude->GetAltitudeForPoint( thePoint ); + double aPointAltitude = 0.0; + if ( aZoneInterpolator != NULL ) + { + aZoneInterpolator->SetAltitudeObject( anObjAltitude ); + aPointAltitude = aZoneInterpolator->GetAltitudeForPoint( thePoint ); + } + else + aPointAltitude = anObjAltitude->GetAltitudeForPoint( thePoint ); + if ( ValuesEquals( aPointAltitude, HYDROData_IAltitudeObject::GetInvalidAltitude() ) ) continue; @@ -592,6 +629,23 @@ double HYDROData_CalculationCase::GetAltitudeForPoint( const gp_XY& return aResAltitude; } +NCollection_Sequence HYDROData_CalculationCase::GetAltitudesForPoints( + const NCollection_Sequence& thePoints, + const Handle(HYDROData_Region)& theRegion ) const +{ + NCollection_Sequence aResSeq; + + for ( int i = 1, n = thePoints.Length(); i <= n; ++i ) + { + const gp_XY& thePnt = thePoints.Value( i ); + + double anAltitude = GetAltitudeForPoint( thePnt, theRegion ); + aResSeq.Append( anAltitude ); + } + + return aResSeq; +} + NCollection_Sequence HYDROData_CalculationCase::GetAltitudesForPoints( const NCollection_Sequence& thePoints, const Handle(HYDROData_Zone)& theZone ) const @@ -609,6 +663,17 @@ NCollection_Sequence HYDROData_CalculationCase::GetAltitudesForPoints( return aResSeq; } +Handle(HYDROData_Region) HYDROData_CalculationCase::GetRegionFromPoint( const gp_XY& thePoint ) const +{ + Handle(HYDROData_Region) aResRegion; + + Handle(HYDROData_Zone) aZone = GetZoneFromPoint( thePoint ); + if ( !aZone.IsNull() ) + aResRegion = Handle(HYDROData_Region)::DownCast( aZone->GetFatherObject() ); + + return aResRegion; +} + Handle(HYDROData_Zone) HYDROData_CalculationCase::GetZoneFromPoint( const gp_XY& thePoint ) const { Handle(HYDROData_Zone) aResZone; @@ -652,7 +717,16 @@ HYDROData_CalculationCase::PointClassification HYDROData_CalculationCase::GetPoi TopoDS_Face aZoneFace = TopoDS::Face( theZone->GetShape() ); if ( aZoneFace.IsNull() ) return aRes; - +#ifdef DEB_CLASS2D + TopoDS_Compound aCmp; + BRep_Builder aBB; + aBB.MakeCompound(aCmp); + aBB.Add(aCmp, aZoneFace); + gp_Pnt aPnt (thePoint.X(), thePoint.Y(), 0.); + BRepBuilderAPI_MakeVertex aMk(aPnt); + aBB.Add(aCmp, aMk.Vertex()); + BRepTools::Write(aCmp, "FCL2d.brep"); +#endif TopAbs_State State = HYDROData_Tool::ComputePointState(thePoint, aZoneFace); if (State == TopAbs_OUT) aRes = POINT_OUT; @@ -811,9 +885,12 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var #ifdef DEB_CALCULATION cout << "\nOld shape(" << i << ") = " << aShape.TShape() <