X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_Image.cxx;h=ca01c6555c646d0b7083e3a118b7a871688941f8;hb=0d9decc8762a829f1bdc69048fab08122e441ec0;hp=49b9f1fbecd143db7947bcd63ac116efa0364676;hpb=f529aeb00bbfafd835531128554a0006c60597c3;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Image.cxx b/src/HYDROData/HYDROData_Image.cxx index 49b9f1fb..ca01c655 100644 --- a/src/HYDROData/HYDROData_Image.cxx +++ b/src/HYDROData/HYDROData_Image.cxx @@ -1,18 +1,18 @@ #include "HYDROData_Image.h" -#include "HYDROData_Iterator.h" -#include "HYDROOperations_Factory.h" +#include "HYDROData_Document.h" #include "HYDROData_Tool.h" +#include "HYDROData_OperationsFactory.h" #include #include +#include #include #include #include #include #include -#include #include #include @@ -24,10 +24,11 @@ static const Standard_GUID GUID_SELF_SPLITTED("997995aa-5c19-40bf-9a60-ab4b70ad0 #define PYTHON_IMAGE_ID "KIND_IMAGE" -IMPLEMENT_STANDARD_HANDLE(HYDROData_Image, HYDROData_Object) -IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Image, HYDROData_Object) +IMPLEMENT_STANDARD_HANDLE(HYDROData_Image, HYDROData_Entity) +IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Image, HYDROData_Entity) HYDROData_Image::HYDROData_Image() +: HYDROData_Entity() { } @@ -57,6 +58,62 @@ QStringList HYDROData_Image::DumpToPython( MapOfTreatedObjects& theTreatedObject aResList << QString( "" ); aResList << QString( "%1.LoadImage( \"%2\" );" ) .arg( anImageName ).arg( aFilePath ); + + // Dump transformation matrix for image + aResList << QString( "" ); + + QTransform aTrsf = Trsf(); + + aResList << QString( "trsf = QTransform( %1, %2, %3," ) + .arg( aTrsf.m11() ).arg( aTrsf.m12() ).arg( aTrsf.m13() ); + aResList << QString( " %1, %2, %3," ) + .arg( aTrsf.m21() ).arg( aTrsf.m22() ).arg( aTrsf.m23() ); + aResList << QString( " %1, %2, %3 );" ) + .arg( aTrsf.m31() ).arg( aTrsf.m32() ).arg( aTrsf.m33() ); + + aResList << QString( "%1.SetTrsf( trsf );" ).arg( anImageName ); + + // Dump transformation points for image + aResList << QString( "" ); + + QPoint aPointA, aPointB, aPointC; + QPointF aLambertPointA, aLambertPointB, aLambertPointC; + QPointF aCartesianPointA, aCartesianPointB, aCartesianPointC; + TrsfPoints( aPointA, aPointB, aPointC, + aLambertPointA, aLambertPointB, aLambertPointC, + aCartesianPointA, aCartesianPointB, aCartesianPointC ); + + aResList << QString( "pa = QPoint( %1, %2 );" ) + .arg( aPointA.x() ).arg( aPointA.y() ); + + aResList << QString( "pb = QPoint( %1, %2 );" ) + .arg( aPointB.x() ).arg( aPointB.y() ); + + aResList << QString( "pc = QPoint( %1, %2 );" ) + .arg( aPointC.x() ).arg( aPointC.y() ); + + aResList << QString( "lpa = QPointF( %1, %2 );" ) + .arg( aLambertPointA.x() ).arg( aLambertPointA.y() ); + + aResList << QString( "lpb = QPointF( %1, %2 );" ) + .arg( aLambertPointB.x() ).arg( aLambertPointB.y() ); + + aResList << QString( "lpc = QPointF( %1, %2 );" ) + .arg( aLambertPointC.x() ).arg( aLambertPointC.y() ); + + aResList << QString( "cpa = QPointF( %1, %2 );" ) + .arg( aCartesianPointA.x() ).arg( aCartesianPointA.y() ); + + aResList << QString( "cpb = QPointF( %1, %2 );" ) + .arg( aCartesianPointB.x() ).arg( aCartesianPointB.y() ); + + aResList << QString( "cpc = QPointF( %1, %2 );" ) + .arg( aCartesianPointC.x() ).arg( aCartesianPointC.y() ); + + QString aGap = QString().fill( ' ', anImageName.size() + 16 ); + aResList << QString( "%1.SetTrsfPoints( pa, pb, pc," ).arg( anImageName ); + aResList << QString( aGap + "lpa, lpb, lpc," ); + aResList << QString( aGap + "cpa, cpb, cpc );" ); } else { @@ -70,7 +127,7 @@ QStringList HYDROData_Image::DumpToPython( MapOfTreatedObjects& theTreatedObject aResList << QString( "%1.SetOperatorName( \"%2\" );" ) .arg( anImageName ).arg( anOperatorName ); - ImageComposer_Operator* anImageOp = HYDROOperations_Factory::Factory()->Operator( this ); + ImageComposer_Operator* anImageOp = HYDROData_OperationsFactory::Factory()->Operator( this ); if ( anImageOp ) { // Dump operation arguments @@ -96,91 +153,24 @@ QStringList HYDROData_Image::DumpToPython( MapOfTreatedObjects& theTreatedObject for ( int i = 0; i < aNbReferences; ++i ) { Handle(HYDROData_Image) aRefImg = Handle(HYDROData_Image)::DownCast( Reference( i ) ); - if ( aRefImg.IsNull() ) - continue; - - QString aRefImgName = aRefImg->GetName(); - - // The definition of reference image must be dumped before this - if ( !theTreatedObjects.contains( aRefImgName ) ) - { - // Write definition of reference image - QStringList aRefImgDump = aRefImg->DumpToPython( theTreatedObjects ); - if ( aRefImgDump.isEmpty() ) - continue; - - QStringList aTmpList = aResList; - aResList = aRefImgDump; - - aResList.append( "" ); - aResList.append( aTmpList ); - - theTreatedObjects.insert( aRefImgName, aRefImg ); - } - - aResList << QString( "%1.AppendReference( %2 );" ) - .arg( anImageName ).arg( aRefImgName ); + setPythonReferenceObject( theTreatedObjects, aResList, aRefImg, "AppendReference" ); } } // Necessary to update image in case of composed operator aResList << QString( "" ); - aResList << QString( "%1.Update();" ).arg( anImageName ); + aResList << QString( "%1.Update( False );" ).arg( anImageName ); } - // Dump transformation matrix for image - aResList << QString( "" ); - - QTransform aTrsf = Trsf(); - - aResList << QString( "trsf = QTransform( %2, %3, %4," ) - .arg( aTrsf.m11() ).arg( aTrsf.m12() ).arg( aTrsf.m13() ); - aResList << QString( " %1, %2, %3," ) - .arg( aTrsf.m21() ).arg( aTrsf.m22() ).arg( aTrsf.m23() ); - aResList << QString( " %1, %2, %3 );" ) - .arg( aTrsf.m31() ).arg( aTrsf.m32() ).arg( aTrsf.m33() ); - - aResList << QString( "%1.SetTrsf( trsf );" ).arg( anImageName ); - - // Dump transformation points for image - aResList << QString( "" ); - - QPoint aPointAIn, aPointBIn, aPointCIn; - QPointF aPointAOut, aPointBOut, aPointCOut; - TrsfPoints( aPointAIn, aPointBIn, aPointCIn, - aPointAOut, aPointBOut, aPointCOut ); - - aResList << QString( "a_in = QPoint( %1, %2 );" ) - .arg( aPointAIn.x() ).arg( aPointAIn.y() ); - - aResList << QString( "b_in = QPoint( %1, %2 );" ) - .arg( aPointBIn.x() ).arg( aPointBIn.y() ); - - aResList << QString( "c_in = QPoint( %1, %2 );" ) - .arg( aPointCIn.x() ).arg( aPointCIn.y() ); - - aResList << QString( "a_out = QPointF( %1, %2 );" ) - .arg( aPointAOut.x() ).arg( aPointAOut.y() ); - - aResList << QString( "b_out = QPointF( %1, %2 );" ) - .arg( aPointBOut.x() ).arg( aPointBOut.y() ); - - aResList << QString( "c_out = QPointF( %1, %2 );" ) - .arg( aPointCOut.x() ).arg( aPointCOut.y() ); - - QString aGap = QString().fill( ' ', anImageName.size() + 16 ); - aResList << QString( "%1.SetTrsfPoints( a_in, b_in, c_in," ).arg( anImageName ); - aResList << QString( aGap + "a_out, b_out, c_out );" ); - return aResList; } -void HYDROData_Image::Update() +void HYDROData_Image::Update( const bool theIsForce ) { - HYDROOperations_Factory* aFactory = HYDROOperations_Factory::Factory(); + HYDROData_OperationsFactory* aFactory = HYDROData_OperationsFactory::Factory(); // Update image only if there is an operation - ImageComposer_Operator* anOp = aFactory->Operator( this ); + ImageComposer_Operator* anOp = aFactory->Operator( OperatorName() ); if ( anOp ) { // Fill by arguments and process the operation @@ -190,7 +180,7 @@ void HYDROData_Image::Update() if ( aNbReferences > 0 ) { // First referenced object - Handle(HYDROData_Object) aRefObj = Reference( 0 ); + Handle(HYDROData_Entity) aRefObj = Reference( 0 ); if ( !aRefObj.IsNull() ) { anObj1 = aRefObj->GetDataVariant(); @@ -206,7 +196,7 @@ void HYDROData_Image::Update() if ( aNbReferences > 1 ) { // Second referenced object - Handle(HYDROData_Object) aRefObj = Reference( 1 ); + Handle(HYDROData_Entity) aRefObj = Reference( 1 ); if ( !aRefObj.IsNull() ) anObj2 = aRefObj->GetDataVariant(); } @@ -215,13 +205,16 @@ void HYDROData_Image::Update() SetImage( aResImg ); } - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( this ); - if ( !aDocument.IsNull() ) + if ( theIsForce ) { - // Change the states of this and all depended images - MustBeUpdated( true ); - HYDROData_Tool::SetMustBeUpdatedImages( aDocument ); - MustBeUpdated( false ); + Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( this ); + if ( !aDocument.IsNull() ) + { + // Change the states of this and all depended images + MustBeUpdated( true ); + HYDROData_Tool::SetMustBeUpdatedImages( aDocument ); + MustBeUpdated( false ); + } } } @@ -330,46 +323,61 @@ QTransform HYDROData_Image::Trsf() const return aTrsf; } -void HYDROData_Image::SetTrsfPoints(const QPoint& thePointAIn, - const QPoint& thePointBIn, - const QPoint& thePointCIn, - const QPointF& thePointAOut, - const QPointF& thePointBOut, - const QPointF& thePointCOut) +void HYDROData_Image::SetTrsfPoints(const QPoint& thePointA, + const QPoint& thePointB, + const QPoint& thePointC, + const QPointF& theLambertPointA, + const QPointF& theLambertPointB, + const QPointF& theLambertPointC, + const QPointF& theCartesianPointA, + const QPointF& theCartesianPointB, + const QPointF& theCartesianPointC) { Handle(TDataStd_RealArray) anArray; if (!myLab.FindChild(DataTag_TrsfPoints).FindAttribute(TDataStd_RealArray::GetID(), anArray)) { - anArray = TDataStd_RealArray::Set(myLab.FindChild(DataTag_TrsfPoints), 1, 12); + anArray = TDataStd_RealArray::Set(myLab.FindChild(DataTag_TrsfPoints), 1, 18); } - anArray->SetValue(1, thePointAIn.x()); - anArray->SetValue(2, thePointAIn.y()); - anArray->SetValue(3, thePointBIn.x()); - anArray->SetValue(4, thePointBIn.y()); - anArray->SetValue(5, thePointCIn.x()); - anArray->SetValue(6, thePointCIn.y()); - anArray->SetValue(7, thePointAOut.x()); - anArray->SetValue(8, thePointAOut.y()); - anArray->SetValue(9, thePointBOut.x()); - anArray->SetValue(10, thePointBOut.y()); - anArray->SetValue(11, thePointCOut.x()); - anArray->SetValue(12, thePointCOut.y()); + anArray->SetValue(1, thePointA.x()); + anArray->SetValue(2, thePointA.y()); + anArray->SetValue(3, thePointB.x()); + anArray->SetValue(4, thePointB.y()); + anArray->SetValue(5, thePointC.x()); + anArray->SetValue(6, thePointC.y()); + anArray->SetValue(7, theLambertPointA.x()); + anArray->SetValue(8, theLambertPointA.y()); + anArray->SetValue(9, theLambertPointB.x()); + anArray->SetValue(10, theLambertPointB.y()); + anArray->SetValue(11, theLambertPointC.x()); + anArray->SetValue(12, theLambertPointC.y()); + anArray->SetValue(13, theCartesianPointA.x()); + anArray->SetValue(14, theCartesianPointA.y()); + anArray->SetValue(15, theCartesianPointB.x()); + anArray->SetValue(16, theCartesianPointB.y()); + anArray->SetValue(17, theCartesianPointC.x()); + anArray->SetValue(18, theCartesianPointC.y()); } -void HYDROData_Image::TrsfPoints(QPoint& thePointAIn, - QPoint& thePointBIn, - QPoint& thePointCIn, - QPointF& thePointAOut, - QPointF& thePointBOut, - QPointF& thePointCOut) const +void HYDROData_Image::TrsfPoints(QPoint& thePointA, + QPoint& thePointB, + QPoint& thePointC, + QPointF& theLambertPointA, + QPointF& theLambertPointB, + QPointF& theLambertPointC, + QPointF& theCartesianPointA, + QPointF& theCartesianPointB, + QPointF& theCartesianPointC) const { Handle(TDataStd_RealArray) anArray; if (myLab.FindChild(DataTag_TrsfPoints).FindAttribute(TDataStd_RealArray::GetID(), anArray)) { - thePointAIn = QPointF( anArray->Value(1), anArray->Value(2) ).toPoint(); - thePointBIn = QPointF( anArray->Value(3), anArray->Value(4) ).toPoint(); - thePointCIn = QPointF( anArray->Value(5), anArray->Value(6) ).toPoint(); - thePointAOut = QPointF( anArray->Value(7), anArray->Value(8) ); - thePointBOut = QPointF( anArray->Value(9), anArray->Value(10) ); - thePointCOut = QPointF( anArray->Value(11), anArray->Value(12) ); + thePointA = QPointF( anArray->Value(1), anArray->Value(2) ).toPoint(); + thePointB = QPointF( anArray->Value(3), anArray->Value(4) ).toPoint(); + thePointC = QPointF( anArray->Value(5), anArray->Value(6) ).toPoint(); + theLambertPointA = QPointF( anArray->Value(7), anArray->Value(8) ); + theLambertPointB = QPointF( anArray->Value(9), anArray->Value(10) ); + theLambertPointC = QPointF( anArray->Value(11), anArray->Value(12) ); + theCartesianPointA = QPointF( anArray->Value(13), anArray->Value(14) ); + theCartesianPointB = QPointF( anArray->Value(15), anArray->Value(16) ); + theCartesianPointC = QPointF( anArray->Value(17), anArray->Value(18) ); } } @@ -379,77 +387,48 @@ bool HYDROData_Image::HasTrsfPoints() const return myLab.FindChild(DataTag_TrsfPoints).FindAttribute(TDataStd_RealArray::GetID(), anArray); } -void HYDROData_Image::AppendReference(Handle(HYDROData_Object) theReferenced) +void HYDROData_Image::SetTrsfMode(const int theMode) +{ + TDataStd_Integer::Set(myLab.FindChild(DataTag_TrsfMode), theMode); +} + +int HYDROData_Image::TrsfMode() const { - Handle(TDataStd_ReferenceList) aRefs; - if (!myLab.FindAttribute(TDataStd_ReferenceList::GetID(), aRefs)) - aRefs = TDataStd_ReferenceList::Set(myLab); - aRefs->Append(theReferenced->Label()); + Handle(TDataStd_Integer) aMode; + if(myLab.FindChild(DataTag_TrsfMode).FindAttribute(TDataStd_Integer::GetID(), aMode)) + return aMode->Get(); + return 0; +} + +void HYDROData_Image::AppendReference( const Handle(HYDROData_Entity)& theReferenced ) +{ + AddReferenceObject( theReferenced, 0 ); } int HYDROData_Image::NbReferences() const { - Handle(TDataStd_ReferenceList) aRefs; - if (!myLab.FindAttribute(TDataStd_ReferenceList::GetID(), aRefs)) - return 0; - return aRefs->Extent(); + return NbReferenceObjects( 0 ); } -Handle(HYDROData_Object) HYDROData_Image::Reference(const int theIndex) const +Handle(HYDROData_Entity) HYDROData_Image::Reference( const int theIndex ) const { - Handle(TDataStd_ReferenceList) aRefs; - if (!myLab.FindAttribute(TDataStd_ReferenceList::GetID(), aRefs)) - return Handle(HYDROData_Object)(); - if (theIndex < 0 || theIndex >= aRefs->Extent()) - return Handle(HYDROData_Object)(); - - TDF_ListIteratorOfLabelList anIter(aRefs->List()); - for(int anIndex = 0; anIndex != theIndex; anIter.Next(), anIndex++); - const TDF_Label& aRefLab = anIter.Value(); - return Handle(HYDROData_Object)::DownCast(HYDROData_Iterator::Object(aRefLab)); + return GetReferenceObject( 0, theIndex ); } void HYDROData_Image::ChangeReference( - const int theIndex, Handle(HYDROData_Object) theReferenced) + const int theIndex, Handle(HYDROData_Entity) theReferenced) { - Handle(TDataStd_ReferenceList) aRefs; - if (!myLab.FindAttribute(TDataStd_ReferenceList::GetID(), aRefs)) - aRefs = TDataStd_ReferenceList::Set(myLab); - if (theIndex >= aRefs->Extent()) { // for too big index append it just to the end - AppendReference(theReferenced); - } else { // remove and insert new - TDF_ListIteratorOfLabelList anIter(aRefs->List()); - int anIndex = 0; - for(; anIndex != theIndex; anIter.Next(), anIndex++); - const TDF_Label& aRemovedLab = anIter.Value(); - anIter.Next(); - aRefs->Remove(aRemovedLab); - if (anIter.More()) - aRefs->InsertBefore(theReferenced->Label(), anIter.Value()); - else - aRefs->Append(theReferenced->Label()); - } + SetReferenceObject( theReferenced, 0, theIndex ); } void HYDROData_Image::RemoveReference(const int theIndex) { - Handle(TDataStd_ReferenceList) aRefs; - if (!myLab.FindAttribute(TDataStd_ReferenceList::GetID(), aRefs)) - return; // no references, nothing to remove - if (aRefs->Extent() == 1 && theIndex == 0) { // remove all if only one - ClearReferences(); - return; - } - TDF_ListIteratorOfLabelList anIter(aRefs->List()); - int anIndex = 0; - for(; anIndex != theIndex && anIter.More(); anIter.Next(), anIndex++); - if (anIter.More()) - aRefs->Remove(anIter.Value()); + RemoveReferenceObject( 0, theIndex ); } void HYDROData_Image::ClearReferences() { - myLab.ForgetAttribute(TDataStd_ReferenceList::GetID()); + ClearReferenceObjects( 0 ); } void HYDROData_Image::SetOperatorName(const QString theOpName)