X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROOperations_Factory.cxx;h=ffe38aa0d7f341aaa28083fd53cfadfd2a0e35a3;hb=f108c7fd8c3b2dbb8c263b14456a31f8dd1d0921;hp=c9c069665e61d50a20800ad941c35bcc0a407787;hpb=dc66d0122d32a15397b49a1578436f360b6c85e1;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROOperations_Factory.cxx b/src/HYDROData/HYDROOperations_Factory.cxx index c9c06966..ffe38aa0 100644 --- a/src/HYDROData/HYDROOperations_Factory.cxx +++ b/src/HYDROData/HYDROOperations_Factory.cxx @@ -7,7 +7,6 @@ #include #include #include -#include #include @@ -27,14 +26,6 @@ HYDROOperations_Factory* HYDROOperations_Factory::Factory() return FACTORY; } -ImageComposer_Operator* HYDROOperations_Factory::Operator(const QString theName) const -{ - if (myOps.contains(theName)) { - return myOps[theName]; - } - return NULL; -} - void HYDROOperations_Factory::Register( ImageComposer_Operator* theOperator) { @@ -49,18 +40,24 @@ HYDROOperations_Factory::HYDROOperations_Factory() } ImageComposer_Operator* HYDROOperations_Factory::Operator( - Handle(HYDROData_Image) theImage) const + Handle(HYDROData_Image) theImage ) const { // retreive operator instance by name - ImageComposer_Operator* anOp = Operator(theImage->OperatorName()); - if (!anOp) + ImageComposer_Operator* anOp = Operator( theImage->OperatorName() ); + if ( !anOp ) return anOp; + // fill arguments of the operator from theImage - theImage->Args(); - anOp->setBinArgs(theImage->Args()); + anOp->setBinArgs( theImage->Args() ); + return anOp; } +ImageComposer_Operator* HYDROOperations_Factory::Operator(const QString theName) const +{ + return myOps.contains( theName ) ? myOps[ theName ] : NULL; +} + Handle(HYDROData_Image) HYDROOperations_Factory::CreateImage( Handle(HYDROData_Document) theDoc, const ImageComposer_Operator* theOperator) { @@ -74,68 +71,3 @@ Handle(HYDROData_Image) HYDROOperations_Factory::CreateImage( } return anImage; } - -void HYDROOperations_Factory::UpdateImage( - Handle_HYDROData_Document theDoc, Handle(HYDROData_Image) theImage) -{ - // fill by arguments and process the operation - ImageComposer_Operator* anOp = Operator(theImage); - if (anOp) { // update image only if there is an operation - QTransform aTransform; - ImageComposer_Image anImage1; // first referenced image - if (theImage->NbReferences()) { - Handle(HYDROData_Image) anImage = - Handle(HYDROData_Image)::DownCast( theImage->Reference(0) ); - if( !anImage.IsNull() ) - { - anImage1 = anImage->Image(); - anImage1.setTransform(anImage->Trsf()); - aTransform = anImage1.transform(); - } - } - ImageComposer_Image anImage2; // second referenced image - if (theImage->NbReferences() > 1) { - Handle(HYDROData_Image) anImage = - Handle(HYDROData_Image)::DownCast( theImage->Reference(1) ); - if( !anImage.IsNull() ) - { - anImage2 = anImage->Image(); - anImage2.setTransform(anImage->Trsf()); - } - } - ImageComposer_Image aResImg = anOp->process(anImage1, anImage2); - theImage->SetImage(aResImg); - theImage->SetTrsf(aTransform); - } - // change the states of this and all depended images - theImage->MustBeUpdated(true); - SetMustBeUpdatedImages(theDoc); - theImage->MustBeUpdated(false); -} - -void HYDROOperations_Factory::SetMustBeUpdatedImages( - Handle_HYDROData_Document theDoc) const -{ - bool aChanged = true; - // iterate until there is no changes because images on all level of dependency must be updated - while(aChanged) { - aChanged = false; - HYDROData_Iterator anIter(theDoc, KIND_IMAGE); - for(; anIter.More(); anIter.Next()) { - Handle(HYDROData_Image) anImage = - Handle(HYDROData_Image)::DownCast(anIter.Current()); - if (!anImage->MustBeUpdated()) { - int a, aNBRefs = anImage->NbReferences(); - for(a = 0; a < aNBRefs; a++) { - Handle(HYDROData_Image) aRefImage = - Handle(HYDROData_Image)::DownCast(anImage->Reference(a)); - if (!aRefImage.IsNull() && aRefImage->MustBeUpdated()) { - // image references to updated => also must be updated - anImage->MustBeUpdated(true); - aChanged = true; - } - } - } - } - } -}