X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FHYDROData%2FHYDROData_Profile.cxx;h=99412519316018719820d4057e015a934117ba32;hb=58bb6b7459bebeeb089c9ed486c4683a8bae7288;hp=6308af1403ff6020573c5c2fba0934802dc8045b;hpb=a0f46af000e5038df100106897aa04901ad59e49;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Profile.cxx b/src/HYDROData/HYDROData_Profile.cxx index 6308af14..99412519 100644 --- a/src/HYDROData/HYDROData_Profile.cxx +++ b/src/HYDROData/HYDROData_Profile.cxx @@ -35,6 +35,9 @@ #include #include #include +#include +#include +#include #include #include @@ -476,7 +479,8 @@ TCollection_AsciiString HYDROData_Profile::GetFilePath() const int HYDROData_Profile::ImportFromFile( const Handle(HYDROData_Document)& theDoc, const TCollection_AsciiString& theFileName, - NCollection_Sequence& theBadProfilesIds ) + NCollection_Sequence& theBadProfilesIds, + bool isToProject ) { if ( theDoc.IsNull() || theFileName.IsEmpty() ) return 0; @@ -499,7 +503,7 @@ int HYDROData_Profile::ImportFromFile( const Handle(HYDROData_Document)& theDoc, aNewProfile = Handle(HYDROData_Profile)::DownCast( theDoc->CreateObject( KIND_PROFILE ) ); bool anIsRead = false; - if ( aNewProfile->ImportFromFile( aFile, &anIsRead ) ) + if ( aNewProfile->ImportFromFile( aFile, isToProject, &anIsRead ) ) { aCreatedProfiles.Append( aNewProfile ); aNewProfile.Nullify(); @@ -532,10 +536,11 @@ int HYDROData_Profile::ImportFromFile( const Handle(HYDROData_Document)& theDoc, } bool HYDROData_Profile::ImportFromFile( const TCollection_AsciiString& theFileName, - bool* theIsRead ) + bool isToProject, + bool* isNotEmpty ) { - if ( theIsRead ) - *theIsRead = false; + if( isNotEmpty ) + *isNotEmpty = false; // Try to open the file OSD_File aFile( theFileName ); @@ -546,7 +551,7 @@ bool HYDROData_Profile::ImportFromFile( const TCollection_AsciiString& theFileNa if ( !aFile.IsOpen() ) return false; - bool aRes = ImportFromFile( aFile, theIsRead ); + bool aRes = ImportFromFile( aFile, isToProject, isNotEmpty ); // Close the file aFile.Close(); @@ -561,10 +566,11 @@ bool HYDROData_Profile::ImportFromFile( const TCollection_AsciiString& theFileNa } bool HYDROData_Profile::ImportFromFile( OSD_File& theFile, - bool* theIsRead ) + bool isToProject, + bool* isNotEmpty ) { - if ( theIsRead ) - *theIsRead = false; + if( isNotEmpty ) + *isNotEmpty = false; if ( !theFile.IsOpen() ) return false; @@ -594,8 +600,8 @@ bool HYDROData_Profile::ImportFromFile( OSD_File& theFile, } // Set flag of read status to true - if ( theIsRead ) - *theIsRead = true; + if( isNotEmpty ) + *isNotEmpty = true; TCollection_AsciiString aValX = aLine.Token( " \t", 1 ); TCollection_AsciiString aValY = aLine.Token( " \t", 2 ); @@ -663,6 +669,8 @@ bool HYDROData_Profile::ImportFromFile( OSD_File& theFile, } else if ( anIsGeoref ) { + if( isToProject ) + ProjectProfilePoints( aPointsXYZ ); SetProfilePoints( aPointsXYZ, true ); } @@ -777,4 +785,21 @@ HYDROData_Profile::ProfilePoint HYDROData_Profile::GetBottomPoint() const } return aMiddlePoint; - } \ No newline at end of file + } + +void HYDROData_Profile::ProjectProfilePoints( ProfilePoints& thePoints ) +{ + int low = thePoints.Lower(), up = thePoints.Upper(); + gp_Pnt aFirst = thePoints.Value( low ); + gp_Pnt aLast = thePoints.Value( up ); + gp_Vec d( aFirst, aLast ); + gp_Vec n( d.Y(), -d.X(), 0 ); + + Handle(Geom_Plane) aPlane = new Geom_Plane( aFirst, gp_Dir( n ) ); + for( int i=low; i<=up; i++ ) + { + gp_XYZ p = thePoints.Value( i ); + gp_Pnt pp = GeomAPI_ProjectPointOnSurf( p, aPlane ); + thePoints.SetValue( i, pp.XYZ() ); + } +}