X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_StreamAltitude.cxx;h=8c1f9f69f53bf84c9ef70b73bb9db4dadcb102d5;hb=191c33b8fd827caa9af8886728e9df22ae55451e;hp=bbcbb566e4f26ac0848811878b90f3d5f9f25d5b;hpb=29527ae70e9cc00e9f7017f9ab4f7af4091dbf7f;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_StreamAltitude.cxx b/src/HYDROData/HYDROData_StreamAltitude.cxx index bbcbb566..8c1f9f69 100644 --- a/src/HYDROData/HYDROData_StreamAltitude.cxx +++ b/src/HYDROData/HYDROData_StreamAltitude.cxx @@ -5,11 +5,9 @@ #include "HYDROData_Profile.h" #include "HYDROData_Stream.h" #include "HYDROData_ShapesTool.h" - +#include #include -#include - #include #include #include @@ -30,8 +28,15 @@ #include +#include + #include +#ifdef DEB_CLASS2D +#include +#include +#include +#endif IMPLEMENT_STANDARD_HANDLE(HYDROData_StreamAltitude, HYDROData_IAltitudeObject) IMPLEMENT_STANDARD_RTTIEXT(HYDROData_StreamAltitude, HYDROData_IAltitudeObject) @@ -44,15 +49,6 @@ HYDROData_StreamAltitude::~HYDROData_StreamAltitude() { } -QStringList HYDROData_StreamAltitude::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const -{ - QStringList aResList = dumpObjectCreation( theTreatedObjects ); - - // TODO - - return aResList; -} - Standard_Real getAltitudeFromProfile( const Handle(HYDROData_Profile)& theProfile, const Standard_Real& theLeftDist, const Standard_Real& theRightDist ) @@ -60,8 +56,8 @@ Standard_Real getAltitudeFromProfile( const Handle(HYDROData_Profile)& theProfil Standard_Real aResAlt = 0.0; gp_XY aFirstPoint, aLastPoint; - if ( !theProfile->GetLeftPoint( aFirstPoint ) || - !theProfile->GetRightPoint( aLastPoint ) ) + if ( !theProfile->GetLeftPoint( aFirstPoint, false ) || + !theProfile->GetRightPoint( aLastPoint, false ) ) return aResAlt; gp_Pnt aPnt1( aFirstPoint.X(), aFirstPoint.Y(), 0 ); @@ -77,7 +73,7 @@ Standard_Real getAltitudeFromProfile( const Handle(HYDROData_Profile)& theProfil gp_Pnt aPrevPoint; gp_Lin aPrevNormal; - HYDROData_Profile::ProfilePoints aProfilePoints = theProfile->GetProfilePoints(); + HYDROData_Profile::ProfilePoints aProfilePoints = theProfile->GetProfilePoints( false ); for ( int i = 1, n = aProfilePoints.Length(); i <= n; ++i ) { gp_Pnt aProfPoint( aProfilePoints.Value( i ) ); @@ -147,7 +143,8 @@ bool HYDROData_StreamAltitude::getBoundaryProfilesForPoint( continue; gp_XY aFirstPoint, aLastPoint; - if ( !aProfile->GetLeftPoint( aFirstPoint ) || !aProfile->GetRightPoint( aLastPoint ) ) + if ( !aProfile->GetLeftPoint( aFirstPoint, false ) || + !aProfile->GetRightPoint( aLastPoint, false ) ) continue; gp_Pnt aPnt1( aFirstPoint.X(), aFirstPoint.Y(), 0 ); @@ -164,11 +161,24 @@ bool HYDROData_StreamAltitude::getBoundaryProfilesForPoint( aRightMakeEdge.Edge(), aTopMakeEdge.Edge() ); BRepBuilderAPI_MakeFace aMakeFace( aMakeWire.Wire() ); - + TopoDS_Face aProfilesFace = aMakeFace.Face(); - - BRepTopAdaptor_FClass2d aClassifier( aProfilesFace, Precision::Confusion() ); - TopAbs_State aPointState = aClassifier.Perform( gp_Pnt2d( thePoint ), Standard_False ); +#ifdef DEB_CLASS2D + TopoDS_Compound aCmp; + BRep_Builder aBB; + aBB.MakeCompound(aCmp); + aBB.Add(aCmp, aProfilesFace); + gp_Pnt aPnt (thePoint.X(), thePoint.Y(), 0.); + BRepBuilderAPI_MakeVertex aMk(aPnt); + aBB.Add(aCmp, aMk.Vertex()); + BRepTools::Write(aCmp, "ProfileFace.brep"); +#endif + + TopAbs_State aPointState = HYDROData_Tool::ComputePointState(thePoint, aProfilesFace); + +#ifdef DEB_CLASS2D + cout << "Point status is = " << aPointState <GetProfilePoints( false ); + gp_Pnt aLeftProfileP1( aLeftProfilePoints.First() ); + aLeftProfileP1.SetZ( 0 ); + gp_Pnt aLeftProfileP2( aLeftProfilePoints.Last() ); + aLeftProfileP2.SetZ( 0 ); + gp_Vec aLeftProfileVec( aLeftProfileP1, aLeftProfileP2 ); + Handle(Geom_Line) aLeftProfileLine = new Geom_Line( gp_Ax1( aLeftProfileP1, aLeftProfileVec ) ); + // Right profile line + HYDROData_Profile::ProfilePoints aRightProfilePoints = aRightProfile->GetProfilePoints( false ); + gp_Pnt aRightProfileP1( aRightProfilePoints.First() ); + aRightProfileP1.SetZ( 0 ); + gp_Pnt aRightProfileP2( aRightProfilePoints.Last() ); + aRightProfileP2.SetZ( 0 ); + gp_Vec aRightProfileVec( aRightProfileP1, aRightProfileP2 ); + Handle(Geom_Line) aRightProfileLine = new Geom_Line( gp_Ax1( aRightProfileP1, aRightProfileVec ) ); + // The point projections on the left and right profiles + GeomAPI_ProjectPointOnCurve aLeftProfileProject( aPointToTest, aLeftProfileLine ); + GeomAPI_ProjectPointOnCurve aRightProfileProject( aPointToTest, aRightProfileLine ); + // The point distance to the left and right profiles + Standard_Real aLeftProfileDist = aLeftProfileProject.LowerDistance(); + Standard_Real aRightProfileDist = aRightProfileProject.LowerDistance(); + // The coefficients + Standard_Real aFirstCoeff = aLeftProfileDist / ( aLeftProfileDist + aRightProfileDist ); + Standard_Real aSecCoeff = aRightProfileDist / ( aLeftProfileDist + aRightProfileDist ); + + aResAltitude = aLeftAlt * ( 1 - aFirstCoeff ) + aRightAlt * ( 1 - aSecCoeff ); return aResAltitude; }