X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_Profile.cxx;h=494461f2d15ec65cf4ea33924507ca4dc3dab89c;hb=81c9f5cdf82909d0aebd2c491c50fa7516cc80b7;hp=6d0d68571bebd1c3266ae42f8c4c29681583de53;hpb=63cfcd8fde33b237c06377b628b4e9e8027a425f;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Profile.cxx b/src/HYDROData/HYDROData_Profile.cxx index 6d0d6857..494461f2 100755 --- a/src/HYDROData/HYDROData_Profile.cxx +++ b/src/HYDROData/HYDROData_Profile.cxx @@ -43,21 +43,7 @@ HYDROData_Profile::~HYDROData_Profile() QStringList HYDROData_Profile::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const { QStringList aResList = dumpObjectCreation( theTreatedObjects ); - QString aName = GetObjPyName(); - - QColor aFillingColor = GetFillingColor(); - aResList << QString( "filling_color = QColor( %1, %2, %3, %4 );" ) - .arg( aFillingColor.red() ).arg( aFillingColor.green() ) - .arg( aFillingColor.blue() ).arg( aFillingColor.alpha() ); - aResList << QString( "%1.SetFillingColor( filling_color );" ).arg( aName ); - aResList << QString( "" ); - - QColor aBorderColor = GetBorderColor(); - aResList << QString( "border_color = QColor( %1, %2, %3, %4 );" ) - .arg( aBorderColor.red() ).arg( aBorderColor.green() ) - .arg( aBorderColor.blue() ).arg( aBorderColor.alpha() ); - aResList << QString( "%1.SetBorderColor( border_color );" ).arg( aName ); - aResList << QString( "" ); + QString aProfileName = GetObjPyName(); //TCollection_AsciiString aFilePath = GetFilePath(); //if ( !aFilePath.IsEmpty() ) @@ -66,22 +52,22 @@ QStringList HYDROData_Profile::DumpToPython( MapOfTreatedObjects& theTreatedObje // .arg( aName ).arg( aFilePath.ToCString() ); //} - bool isValid = IsValid(); - QString aGap = QString().fill( ' ', 11 ); + bool anIsValidProfile = IsValid(); - aResList << QString( "points = [" ); + QStringList aPntsDefinition; + QString aPntsListName = HYDROData_Tool::GenerateNameForPython( theTreatedObjects, "profile_points" ); - if ( isValid ) + QString aGap = QString().fill( ' ', aPntsListName.length() + 5 ); + if ( anIsValidProfile ) { - HYDROData_Profile::ProfilePoints aPointsList = GetProfilePoints(); + HYDROData_Profile::ProfilePoints aPointsList = GetProfilePoints( true ); for ( int k = 1, aNbPoints = aPointsList.Size(); k <= aNbPoints; ++k ) { const ProfilePoint& aPoint = aPointsList.Value( k ); - aResList << QString( aGap + "gp_XYZ( %1, %2, %3 )%4" ).arg( aPoint.X() ).arg( aPoint.Y() ).arg( aPoint.Z() ) - .arg( ( k < aNbPoints ? "," : "" ) ); + aPntsDefinition << QString( aGap + "gp_XYZ( %1, %2, %3 )%4" ) + .arg( aPoint.X() ).arg( aPoint.Y() ).arg( aPoint.Z() ) + .arg( ( k < aNbPoints ? "," : "" ) ); } - aResList << QString( "];" ); - aResList << QString( "%1.SetProfilePoints( points );" ).arg( aName ); } else { @@ -89,11 +75,27 @@ QStringList HYDROData_Profile::DumpToPython( MapOfTreatedObjects& theTreatedObje for ( int k = 1, aNbPoints = aPointsList.Size(); k <= aNbPoints; ++k ) { const HYDROData_IPolyline::Point& aPoint = aPointsList.Value( k ); - aResList << QString( aGap + "gp_XY( %1, %2 )%3" ).arg( aPoint.X() ).arg( aPoint.Y() ) - .arg( ( k < aNbPoints ? "," : "" ) ); + aPntsDefinition << QString( aGap + "gp_XY( %1, %2 )%3" ) + .arg( aPoint.X() ).arg( aPoint.Y() ) + .arg( ( k < aNbPoints ? "," : "" ) ); } - aResList << QString( "];" ); - aResList << QString( "%1.SetParametricPoints( points )" ).arg( aName ); + } + + if ( !aPntsDefinition.isEmpty() ) + { + QString& aFirstStr = aPntsDefinition.first(); + aFirstStr = aFirstStr.trimmed(); + aFirstStr.prepend( QString( "%1 = [ " ).arg( aPntsListName ) ); + + aPntsDefinition.last().append( " ];" ); + + aResList << aPntsDefinition; + + aResList << QString( "%1.%3( %2 );" ) + .arg( aProfileName ).arg( aPntsListName ) + .arg( anIsValidProfile ? "SetProfilePoints" : "SetParametricPoints" ); + + aResList << QString( "" ); } // Set a polyline type if it is not default @@ -103,13 +105,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 );" ).arg( aName ) - .arg( "HYDROData_IPolyline.SECTION_SPLINE" ); + aResList << QString( "%1.GetProfileUZ().SetSectionType( 0, %2 );" ) + .arg( aProfileName ).arg( "HYDROData_IPolyline.SECTION_SPLINE" ); + aResList << QString( "" ); } } - aResList << QString( "" ); - aResList << QString( "%1.Update();" ).arg( aName ); + aResList << QString( "%1.Update();" ).arg( aProfileName ); aResList << QString( "" ); return aResList; @@ -120,7 +122,7 @@ TopoDS_Shape HYDROData_Profile::GetTopShape() const TopoDS_Wire aWire; gp_XY aFirstPoint, aLastPoint; - if ( !GetLeftPoint( aFirstPoint ) || !GetRightPoint( aLastPoint ) ) + if ( !GetLeftPoint( aFirstPoint, false ) || !GetRightPoint( aLastPoint, false ) ) return aWire; gp_Pnt aPnt1( aFirstPoint.X(), aFirstPoint.Y(), 0 ); @@ -148,7 +150,7 @@ void HYDROData_Profile::Update() Handle(HYDROData_ProfileUZ) aProfile = GetProfileUZ( false ); if ( !aProfile.IsNull() ) { - ProfilePoints aProfilePoints = GetProfilePoints(); + ProfilePoints aProfilePoints = GetProfilePoints( false ); HYDROData_IPolyline::SectionType aSectionType = aProfile->GetSectionType( 0 ); aWire = HYDROData_PolylineXY::BuildWire( aSectionType, false, aProfilePoints ); @@ -179,33 +181,41 @@ QColor HYDROData_Profile::getDefaultBorderColor() const bool HYDROData_Profile::IsValid() const { gp_XY aFirstPoint, aLastPoint; - if ( !GetLeftPoint( aFirstPoint ) || !GetRightPoint( aLastPoint ) ) + if ( !GetLeftPoint( aFirstPoint, false ) || !GetRightPoint( aLastPoint, false ) ) return false; int aNbPoints = NbPoints(); return aNbPoints > 1; } -void HYDROData_Profile::SetLeftPoint( const gp_XY& thePoint ) +void HYDROData_Profile::SetLeftPoint( const gp_XY& theGPoint, bool IsConvertFromGlobal ) { TDF_Label aLabel = myLab.FindChild( DataTag_FirstPoint ); + if ( aLabel.IsNull() ) + return; + + Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( Label() ); + gp_XY aLPoint = theGPoint; + if( IsConvertFromGlobal ) + aDoc->Transform( aLPoint, true ); Handle(TDataStd_RealArray) anArray; if ( !aLabel.FindAttribute( TDataStd_RealArray::GetID(), anArray ) ) anArray = TDataStd_RealArray::Set( aLabel, 0, 1 ); - anArray->SetValue( 0, thePoint.X() ); - anArray->SetValue( 1, thePoint.Y() ); + anArray->SetValue( 0, aLPoint.X() ); + anArray->SetValue( 1, aLPoint.Y() ); SetToUpdate( true ); } -bool HYDROData_Profile::GetLeftPoint( gp_XY& thePoint ) const +bool HYDROData_Profile::GetLeftPoint( gp_XY& thePoint, bool IsConvertToGlobal ) const { TDF_Label aLabel = myLab.FindChild( DataTag_FirstPoint, false ); if ( aLabel.IsNull() ) return false; + Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( myLab ); Handle(TDataStd_RealArray) anArray; if ( !aLabel.FindAttribute( TDataStd_RealArray::GetID(), anArray ) ) return false; @@ -213,29 +223,38 @@ bool HYDROData_Profile::GetLeftPoint( gp_XY& thePoint ) const thePoint.SetX( anArray->Value( 0 ) ); thePoint.SetY( anArray->Value( 1 ) ); + if( IsConvertToGlobal ) + aDoc->Transform( thePoint, false ); + return true; } -void HYDROData_Profile::SetRightPoint( const gp_XY& thePoint ) +void HYDROData_Profile::SetRightPoint( const gp_XY& theGPoint, bool IsConvertFromGlobal ) { TDF_Label aLabel = myLab.FindChild( DataTag_LastPoint ); + Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( Label() ); + gp_XY aLPoint = theGPoint; + if( IsConvertFromGlobal ) + aDoc->Transform( aLPoint, true ); + Handle(TDataStd_RealArray) anArray; if ( !aLabel.FindAttribute( TDataStd_RealArray::GetID(), anArray ) ) anArray = TDataStd_RealArray::Set( aLabel, 0, 1 ); - anArray->SetValue( 0, thePoint.X() ); - anArray->SetValue( 1, thePoint.Y() ); + anArray->SetValue( 0, aLPoint.X() ); + anArray->SetValue( 1, aLPoint.Y() ); SetToUpdate( true ); } -bool HYDROData_Profile::GetRightPoint( gp_XY& thePoint ) const +bool HYDROData_Profile::GetRightPoint( gp_XY& thePoint, bool IsConvertToGlobal ) const { TDF_Label aLabel = myLab.FindChild( DataTag_LastPoint, false ); if ( aLabel.IsNull() ) return false; + Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( myLab ); Handle(TDataStd_RealArray) anArray; if ( !aLabel.FindAttribute( TDataStd_RealArray::GetID(), anArray ) ) return false; @@ -243,6 +262,9 @@ bool HYDROData_Profile::GetRightPoint( gp_XY& thePoint ) const thePoint.SetX( anArray->Value( 0 ) ); thePoint.SetY( anArray->Value( 1 ) ); + if( IsConvertToGlobal ) + aDoc->Transform( thePoint, false ); + return true; } @@ -313,7 +335,7 @@ HYDROData_ProfileUZ::PointsList HYDROData_Profile::GetParametricPoints() const return aProfileUZ.IsNull() ? HYDROData_ProfileUZ::PointsList() : aProfileUZ->GetPoints(); } -void HYDROData_Profile::SetProfilePoints( const ProfilePoints& thePoints ) +void HYDROData_Profile::SetProfilePoints( const ProfilePoints& thePoints, bool IsConvertFromGlobal ) { RemovePoints(); if ( thePoints.Length() < 2 ) @@ -321,10 +343,14 @@ void HYDROData_Profile::SetProfilePoints( const ProfilePoints& thePoints ) gp_XY aFirstPoint, aLastPoint; + Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( Label() ); Handle(HYDROData_ProfileUZ) aProfileUZ = GetProfileUZ(); for ( int i = 1, n = thePoints.Length(); i <= n ; ++i ) { - const ProfilePoint& aPoint = thePoints.Value( i ); + ProfilePoint aPoint = thePoints.Value( i ); + if( IsConvertFromGlobal ) + aDoc->Transform( aPoint, true ); + gp_XY aPointXY( aPoint.X(), aPoint.Y() ); if ( i == 1 ) @@ -338,16 +364,17 @@ void HYDROData_Profile::SetProfilePoints( const ProfilePoints& thePoints ) aProfileUZ->AddPoint( 0, aParPoint ); } - SetLeftPoint( aFirstPoint ); - SetRightPoint( aLastPoint ); + SetLeftPoint( aFirstPoint, false );//already converted to local CS + SetRightPoint( aLastPoint, false ); } -HYDROData_Profile::ProfilePoints HYDROData_Profile::GetProfilePoints() const +HYDROData_Profile::ProfilePoints HYDROData_Profile::GetProfilePoints( bool IsConvertToGlobal ) const { ProfilePoints aResPoints; gp_XY aFirstPoint, aLastPoint; - if ( !GetLeftPoint( aFirstPoint ) || !GetRightPoint( aLastPoint ) ) + if ( !GetLeftPoint( aFirstPoint, IsConvertToGlobal ) || + !GetRightPoint( aLastPoint, IsConvertToGlobal ) ) return aResPoints; HYDROData_ProfileUZ::PointsList aParametricPoints = GetParametricPoints(); @@ -592,7 +619,7 @@ bool HYDROData_Profile::ImportFromFile( OSD_File& theFile, } else if ( anIsGeoref ) { - SetProfilePoints( aPointsXYZ ); + SetProfilePoints( aPointsXYZ, true ); } Update(); @@ -601,5 +628,18 @@ bool HYDROData_Profile::ImportFromFile( OSD_File& theFile, return aRes; } +void HYDROData_Profile::UpdateLocalCS( double theDx, double theDy ) +{ + gp_XY aDelta( theDx, theDy ); + gp_XY aPnt; + + GetLeftPoint( aPnt, false ); + aPnt += aDelta; + SetLeftPoint( aPnt, false ); + + GetRightPoint( aPnt, false ); + aPnt += aDelta; + SetRightPoint( aPnt, false ); +}