X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_Profile.cxx;h=99412519316018719820d4057e015a934117ba32;hb=58bb6b7459bebeeb089c9ed486c4683a8bae7288;hp=f8dc8a3327ab9d175d309393e6191fd025e3f19c;hpb=2396bb1dcf012a09bb9492c69da1f30c84c76fe7;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Profile.cxx b/src/HYDROData/HYDROData_Profile.cxx old mode 100755 new mode 100644 index f8dc8a33..99412519 --- a/src/HYDROData/HYDROData_Profile.cxx +++ b/src/HYDROData/HYDROData_Profile.cxx @@ -23,8 +23,6 @@ #include "HYDROData_Tool.h" #include "HYDROData_PolylineXY.h" -#include - #include #include #include @@ -37,6 +35,9 @@ #include #include #include +#include +#include +#include #include #include @@ -52,11 +53,10 @@ #include #include -IMPLEMENT_STANDARD_HANDLE(HYDROData_Profile, HYDROData_Object) IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Profile, HYDROData_Object) HYDROData_Profile::HYDROData_Profile() -: HYDROData_Object() +: HYDROData_Object( Geom_3d ) { } @@ -64,7 +64,8 @@ HYDROData_Profile::~HYDROData_Profile() { } -QStringList HYDROData_Profile::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const +QStringList HYDROData_Profile::DumpToPython( const QString& thePyScriptPath, + MapOfTreatedObjects& theTreatedObjects ) const { QStringList aResList = dumpObjectCreation( theTreatedObjects ); QString aProfileName = GetObjPyName(); @@ -72,7 +73,7 @@ QStringList HYDROData_Profile::DumpToPython( MapOfTreatedObjects& theTreatedObje //TCollection_AsciiString aFilePath = GetFilePath(); //if ( !aFilePath.IsEmpty() ) //{ - // aResList << QString( "%1.ImportFromFile( \"%2\" );" ) + // aResList << QString( "%1.ImportFromFile( \"%2\" )" ) // .arg( aName ).arg( aFilePath.ToCString() ); //} @@ -115,7 +116,7 @@ QStringList HYDROData_Profile::DumpToPython( MapOfTreatedObjects& theTreatedObje aResList << aPntsDefinition; - aResList << QString( "%1.%3( %2 );" ) + aResList << QString( "%1.%3( %2 )" ) .arg( aProfileName ).arg( aPntsListName ) .arg( anIsValidProfile ? "SetProfilePoints" : "SetParametricPoints" ); @@ -129,13 +130,13 @@ QStringList HYDROData_Profile::DumpToPython( MapOfTreatedObjects& theTreatedObje HYDROData_IPolyline::SectionType aSecType = aPrf->GetSectionType( 0 ); if ( aSecType != HYDROData_IPolyline::SECTION_POLYLINE ) { - aResList << QString( "%1.GetProfileUZ().SetSectionType( 0, %2 );" ) + aResList << QString( "%1.GetProfileUZ().SetSectionType( 0, %2 )" ) .arg( aProfileName ).arg( "HYDROData_IPolyline.SECTION_SPLINE" ); aResList << QString( "" ); } } - aResList << QString( "%1.Update();" ).arg( aProfileName ); + aResList << QString( "%1.Update()" ).arg( aProfileName ); aResList << QString( "" ); return aResList; @@ -229,7 +230,7 @@ void HYDROData_Profile::SetLeftPoint( const gp_XY& theGPoint, bool IsConvertFrom anArray->SetValue( 0, aLPoint.X() ); anArray->SetValue( 1, aLPoint.Y() ); - SetToUpdate( true ); + Changed( Geom_3d ); } bool HYDROData_Profile::GetLeftPoint( gp_XY& thePoint, bool IsConvertToGlobal, @@ -281,7 +282,7 @@ void HYDROData_Profile::SetRightPoint( const gp_XY& theGPoint, bool IsConvertFro anArray->SetValue( 0, aLPoint.X() ); anArray->SetValue( 1, aLPoint.Y() ); - SetToUpdate( true ); + Changed( Geom_3d ); } bool HYDROData_Profile::GetRightPoint( gp_XY& thePoint, bool IsConvertToGlobal, @@ -326,7 +327,7 @@ void HYDROData_Profile::Invalidate() if ( !aLastLabel.IsNull() ) aLastLabel.ForgetAllAttributes(); - SetToUpdate( true ); + Changed( Geom_3d ); } Handle(HYDROData_ProfileUZ) HYDROData_Profile::GetProfileUZ( const bool theIsCreate ) const @@ -359,7 +360,7 @@ void HYDROData_Profile::RemovePoints() if ( !aProfileUZ.IsNull() ) { aProfileUZ->RemoveSections(); - SetToUpdate( true ); + Changed( Geom_3d ); } } @@ -374,7 +375,7 @@ void HYDROData_Profile::SetParametricPoints( const HYDROData_ProfileUZ::PointsLi aProfileUZ->AddPoint( 0, aPoint ); } - SetToUpdate( true ); + Changed( Geom_3d ); } HYDROData_ProfileUZ::PointsList HYDROData_Profile::GetParametricPoints() const @@ -478,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; @@ -501,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(); @@ -534,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 ); @@ -548,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(); @@ -563,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; @@ -596,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 ); @@ -619,8 +623,8 @@ bool HYDROData_Profile::ImportFromFile( OSD_File& theFile, double aCoordX = aValX.RealValue(); double aCoordY = aValY.RealValue(); - if ( boost::math::isnan( aCoordX ) || boost::math::isinf( aCoordX ) || - boost::math::isnan( aCoordY ) || boost::math::isinf( aCoordY ) ) + if ( HYDROData_Tool::IsNan( aCoordX ) || HYDROData_Tool::IsInf( aCoordX ) || + HYDROData_Tool::IsNan( aCoordY ) || HYDROData_Tool::IsInf( aCoordY ) ) aRes = false; if ( anIsParametric ) @@ -646,7 +650,7 @@ bool HYDROData_Profile::ImportFromFile( OSD_File& theFile, } double aCoordZ = aValZ.RealValue(); - if ( boost::math::isnan( aCoordZ ) || boost::math::isinf( aCoordZ ) ) + if ( HYDROData_Tool::IsNan( aCoordZ ) || HYDROData_Tool::IsInf( aCoordZ ) ) aRes = false; ProfilePoint aPoint( aCoordX, aCoordY, aCoordZ ); @@ -665,6 +669,8 @@ bool HYDROData_Profile::ImportFromFile( OSD_File& theFile, } else if ( anIsGeoref ) { + if( isToProject ) + ProjectProfilePoints( aPointsXYZ ); SetProfilePoints( aPointsXYZ, true ); } @@ -779,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() ); + } +}