]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
Fix for IPAL13727 : anim properties accessible via TUI.
authormkr <mkr@opencascade.com>
Tue, 21 Nov 2006 14:10:42 +0000 (14:10 +0000)
committermkr <mkr@opencascade.com>
Tue, 21 Nov 2006 14:10:42 +0000 (14:10 +0000)
src/VISU_I/VISU_ColoredPrs3d_i.cc
src/VISU_I/VISU_ColoredPrs3d_i.hh
src/VISU_I/VISU_ScalarMap_i.cc
src/VISU_I/VISU_TimeAnimation.cxx
src/VISU_SWIG/Makefile.in
src/VISU_SWIG/visu_apply_properties.py [new file with mode: 0644]
src/VISU_SWIG/visu_apply_properties_successive.py [new file with mode: 0644]

index 275d3e2e92fa7d8a1db3c37a92cb81238acd9f6f..ef82e36b9e2f559b8813bf0b542eb76c95e88f32 100644 (file)
@@ -104,13 +104,13 @@ VISU::ColoredPrs3d_i
     DoHook();
 
     ColoredPrs3d_i* anOrigin = const_cast<ColoredPrs3d_i*>(aPrs3d);
-    myField = anOrigin->GetField();
-    myMeshName = myField->myMeshName;
-    myEntity = VISU::TEntity(anOrigin->GetEntity());//myField->myEntity;
-    myIteration = anOrigin->GetIteration();
-    myFieldName = anOrigin->GetFieldName();
-    
+    if(myMeshName == ""){
+      myField = anOrigin->GetField();
+      myMeshName = myField->myMeshName;
+      myEntity = VISU::TEntity(anOrigin->GetEntity());//myField->myEntity;
+      myIteration = anOrigin->GetIteration();
+      myFieldName = anOrigin->GetFieldName();
+    }
     Build(-1);
     
     TSuperClass::SameAs(theOrigin);
@@ -143,12 +143,23 @@ VISU::ColoredPrs3d_i
   
 void
 VISU::ColoredPrs3d_i
-::SameAsParams(const ColoredPrs3d_i* theOrigin)
+::SameAsParams(const ColoredPrs3d_i* theOrigin, 
+              const std::string& theMeshName, const std::string& theFieldName,
+              VISU::Entity theEntity, int theIteration,
+              char* theTitle, bool theIsFixedRange)
 {
-  int anIteration = GetIteration();
-  SameAs(theOrigin);
-  myIteration = anIteration;
+  myMeshName = theMeshName;
+  myFieldName = theFieldName;
+  myEntity = (VISU::TEntity)theEntity;
+  myIteration = theIteration;
+  myIsFixedRange = theIsFixedRange;
 
+  //int anIteration = GetIteration();
+  SameAs(theOrigin);
+  //myIteration = anIteration;
+  
+  myTitle = theTitle;  
+  
   Build(-1);
   Update();
 }
index b5417b22a32dde891548d36b3b4f34ccf6400579..4f59e59f2e41ed29a88c9ee044c32e9ab8efd8e4 100644 (file)
@@ -164,7 +164,10 @@ namespace VISU
      *  Is used in VISU_TimeAnimation class implementation.
      */
     void
-    SameAsParams(const ColoredPrs3d_i* theOrigin);
+    SameAsParams(const ColoredPrs3d_i* theOrigin, 
+                const std::string& theMeshName, const std::string& theFieldName,
+                VISU::Entity theEntity, int theIteration,
+                char* theTitle, bool theIsFixedRange);
 
     virtual const VISU::PField&
     GetField() const;
index e56862cfe1df96bf0b5d93a146c46ac2bacc0c3d..1b20e9dfc9506b0af3c6111aa64963c13e9f9991 100644 (file)
@@ -131,7 +131,7 @@ VISU::ScalarMap_i
     ScalarMap_i* anOrigin = const_cast<ScalarMap_i*>(aPrs3d);
  
     SetRange(anOrigin->GetMin(), anOrigin->GetMax());
-    myIsFixedRange = anOrigin->IsRangeFixed();
+    //myIsFixedRange = anOrigin->IsRangeFixed();
 
     SetScaling(anOrigin->GetScaling());
     
index f751e5f669a9af0b849823d7d77d82c273e8227f..697e32b0d46108a8d2569e67d17d32ab9daaf508 100644 (file)
@@ -1621,8 +1621,16 @@ void VISU_TimeAnimation::restoreFromStudy(_PTR(SObject) theField)
     }
     aData.myPrs[0]->GetOffset(aData.myOffset);
     for (int i = 1; i < aData.myNbFrames; i++) {
+      bool anIsFixedRange = false;
+      if (aData.myPrsType != VISU::TGAUSSPOINTS) {
+       if (VISU::ScalarMap_i* aPrs = dynamic_cast<VISU::ScalarMap_i*>(aData.myPrs[i]))
+         anIsFixedRange = aPrs->IsRangeFixed();
+      }
       //jfa 03.08.2005:aData.myPrs[i]->SameAs(aData.myPrs[0]);
-      aData.myPrs[i]->SameAsParams(aData.myPrs[0]);//jfa 03.08.2005
+      aData.myPrs[i]->SameAsParams(aData.myPrs[0],
+                                  aData.myPrs[i]->GetMeshName(),aData.myPrs[i]->GetFieldName(),
+                                  aData.myPrs[i]->GetEntity(), aData.myPrs[i]->GetIteration(),
+                                  aData.myPrs[i]->GetTitle(), anIsFixedRange);//jfa 03.08.2005
     }
   }
   string aStr = aAnimSObject->GetID();
@@ -1637,32 +1645,50 @@ void VISU_TimeAnimation::onViewDeleted()
 void VISU_TimeAnimation::ApplyProperties(CORBA::Long theFieldNum, VISU::ColoredPrs3d_ptr thePrs)
   throw (SALOME::SALOME_Exception)
 {
-  FieldData& aData = myFieldsLst[theFieldNum];
-    
-  if ( aData.myPrs.empty() )
-    throw SALOME_Exception(LOCALIZED("Error : presentations for the given field is not yet created!"));
-
   VISU::ColoredPrs3d_i* aPrs_i = dynamic_cast<VISU::ColoredPrs3d_i*>(GetServant(thePrs).in());
 
   if ( !aPrs_i ) 
     throw SALOME_Exception(LOCALIZED("Error : invalid dynamic cast of the given presentation to VISU::ColoredPrs3d_i"));
-  if ( aPrs_i->GetResult() != aData.myPrs[0]->GetResult() )
-    throw SALOME_Exception(LOCALIZED("Error : the MED file is not the same!"));
-                          
-  if ( aPrs_i->GetMeshName() != aData.myPrs[0]->GetMeshName() ) 
-    throw SALOME_Exception(LOCALIZED("Error : the mesh name is not the same!"));
-
-  if ( aPrs_i->GetFieldName() != aData.myPrs[0]->GetFieldName() )
-    throw SALOME_Exception(LOCALIZED("Error : the field name is not the same!"));
-
-  if ( aPrs_i->GetEntity() != aData.myPrs[0]->GetEntity() )
-    throw SALOME_Exception(LOCALIZED("Error : the entity is not the same!"));
+  printf("aPrs_i->GetMeshName() = %s; aPrs_i->GetFieldName() = %s\n",aPrs_i->GetMeshName().c_str(),aPrs_i->GetFieldName().c_str());
   
-  for (int i = 0; i < aData.myNbFrames; i++) {
-    aData.myPrs[i]->SameAsParams(aPrs_i);
+  if ( myAnimationMode == 0 ) { // parallel animation mode
+    FieldData& aData = myFieldsLst[theFieldNum];
+    
+    if ( aData.myPrs.empty() )
+      throw SALOME_Exception(LOCALIZED("Error : presentations for the given field is not yet created!"));
+    
+    if ( aPrs_i->GetResult() != aData.myPrs[0]->GetResult() )
+      throw SALOME_Exception(LOCALIZED("Error : the MED file is not the same!"));
+    
+    for (int i = 0; i < aData.myNbFrames; i++) {
+      bool anIsFixedRange = false;
+      if (aData.myPrsType != VISU::TGAUSSPOINTS) {
+       if (VISU::ScalarMap_i* aPrs = dynamic_cast<VISU::ScalarMap_i*>(aData.myPrs[i]))
+         anIsFixedRange = aPrs->IsRangeFixed();
+      }
+      aData.myPrs[i]->SameAsParams(aPrs_i,
+                                  aData.myPrs[i]->GetMeshName(),aData.myPrs[i]->GetFieldName(),
+                                  aData.myPrs[i]->GetEntity(), aData.myPrs[i]->GetIteration(),
+                                  aData.myPrs[i]->GetTitle(), anIsFixedRange);
+    }
+  }
+  else if ( myAnimationMode == 1 ) { // successive animation mode
+    for (int f = 0; f < getNbFields(); f++) {
+      FieldData& aData = myFieldsLst[f];
+      
+      if ( aData.myPrs.empty() )
+       throw SALOME_Exception(LOCALIZED("Error : presentations for the given field is not yet created!"));
+      
+      for (int i = 0; i < aData.myNbFrames; i++) {
+       printf("aData.myPrs[%d]->GetMeshName() = %s; aData.myPrs[%d]->GetFieldName() = %s\n",
+              i,aData.myPrs[i]->GetMeshName().c_str(),i,aData.myPrs[i]->GetFieldName().c_str());
+       aData.myPrs[i]->SameAsParams(aPrs_i,
+                                    aData.myPrs[i]->GetMeshName(),aData.myPrs[i]->GetFieldName(),
+                                    aData.myPrs[i]->GetEntity(), aData.myPrs[i]->GetIteration(),
+                                    aData.myPrs[i]->GetTitle(), true);
+      }
+    }
   }
-  
 }
 
 //========================================================================
index b654db9e9760b4e30e436c91eaa3c9be69b763f3..0d032d14ac4e7b77854e144c40d508325a75f5a3 100644 (file)
@@ -42,7 +42,8 @@ SWIG_DEF = libVISU_Swig.i
 EXPORT_PYSCRIPTS = libVISU_Swig.py batchmode_visu.py batchmode_visu_table.py batchmode_visu_view3d.py \
        visu_med.py visu_view3d.py visu.py visu_gui.py visu_prs_example.py \
        visu_table.py visu_big_table.py visu_view.py visu_delete.py \
-       visu_swig_test.py visu_split_views.py visu_succcessive_animation.py \
+       visu_swig_test.py visu_split_views.py \
+       visu_succcessive_animation.py visu_apply_properties.py visu_apply_properties_successive.py \
        VISU_Example_01.py VISU_Example_02.py VISU_Example_03.py VISU_Example_04.py \
        VISU_Example_05.py VISU_Example_06.py VISU_Example_07.py
 EXPORT_SHAREDPYSCRIPTS = VISU_shared_modules.py
diff --git a/src/VISU_SWIG/visu_apply_properties.py b/src/VISU_SWIG/visu_apply_properties.py
new file mode 100644 (file)
index 0000000..cdf8b6f
--- /dev/null
@@ -0,0 +1,119 @@
+#  VISU VISU_SWIG : binding of C++ implementation and Python
+#
+#  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+#  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+# 
+#  This library is free software; you can redistribute it and/or 
+#  modify it under the terms of the GNU Lesser General Public 
+#  License as published by the Free Software Foundation; either 
+#  version 2.1 of the License. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+# 
+#  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+#  File   : visu_apply_properties.py
+#  Module : VISU
+
+import os
+import time
+import math
+import VISU
+import SALOMEDS
+from visu_gui import *
+
+aDelay = 0
+
+myViewManager = myVisu.GetViewManager();
+
+myView = myViewManager.Create3DView();
+myView.SetTitle("The viewer for Animation")
+print "myViewManager.Create3DView()"
+time.sleep(aDelay)
+
+medFile = "TimeStamps.med"
+myFieldName = "temperature"
+
+medFile = os.getenv('DATA_DIR') + '/MedFiles/' + medFile
+myResult = myVisu.ImportFile(medFile)
+
+anAnim = myVisu.CreateAnimation(myView);
+
+aSObj = myStudy.FindObjectIOR(myResult.GetID())
+aSObj = aSObj.FindSubObject(1)[1]
+aSObj = aSObj.FindSubObject(3)[1]
+aSObj = aSObj.FindSubObject(1)[1]
+print "addField 1 : ", anAnim.addField(aSObj)
+
+print "Generate presentations for ", anAnim.getNbFields(), " fields"
+for i in range(0,anAnim.getNbFields()):
+    anAnim.setPresentationType(i,VISU.TPLOT3D)
+    anAnim.generatePresentations(i)
+
+print "Generate frames"
+anAnim.generateFrames()
+
+print "Start Animation"
+anAnim.setSpeed(22)
+anAnim.startAnimation()
+myView.FitAll()
+
+while 1:
+    time.sleep(1+aDelay)
+    if not anAnim.isRunning():
+        anAnim.stopAnimation()
+        break
+
+anAnim.publishInStudy()
+anAnim.saveAnimation()
+
+for i in range(0,anAnim.getNbFields()):
+    aPrs = anAnim.getPresentation(i,0)
+    aPlot3D = aPrs._narrow(VISU.Plot3D)
+
+    if aPlot3D:
+        aNbLabels = aPlot3D.GetLabels()
+        aPlot3D.SetLabels(aNbLabels+3)
+
+        aWidth = aPlot3D.GetWidth()
+        aHeight = aPlot3D.GetHeight()
+        aPlot3D.SetSize(aWidth+0.07,aHeight+0.07)
+
+        print "Apply properties for all time stamps of ", i, " field."
+        try:
+            anAnim.ApplyProperties(i,aPlot3D)
+        except SALOME.SALOME_Exception, inst:
+            msg = "SALOME.SALOME_Exception caught, see details:"
+            msg+="\n******* text:\t" + inst.details.text
+            msg+="\n******* type:\t" + str(inst.details.type)
+            msg+="\n******* where:\t" + inst.details.sourceFile + ":" + \
+                  str(inst.details.lineNumber)    
+            print msg
+            raise RuntimeError, "There are some errors were occured... For more info see ERRORs above..."
+
+print "Generate frames"
+anAnim.generateFrames()
+
+print "Start Animation"
+anAnim.startAnimation()
+myView.FitAll()
+
+while 1:
+    time.sleep(1+aDelay)
+    if not anAnim.isRunning():
+        anAnim.stopAnimation()
+        break
+
+anAnim.publishInStudy()
+anAnim.saveAnimation()
+
+anAnim.clearFields()
+print "The number of fields in animation after clearFields method is", anAnim.getNbFields()
+
diff --git a/src/VISU_SWIG/visu_apply_properties_successive.py b/src/VISU_SWIG/visu_apply_properties_successive.py
new file mode 100644 (file)
index 0000000..b1f931a
--- /dev/null
@@ -0,0 +1,135 @@
+#  VISU VISU_SWIG : binding of C++ implementation and Python
+#
+#  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+#  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+# 
+#  This library is free software; you can redistribute it and/or 
+#  modify it under the terms of the GNU Lesser General Public 
+#  License as published by the Free Software Foundation; either 
+#  version 2.1 of the License. 
+# 
+#  This library is distributed in the hope that it will be useful, 
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+#  Lesser General Public License for more details. 
+# 
+#  You should have received a copy of the GNU Lesser General Public 
+#  License along with this library; if not, write to the Free Software 
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+# 
+#  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+#  File   : visu_apply_properties_consecutive.py
+#  Module : VISU
+
+import os
+import time
+import math
+import VISU
+import SALOMEDS
+from visu_gui import *
+
+aDelay = 0
+
+myViewManager = myVisu.GetViewManager();
+
+myView = myViewManager.Create3DView();
+myView.SetTitle("The viewer for Animation")
+print "myViewManager.Create3DView()"
+time.sleep(aDelay)
+
+medFile = "TimeStamps.med"
+myFieldName = "temperature"
+
+medFile = os.getenv('DATA_DIR') + '/MedFiles/' + medFile
+myResult = myVisu.ImportFile(medFile)
+
+anAnim = myVisu.CreateAnimation(myView);
+anAnim.setAnimationMode(VISU.Animation.SUCCCESSIVE)
+    
+aSObj = myStudy.FindObjectIOR(myResult.GetID())
+aSObj = aSObj.FindSubObject(1)[1]
+aSObj = aSObj.FindSubObject(3)[1]
+aSObj = aSObj.FindSubObject(1)[1]
+print "addField 1 : ", anAnim.addField(aSObj)
+
+medFile1 = "TimeStamps_import22.med"
+myFieldName1 = "pression"
+
+medFile1 = os.getenv('DATA_DIR') + '/MedFiles/' + medFile1
+myResult1 = myVisu.ImportFile(medFile1)
+
+aSObj1 = myStudy.FindObjectIOR(myResult1.GetID())
+aSObj1 = aSObj1.FindSubObject(1)[1]
+aSObj1 = aSObj1.FindSubObject(3)[1]
+aSObj1 = aSObj1.FindSubObject(3)[1]
+print "addField 2 : ", anAnim.addField(aSObj1)
+
+print "Generate presentations for ", anAnim.getNbFields(), " fields"
+for i in range(0,anAnim.getNbFields()):
+    anAnim.setPresentationType(i,VISU.TPLOT3D)
+    anAnim.generatePresentations(i)
+
+print "Generate frames"
+anAnim.generateFrames()
+
+print "Start Animation"
+anAnim.setSpeed(22)
+anAnim.startAnimation()
+myView.FitAll()
+
+while 1:
+    time.sleep(1+aDelay)
+    if not anAnim.isRunning():
+        anAnim.stopAnimation()
+        break
+
+anAnim.publishInStudy()
+anAnim.saveAnimation()
+
+if anAnim.getAnimationMode() == VISU.Animation.SUCCCESSIVE:
+   print "End of succcessive animation for 2 fields with presentation type VISU.Animation.SUCCCESSIVE"
+
+#for i in range(0,anAnim.getNbFields()):
+aPrs = anAnim.getPresentation(0,0)
+aPlot3D = aPrs._narrow(VISU.Plot3D)
+
+if aPlot3D:
+    aNbLabels = aPlot3D.GetLabels()
+    aPlot3D.SetLabels(aNbLabels+3)
+    
+    aWidth = aPlot3D.GetWidth()
+    aHeight = aPlot3D.GetHeight()
+    aPlot3D.SetSize(aWidth+0.07,aHeight+0.07)
+    
+    print "Apply properties for all time stamps of all fields."
+    try:
+        anAnim.ApplyProperties(0,aPlot3D)
+    except SALOME.SALOME_Exception, inst:
+        msg = "SALOME.SALOME_Exception caught, see details:"
+        msg+="\n******* text:\t" + inst.details.text
+        msg+="\n******* type:\t" + str(inst.details.type)
+        msg+="\n******* where:\t" + inst.details.sourceFile + ":" + \
+              str(inst.details.lineNumber)    
+        print msg
+        raise RuntimeError, "There are some errors were occured... For more info see ERRORs above..."
+    
+print "Generate frames"
+anAnim.generateFrames()
+
+print "Start Animation"
+anAnim.startAnimation()
+myView.FitAll()
+
+while 1:
+    time.sleep(1+aDelay)
+    if not anAnim.isRunning():
+        anAnim.stopAnimation()
+        break
+
+anAnim.publishInStudy()
+anAnim.saveAnimation()
+
+anAnim.clearFields()
+print "The number of fields in animation after clearFields method is", anAnim.getNbFields()
+