X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_CalculationCase.cxx;h=509c2c5fb0bb63ffbd4ca5dd173f9d7aa5d15aa0;hb=81c9f5cdf82909d0aebd2c491c50fa7516cc80b7;hp=8498732a85d611bef94a1951a8f72e4be3652e66;hpb=093e1632a7b5ab67b164753d150489f2372238ca;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_CalculationCase.cxx b/src/HYDROData/HYDROData_CalculationCase.cxx index 8498732a..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 { @@ -609,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 @@ -626,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; @@ -669,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;