Salome HOME
Sorting alphabetically.
[modules/hydro.git] / src / HYDROData / HYDROOperations_Factory.cxx
index c4fff685724e5dbd3441769175467ea4c8b0d78c..ffe38aa0d7f341aaa28083fd53cfadfd2a0e35a3 100644 (file)
@@ -7,7 +7,6 @@
 #include<ImageComposer_CropOperator.h>
 #include<ImageComposer_CutOperator.h>
 #include<ImageComposer_FuseOperator.h>
-#include<ImageComposer_Image.h>
 
 #include <typeinfo>
 
@@ -27,18 +26,13 @@ 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)
 {
-  FACTORY->myOps[QString(typeid(*theOperator).name())] = theOperator;
+  if ( !theOperator )
+    return;
+
+  FACTORY->myOps[ theOperator->name() ] = theOperator;
 }
 
 HYDROOperations_Factory::HYDROOperations_Factory()
@@ -46,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)
 {
@@ -66,73 +66,8 @@ Handle(HYDROData_Image) HYDROOperations_Factory::CreateImage(
     Handle(HYDROData_Image)::DownCast(theDoc->CreateObject(KIND_IMAGE));
   // get data from operation
   if (theOperator) {
-    anImage->SetOperatorName(QString(typeid(*theOperator).name()));
-    anImage->SetArgs(theOperator->getBinArgs());
+    anImage->SetOperatorName( theOperator->name() );
+    anImage->SetArgs( theOperator->getBinArgs() );
   }
   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;
-          }
-        }
-      }
-    }
-  }
-}