Salome HOME
Join modifications from branch OCC_development_for_3_2_0a2
[modules/visu.git] / src / VISU_I / VISU_TimeAnimation.h
index 87f08e6ebb45b49e62f7e2f28e9d8de0abc46ff9..bb1925a80348bf7b1432a6fc46fe849038347d3f 100644 (file)
@@ -1,52 +1,72 @@
-//  File      : VISU_TimeAnimation.h
-//  Created   : 10 / 04 / 2003
-//  Author    : Vitaly SMETANNIKOV
-//  Project   : SALOME 
-//  Module    : VISU_I
-//  Copyright : Open CASCADE 
+//  Copyright (C) 2003  CEA/DEN, EDF R&D
+//
+//
+//
+//  File   : VISU_TimeAnimation.h
+//  Author : Vitaly SMETANNIKOV
+//  Module : VISU
 
 #ifndef VISU_TIMEANIMATION_H
 #define VISU_TIMEANIMATION_H
 
+#include "VISUConfig.hh"
+
+#include <vector>
+
 #include <qobject.h>
 #include <qvaluelist.h>
 #include <qthread.h>
-#include "VISU_Actor.h"
-#include "VISU_PrsObject_i.hh"
-#include "VTKViewer_ViewFrame.h"
 
+class SVTK_ViewWindow;
+class VISU_Actor;
+
+namespace VISU{
+  class Result_i;
+  class ColoredPrs3d_i;
+}
 
 struct FieldData
 {
-  VISU::VISUType myPrsType;  
-  SALOMEDS::SObject_var myField; // field label
-  long myNbTimes;                // number of Timestamps
-  VISU::ScalarMap_i** myPrs;         // Presentations
-  VISU_Actor** myActors;         // Actors
-  double* myTiming;              // time values
+  VISU::VISUType myPrsType;
+  _PTR(SObject) myField; // field label
+  long myNbTimes;        // number of Timestamps
+  long myNbFrames;       // number of created Frames
+  std::vector<VISU::ColoredPrs3d_i*> myPrs;     // Presentations
+  std::vector<VISU_Actor*> myActors;         // Actors
+  std::vector<double> myTiming;              // time values
+  float myOffset[3];
 };
 
 
 class VISU_TimeAnimation: public QObject, public QThread
 {
-    Q_OBJECT
+  Q_OBJECT;
  public:
-  static VISU::Result_i* createPresent(SALOMEDS::SObject_var theField);
-  static VISU::Storable::TRestoringMap getMapOfValue(SALOMEDS::SObject_var theSObject);
-  static double getTimeValue(SALOMEDS::SObject_var theTimestamp);
-  
-  VISU_TimeAnimation(SALOMEDS::Study_var theStudy);
+  //static VISU::Result_i* createPresent (SALOMEDS::SObject_var theField);
+  //static VISU::Storable::TRestoringMap getMapOfValue (SALOMEDS::SObject_var theSObject);
+  //static double getTimeValue (SALOMEDS::SObject_var theTimestamp);
+
+  static VISU::Result_i* createPresent (_PTR(SObject) theField);
+  static VISU::Storable::TRestoringMap getMapOfValue (_PTR(SObject) theSObject);
+  static double getTimeValue (_PTR(SObject) theTimestamp);
+
+  VISU_TimeAnimation(_PTR(Study) theStudy,
+                    VISU::View3D_ptr theView3D = VISU::View3D::_nil());
   ~VISU_TimeAnimation();
 
-  void addField(SALOMEDS::SObject_var theField);
-  FieldData& getFieldData(int theNum) { return myFieldsLst[theNum]; }
+  virtual VISU::VISUType GetType() { return VISU::TNONE;};
 
-  bool generateFrames();
-  void generatePresentations(int theFieldNum);
-  void setViewer(VTKViewer_ViewFrame* theView) { myView = theView; }
-  VTKViewer_ViewFrame* getViewer() { return myView; }
+  void addField (_PTR(SObject) theField);
+  void addField (SALOMEDS::SObject_ptr theField);
+  FieldData& getFieldData (int theNum) { return myFieldsLst[theNum]; }
+
+  CORBA::Boolean generateFrames();
+  void generatePresentations(CORBA::Long theFieldNum);
+  void setViewer(SVTK_ViewWindow* theView) { myView = theView; }
+  SVTK_ViewWindow* getViewer() { return myView; }
   void clearView();
   void clearData(FieldData& theData);
+  void clearFieldData() { myFieldsLst.clear();};
 
   void stopAnimation();
   void startAnimation();
@@ -54,53 +74,152 @@ class VISU_TimeAnimation: public QObject, public QThread
   void prevFrame();
   void firstFrame();
   void lastFrame();
-  void gotoFrame(long theFrame);
+  void gotoFrame(CORBA::Long theFrame);
+
+  CORBA::Long getNbFields() { return myFieldsLst.size(); }
+  CORBA::Long getNbFrames();
+  CORBA::Boolean isRunning() { return myIsActive; }
+  CORBA::Long getCurrentFrame() { return myFrame; }
+
+  VISU::ColoredPrs3d_ptr getPresentation(CORBA::Long theField, CORBA::Long theFrame);
+
+  void setPresentationType(CORBA::Long theFieldNum, VISU::VISUType theType)
+    { myFieldsLst[theFieldNum].myPrsType = theType; }
+  VISU::VISUType getPresentationType(CORBA::Long theFieldNum)
+    { return myFieldsLst[theFieldNum].myPrsType; }
 
-  int getNbFields() { return myFieldsLst.size(); }
-  long getNbFrames();
-  bool isRunning() { return myIsActive; }
-  long getCurrentFrame() { return myFrame; }
+  void setSpeed(CORBA::Long theSpeed);
+  CORBA::Long getSpeed() { return mySpeed; }
 
-  VISU::ScalarMap_i* getPresentation(int theField, long theFrame);
+  CORBA::Boolean isProportional() { return myProportional; }
 
-  void setPresentationType(int theFieldNum, VISU::VISUType theType) { myFieldsLst[theFieldNum].myPrsType = theType; }
-  VISU::VISUType getPresentationType(int theFieldNum) { return myFieldsLst[theFieldNum].myPrsType; }
+  void setAnimationRange(CORBA::Double theMin, CORBA::Double theMax)
+    { myTimeMinVal = theMin; myTimeMaxVal = theMax; }
 
-  void setSpeed(int theSpeed);
-  int getSpeed() { return mySpeed; }
+  CORBA::Double getMinRange() { return myTimeMinVal; }
+  CORBA::Double getMaxRange() { return myTimeMaxVal; }
+  CORBA::Boolean isRangeDefined() { return !((myTimeMaxVal == 0) && (myTimeMinVal == myTimeMaxVal)); }
 
-  bool isProportional() { return myProportional; }
+  void dumpTo(const char* thePath) { myDumpPath = thePath; }
+  std::string setDumpFormat(const char* theFormat);
 
-  void setAnimationRange(double theMin, double theMax)
-    { myMaxVal = theMax; myMinVal = theMin; }
+  QString getLastErrorMsg() { return myLastError; }
 
-  double getMinRange() { return myMinVal; }
-  double getMaxRange() { return myMaxVal; } 
-  bool isRangeDefined() { return ((myMaxVal!=0) && (myMinVal != 0)); }
+  CORBA::Boolean isCycling() { return myCycling; }
 
-  void dumpTo(QString thePath) { myDumpPath = thePath; }
+  CORBA::Double getMinTime() { return myTimeMin;}
+  CORBA::Double getMaxTime() { return myTimeMax;}
+
+  void setProportional(CORBA::Boolean theProp) { myProportional = theProp; }
+  void setCycling(CORBA::Boolean theCycle) { myCycling = theCycle; }
+
+  SALOMEDS::SObject_ptr publishInStudy();
+  void restoreFromStudy(SALOMEDS::SObject_ptr theField);
+  void restoreFromStudy(_PTR(SObject) theField);
+  void saveAnimation();
+  bool isSavedInStudy() const { return !myAnimEntry.isEmpty(); }
 
  public slots:
-  void setProportional(bool theProp) { myProportional = theProp; }
+  void setProportionalSlot(bool theProp) { myProportional = theProp; }
+  void setCyclingSlot(bool theCycle) { myCycling = theCycle; }
 
  signals:
   void frameChanged(long theNewFrame, double theTime);
+  void stopped();
 
  protected:
   void run();
+  QString GenerateName();
+
+ private slots:
+   void onViewDeleted();
 
  private:
+  QString myLastError;
 
   QValueList<FieldData> myFieldsLst;
   bool myIsActive;
   long myFrame;
   int mySpeed;
   bool myProportional;
-  SALOMEDS::Study_var myStudy;
+  bool myCycling;
+  _PTR(Study) myStudy;
 
-  double myMaxVal, myMinVal;
+  double myTimeMinVal, myTimeMaxVal; //!< Range of time stams, set by user
+  double myTimeMin   , myTimeMax   ; //!< Range of time stams, available for animation
   QString myDumpPath;
-  VTKViewer_ViewFrame* myView;
+  QString myDumpFormat;
+  SVTK_ViewWindow* myView;
+
+  QString myAnimEntry;
+
+  static int myNBAnimations;
+};
+
+
+class VISU_TimeAnimation_i: public virtual POA_VISU::Animation,
+                            public virtual VISU::Base_i
+{
+  VISU_TimeAnimation* myAnim;
+public:
+  VISU_TimeAnimation_i(SALOMEDS::Study_ptr theStudy,
+                       VISU::View3D_ptr theView3D = VISU::View3D::_nil());
+  ~VISU_TimeAnimation_i();
+
+  virtual VISU::VISUType GetType() { return VISU::TANIMATION; }
+  //virtual VISU::VISUType GetType() { return VISU::TNONE; }
+
+  virtual void addField(SALOMEDS::SObject_ptr theField);
+
+  virtual CORBA::Boolean generateFrames();
+  virtual void generatePresentations(CORBA::Long theFieldNum);
+
+  virtual void clearView();
+
+  virtual void stopAnimation();
+  virtual void startAnimation();
+  virtual void nextFrame();
+  virtual void prevFrame();
+  virtual void firstFrame();
+  virtual void lastFrame();
+  virtual void gotoFrame(CORBA::Long theFrame);
+
+  virtual CORBA::Long getNbFields();
+  virtual CORBA::Long getNbFrames();
+  virtual CORBA::Boolean isRunning();
+  virtual CORBA::Long getCurrentFrame();
+
+  virtual VISU::ColoredPrs3d_ptr getPresentation(CORBA::Long theField, CORBA::Long theFrame);
+
+  virtual void setPresentationType(CORBA::Long theFieldNum, VISU::VISUType theType);
+  virtual VISU::VISUType getPresentationType(CORBA::Long theFieldNum);
+
+  virtual void setSpeed(CORBA::Long theSpeed);
+  virtual CORBA::Long getSpeed();
+
+  virtual CORBA::Boolean isProportional();
+
+  virtual void setAnimationRange(CORBA::Double theMin, CORBA::Double theMax);
+
+  virtual CORBA::Double getMinRange();
+  virtual CORBA::Double getMaxRange();
+  virtual CORBA::Boolean isRangeDefined();
+
+  virtual void dumpTo(const char* thePath);
+  virtual char* setDumpFormat(const char* theFormat);
+
+  virtual CORBA::Boolean isCycling();
+
+  virtual CORBA::Double getMinTime();
+  virtual CORBA::Double getMaxTime();
+
+  virtual void setProportional(CORBA::Boolean theProp);
+  virtual void setCycling(CORBA::Boolean theCycle);
+
+  virtual SALOMEDS::SObject_ptr publishInStudy();
+  virtual void restoreFromStudy(SALOMEDS::SObject_ptr theField);
+  virtual CORBA::Boolean isSavedInStudy();
+  virtual void saveAnimation();
 };
 
 #endif  //VISU_TIMEANIMATION_H