X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_Document.cxx;h=3568066a333787753c5577adcae0b68ca70ba34c;hb=191c33b8fd827caa9af8886728e9df22ae55451e;hp=3a460435e4104d3639d364fd8ad5ecaeb54e118e;hpb=a40252f16bec66a1b952c3e15ee0fcdc591d892e;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Document.cxx b/src/HYDROData/HYDROData_Document.cxx index 3a460435..3568066a 100644 --- a/src/HYDROData/HYDROData_Document.cxx +++ b/src/HYDROData/HYDROData_Document.cxx @@ -9,7 +9,6 @@ #include -#include #include #include @@ -203,6 +202,13 @@ bool HYDROData_Document::DumpToPython( const QString& theFileName, bool aRes = true; + // Dump the local CS data to Python + UpdateLCSFields(); + QString aLCS = QString( "%1.SetLocalCS( %2, %3 )" ).arg( GetDocPyName() ).arg( myLX ).arg( myLY ); + if( theIsMultiFile ) + aLCS.prepend( " " ); + HYDROData_Tool::WriteStringsToFile( aFile, QStringList() << aLCS ); + // Dump all model objects to Python script aRes = aRes && dumpPartitionToPython( aFile, theIsMultiFile, aTreatedObjects, KIND_IMAGE ); aRes = aRes && dumpPartitionToPython( aFile, theIsMultiFile, aTreatedObjects, KIND_POLYLINEXY ); @@ -261,6 +267,7 @@ QStringList HYDROData_Document::DumpToPython( MapOfTreatedObjects& theTreatedObj if ( theIsMultiFile ) { + aResScript << QString( "import salome" ); aResScript << QString( "" ); aResScript << QString( "def RebuildData( theStudy ):" ); aResScript << QString( " %1 = HYDROData_Document.Document( theStudy._get_StudyId() );" ).arg( aDocName ); @@ -677,7 +684,7 @@ TDF_Label HYDROData_Document::LabelOfLocalCS() const return myDoc->Main().FindChild(TAG_LOCAL_CS); } -gp_Pnt2d HYDROData_Document::GetLocalCS() const +void HYDROData_Document::GetLocalCS( double& theLX, double& theLY ) const { TDF_Label aLocalCSLab = LabelOfLocalCS(); @@ -685,38 +692,92 @@ gp_Pnt2d HYDROData_Document::GetLocalCS() const if( aLocalCSLab.FindAttribute( TDataXtd_Position::GetID(), aLocalCS ) ) { gp_Pnt aLocalCS3d = aLocalCS->GetPosition(); - return gp_Pnt2d( aLocalCS3d.X(), aLocalCS3d.Y() ); + theLX = aLocalCS3d.X(); + theLY = aLocalCS3d.Y(); } else - return DEFAULT_LOCAL_CS; + { + theLX = DEFAULT_LOCAL_CS.X(); + theLY = DEFAULT_LOCAL_CS.Y(); + } } -void HYDROData_Document::SetLocalCS( const gp_Pnt2d& theLocalCS ) +void HYDROData_Document::SetLocalCS( double theLX, double theLY ) { - TDF_Label aLocalCSLab = LabelOfLocalCS(); + UpdateLCSFields(); + // update the local CS data in attribute + TDF_Label aLocalCSLab = LabelOfLocalCS(); Handle( TDataXtd_Position ) aLocalCS; if( !aLocalCSLab.FindAttribute( TDataXtd_Position::GetID(), aLocalCS ) ) aLocalCS = TDataXtd_Position::Set( aLocalCSLab ); - gp_Pnt aLocalCS3d( theLocalCS.X(), theLocalCS.Y(), 0 ); + gp_Pnt aLocalCS3d( theLX, theLY, 0 ); aLocalCS->SetPosition( aLocalCS3d ); - myLX = theLocalCS.X(); - myLY = theLocalCS.Y(); + + // calculate delta for coordinates + double aDX = myLX - theLX; + double aDY = myLY - theLY; + + // update the local CS data in internal fields + myLX = theLX; + myLY = theLY; + + //update all objects in the document + HYDROData_Iterator anIterator( this, KIND_UNKNOWN ); + for( ; anIterator.More(); anIterator.Next() ) + anIterator.Current()->UpdateLocalCS( aDX, aDY ); } -void HYDROData_Document::Transform( gp_Pnt& thePnt, bool IsToLocalCS ) const +void HYDROData_Document::UpdateLCSFields() const +{ + if( myLX >= 0 && myLY >= 0 ) + return; + + double aLX, aLY; + GetLocalCS( aLX, aLY ); + HYDROData_Document* aThat = const_cast( this ); + aThat->myLX = aLX; + aThat->myLY = aLY; +} + +void HYDROData_Document::Transform( double& X, double& Y, bool IsToLocalCS ) const { - if( myLX < 0 || myLY < 0 ) + UpdateLCSFields(); + if( IsToLocalCS ) { - gp_Pnt2d aLCS = GetLocalCS(); - HYDROData_Document* aThat = const_cast( this ); - aThat->myLX = aLCS.X(); - aThat->myLY = aLCS.Y(); + X -= myLX; + Y -= myLY; } - double X = IsToLocalCS ? thePnt.X() - myLX : thePnt.X() + myLX; - double Y = IsToLocalCS ? thePnt.Y() - myLY : thePnt.Y() + myLY; + else + { + X += myLX; + Y += myLY; + } +} + +void HYDROData_Document::Transform( gp_Pnt& thePnt, bool IsToLocalCS ) const +{ + double X = thePnt.X(); + double Y = thePnt.Y(); double Z = thePnt.Z(); + Transform( X, Y, IsToLocalCS ); thePnt = gp_Pnt( X, Y, Z ); } +void HYDROData_Document::Transform( gp_XYZ& thePnt, bool IsToLocalCS ) const +{ + double X = thePnt.X(); + double Y = thePnt.Y(); + double Z = thePnt.Z(); + Transform( X, Y, IsToLocalCS ); + thePnt = gp_XYZ( X, Y, Z ); +} + +void HYDROData_Document::Transform( gp_XY& thePnt, bool IsToLocalCS ) const +{ + double X = thePnt.X(); + double Y = thePnt.Y(); + Transform( X, Y, IsToLocalCS ); + thePnt = gp_XY( X, Y ); +}