+QStringList HYDROData_Image::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const
+{
+ QStringList aResList = dumpObjectCreation( theTreatedObjects );
+ QString anImageName = GetObjPyName();
+
+ QString aFilePath = GetFilePath();
+ if ( !aFilePath.isEmpty() )
+ {
+ aResList << QString( "" );
+ aResList << QString( "%1.LoadImage( \"%2\" );" )
+ .arg( anImageName ).arg( aFilePath );
+ aResList << QString( "" );
+
+ // Dump transformation points for image
+
+ bool anIsByTwoPoints = IsByTwoPoints();
+
+ QPoint aLocalPointA, aLocalPointB, aLocalPointC;
+ if ( GetLocalPoints( aLocalPointA, aLocalPointB, aLocalPointC ) )
+ {
+ QString aGap = QString().fill( ' ', anImageName.size() + 17 );
+
+ aResList << QString( "%1.SetLocalPoints( QPoint( %2, %3 )," )
+ .arg( anImageName ).arg( aLocalPointA.x() ).arg( aLocalPointA.y() );
+ aResList << QString( aGap + "QPoint( %1, %2 )" )
+ .arg( aLocalPointB.x() ).arg( aLocalPointB.y() );
+ if ( !anIsByTwoPoints )
+ {
+ aResList.last().append( "," );
+ aResList << QString( aGap + "QPoint( %1, %2 ) );" )
+ .arg( aLocalPointC.x() ).arg( aLocalPointC.y() );
+ }
+ else
+ {
+ aResList.last().append( " );" );
+ }
+ aResList << QString( "" );
+ }
+
+ HYDROData_Image::TransformationMode aTransformationMode;
+ QPointF aTrsfPointA, aTrsfPointB, aTrsfPointC;
+ if ( GetGlobalPoints( aTransformationMode, aTrsfPointA, aTrsfPointB, aTrsfPointC ) )
+ {
+ QString aGap = QString().fill( ' ', anImageName.size() + 18 );
+
+ aResList << QString( "%1.SetGlobalPoints( %2," )
+ .arg( anImageName ).arg( aTransformationMode );
+ aResList << QString( aGap + "QPointF( %1, %2 )," )
+ .arg( aTrsfPointA.x() ).arg( aTrsfPointA.y() );
+ aResList << QString( aGap + "QPointF( %1, %2 )" )
+ .arg( aTrsfPointB.x() ).arg( aTrsfPointB.y() );
+ if ( !anIsByTwoPoints )
+ {
+ aResList.last().append( "," );
+ aResList << QString( aGap + "QPointF( %1, %2 ) );" )
+ .arg( aTrsfPointC.x() ).arg( aTrsfPointC.y() );
+ }
+ else
+ {
+ aResList.last().append( " );" );
+ }
+
+ if ( aTransformationMode == ReferenceImage )
+ {
+ Handle(HYDROData_Image) aRefImg = GetTrsfReferenceImage();
+ setPythonReferenceObject( theTreatedObjects, aResList, aRefImg, "SetTrsfReferenceImage" );
+ }
+ }
+ }
+ else
+ {
+ // Image is composed from other image(s)
+
+ QString anOperatorName = OperatorName();
+ if ( !anOperatorName.isEmpty() )
+ {
+ aResList << QString( "" );
+
+ aResList << QString( "%1.SetOperatorName( \"%2\" );" )
+ .arg( anImageName ).arg( anOperatorName );
+
+ ImageComposer_Operator* anImageOp =
+ HYDROData_OperationsFactory::Factory()->Operator( OperatorName() );
+ if ( anImageOp )
+ {
+ // Dump operation arguments
+ QString anOpArgsArrayName;
+ QStringList anOpArgs = anImageOp->dumpArgsToPython( anOpArgsArrayName );
+ if ( !anOpArgs.isEmpty() )
+ {
+ aResList << QString( "" );
+ aResList << anOpArgs;
+
+ aResList << QString( "" );
+ aResList << QString( "%1.SetArgs( %2 );" )
+ .arg( anImageName ).arg( anOpArgsArrayName );
+ }
+ }
+ }
+
+ int aNbReferences = NbReferences();
+ if ( aNbReferences > 0 )
+ {
+ aResList << QString( "" );
+
+ for ( int i = 0; i < aNbReferences; ++i )
+ {
+ Handle(HYDROData_Image) aRefImg = Handle(HYDROData_Image)::DownCast( Reference( i ) );
+ setPythonReferenceObject( theTreatedObjects, aResList, aRefImg, "AppendReference" );
+ }
+ }
+ }
+
+ aResList << QString( "" );
+ aResList << QString( "%1.Update();" ).arg( anImageName );
+
+ return aResList;
+}
+
+void HYDROData_Image::Update()
+{
+ bool anIsToUpdate = IsMustBeUpdated();
+
+ HYDROData_Entity::Update();
+
+ if ( !anIsToUpdate )
+ return;
+
+ HYDROData_OperationsFactory* aFactory = HYDROData_OperationsFactory::Factory();
+
+ ImageComposer_Operator* anOp = aFactory->Operator( OperatorName() );
+ if ( anOp ) // Update image if there is an operation
+ {
+ // Fill by arguments and process the operation
+ anOp->setBinArgs( Args() );
+
+ QVariant anObj1, anObj2;
+ int aNbReferences = NbReferences();
+
+ if ( aNbReferences > 0 )
+ {
+ // First referenced object
+ Handle(HYDROData_Entity) aRefObj = Reference( 0 );
+ if ( !aRefObj.IsNull() )
+ {
+ anObj1 = aRefObj->GetDataVariant();
+ if ( !anObj1.isNull() && anObj1.canConvert<ImageComposer_Image>() )
+ {
+ ImageComposer_Image anImage = anObj1.value<ImageComposer_Image>();
+ QTransform aTransform = anImage.transform();
+ SetTrsf( aTransform );
+ }
+ }
+ }
+
+ if ( aNbReferences > 1 )
+ {
+ // Second referenced object
+ Handle(HYDROData_Entity) aRefObj = Reference( 1 );
+ if ( !aRefObj.IsNull() )
+ anObj2 = aRefObj->GetDataVariant();
+ }
+
+ ImageComposer_Image aResImg = anOp->process( anObj1, anObj2 );
+ SetImage( aResImg );
+ SetTrsf( aResImg.transform() );
+ }
+ else // Update image if it positioned relatively to other image
+ {
+ UpdateTrsf();
+ }
+
+ SetToUpdate( false );
+}
+
+bool HYDROData_Image::IsHas2dPrs() const
+{
+ return true;
+}
+
+QVariant HYDROData_Image::GetDataVariant()
+{
+ QTransform aTransform = Trsf();
+
+ ImageComposer_Image anImage = Image();
+ anImage.setTransform( aTransform );
+
+ QVariant aVarData;
+ aVarData.setValue<ImageComposer_Image>( anImage );
+
+ return aVarData;
+}
+
+HYDROData_SequenceOfObjects HYDROData_Image::GetAllReferenceObjects() const
+{
+ HYDROData_SequenceOfObjects aResSeq = HYDROData_Entity::GetAllReferenceObjects();
+
+ Handle(HYDROData_Image) aRefImage = GetTrsfReferenceImage();
+ if ( !aRefImage.IsNull() )
+ aResSeq.Append( aRefImage );
+
+ HYDROData_SequenceOfObjects aSeqRefObjects = GetReferenceObjects( 0 );
+ aResSeq.Append( aSeqRefObjects );
+
+ return aResSeq;
+}
+