Salome HOME
[MEDCalcl] PointSprite and VectorField presentations.
authorabn <adrien.bruneton@cea.fr>
Wed, 3 Aug 2016 15:05:00 +0000 (17:05 +0200)
committerabn <adrien.bruneton@cea.fr>
Wed, 3 Aug 2016 15:05:00 +0000 (17:05 +0200)
+ also some refactoring to group common pipelines commands
+ still some work to be done on the scaling factor for VectorField

33 files changed:
idl/MEDPresentationManager.idl
src/MEDCalc/cmp/CMakeLists.txt
src/MEDCalc/cmp/MEDPresentation.cxx
src/MEDCalc/cmp/MEDPresentation.hxx
src/MEDCalc/cmp/MEDPresentation.txx
src/MEDCalc/cmp/MEDPresentationContour.cxx
src/MEDCalc/cmp/MEDPresentationContour.hxx
src/MEDCalc/cmp/MEDPresentationManager_i.cxx
src/MEDCalc/cmp/MEDPresentationManager_i.hxx
src/MEDCalc/cmp/MEDPresentationMeshView.cxx
src/MEDCalc/cmp/MEDPresentationMeshView.hxx
src/MEDCalc/cmp/MEDPresentationPointSprite.cxx
src/MEDCalc/cmp/MEDPresentationPointSprite.hxx
src/MEDCalc/cmp/MEDPresentationScalarMap.cxx
src/MEDCalc/cmp/MEDPresentationSlices.cxx
src/MEDCalc/cmp/MEDPresentationSlices.hxx
src/MEDCalc/cmp/MEDPresentationVectorField.cxx
src/MEDCalc/cmp/MEDPresentationVectorField.hxx
src/MEDCalc/gui/CMakeLists.txt
src/MEDCalc/gui/MEDWidgetHelperComponent.cxx [new file with mode: 0644]
src/MEDCalc/gui/MEDWidgetHelperComponent.hxx [new file with mode: 0644]
src/MEDCalc/gui/MEDWidgetHelperPointSprite.hxx [new file with mode: 0644]
src/MEDCalc/gui/MEDWidgetHelperScalarMap.cxx [deleted file]
src/MEDCalc/gui/MEDWidgetHelperScalarMap.hxx
src/MEDCalc/gui/MEDWidgetHelperVectorField.hxx [new file with mode: 0644]
src/MEDCalc/gui/PresentationController.cxx
src/MEDCalc/gui/PresentationEvent.hxx
src/MEDCalc/test/tui/point_sprite.py [new file with mode: 0644]
src/MEDCalc/test/tui/slices.py
src/MEDCalc/test/tui/tests.set
src/MEDCalc/test/tui/vector_field.py [new file with mode: 0644]
src/MEDCalc/tui/__init__.py
src/MEDCalc/tui/medpresentation.py

index 09689a92d87f26e59627941bd5674f4fe4c91044..c045eec36857c214ad0430e73b0ed59f61755264 100644 (file)
@@ -111,13 +111,13 @@ module MEDCALC
     long nbContours;
   };
 
     long nbContours;
   };
 
-//  struct VectorFieldParameters {
-//    long fieldHandlerId;
-//    string displayedComponent; // DISPLAY_EUCLIDEAN_NORM or any component name
-//    ScalarBarRangeType scalarBarRange;
-//    ColorMapType colorMap;
-//  };
-//
+  struct VectorFieldParameters {
+    long fieldHandlerId;
+    string displayedComponent; // DISPLAY_EUCLIDEAN_NORM or any component name - only used to color the glyphs
+    ScalarBarRangeType scalarBarRange;
+    ColorMapType colorMap;
+  };
+
   struct SlicesParameters {
     long fieldHandlerId;
     string displayedComponent; // DISPLAY_EUCLIDEAN_NORM or any component name
   struct SlicesParameters {
     long fieldHandlerId;
     string displayedComponent; // DISPLAY_EUCLIDEAN_NORM or any component name
@@ -131,12 +131,12 @@ module MEDCALC
 //    long fieldHandlerId;
 //  };
 //
 //    long fieldHandlerId;
 //  };
 //
-//  struct PointSpriteParameters {
-//    long fieldHandlerId;
-//    string displayedComponent; // DISPLAY_EUCLIDEAN_NORM or any component name
-//    ScalarBarRangeType scalarBarRange;
-//    ColorMapType colorMap;
-//  };
+  struct PointSpriteParameters {
+    long fieldHandlerId;
+    string displayedComponent; // DISPLAY_EUCLIDEAN_NORM or any component name
+    ScalarBarRangeType scalarBarRange;
+    ColorMapType colorMap;
+  };
 
   typedef sequence<long> PresentationsList;
 
 
   typedef sequence<long> PresentationsList;
 
@@ -144,14 +144,13 @@ module MEDCALC
 
   interface MEDPresentationManager : SALOME::GenericObj
   {
 
   interface MEDPresentationManager : SALOME::GenericObj
   {
-    long makeMeshView(in MeshViewParameters params, in ViewModeType viewMode);
-    long makeScalarMap(in ScalarMapParameters params, in ViewModeType viewMode);
-    long makeContour(in ContourParameters params, in ViewModeType viewMode)
-      raises (SALOME::SALOME_Exception);
-//    long makeVectorField(in VectorFieldParameters params, in ViewModeType viewMode);
-    long makeSlices(in SlicesParameters params, in ViewModeType viewMode);
+    long makeMeshView(in MeshViewParameters params, in ViewModeType viewMode)   raises (SALOME::SALOME_Exception);
+    long makeScalarMap(in ScalarMapParameters params, in ViewModeType viewMode) raises (SALOME::SALOME_Exception);
+    long makeContour(in ContourParameters params, in ViewModeType viewMode)     raises (SALOME::SALOME_Exception);
+    long makeVectorField(in VectorFieldParameters params, in ViewModeType viewMode)  raises (SALOME::SALOME_Exception);
+    long makeSlices(in SlicesParameters params, in ViewModeType viewMode)  raises (SALOME::SALOME_Exception);
 //    long makeDeflectionShape(in DeflectionShapeParameters params, in ViewModeType viewMode);
 //    long makeDeflectionShape(in DeflectionShapeParameters params, in ViewModeType viewMode);
-//    long makePointSprite(in PointSpriteParameters params, in ViewModeType viewMode);
+    long makePointSprite(in PointSpriteParameters params, in ViewModeType viewMode);
 
     void setPresentationStringProperty(in long presId, in string propName, in string propValue);
     string getPresentationStringProperty(in long presId, in string propName);
 
     void setPresentationStringProperty(in long presId, in string propName, in string propValue);
     string getPresentationStringProperty(in long presId, in string propName);
@@ -162,14 +161,16 @@ module MEDCALC
     ScalarMapParameters getScalarMapParameters(in long presId);
     ContourParameters   getContourParameters(in long presId);
     SlicesParameters     getSlicesParameters(in long presId);
     ScalarMapParameters getScalarMapParameters(in long presId);
     ContourParameters   getContourParameters(in long presId);
     SlicesParameters     getSlicesParameters(in long presId);
+    VectorFieldParameters     getVectorFieldParameters(in long presId);
+    PointSpriteParameters     getPointSpriteParameters(in long presId);
 
     void updateMeshView(in long presId, in MeshViewParameters params);
     void updateScalarMap(in long presId, in ScalarMapParameters params);
     void updateContour(in long presId, in ContourParameters params);
 
     void updateMeshView(in long presId, in MeshViewParameters params);
     void updateScalarMap(in long presId, in ScalarMapParameters params);
     void updateContour(in long presId, in ContourParameters params);
-//    void updateVectorField(in long presId, in VectorFieldParameters params);
+    void updateVectorField(in long presId, in VectorFieldParameters params);
     void updateSlices(in long presId, in SlicesParameters params);
 //    void updateDeflectionShape(in long presId, in DeflectionShapeParameters params);
     void updateSlices(in long presId, in SlicesParameters params);
 //    void updateDeflectionShape(in long presId, in DeflectionShapeParameters params);
-//    void updatePointSprite(in long presId, in PointSpriteParameters params);
+    void updatePointSprite(in long presId, in PointSpriteParameters params);
 
     boolean removePresentation(in long presId);
 
 
     boolean removePresentation(in long presId);
 
index 3a443934c72719b3f0c38829c9b343846d70f4ce..c735141c4d9229485f71e2df059cf4d1618f8878 100644 (file)
@@ -42,10 +42,10 @@ SET(COMMON_SOURCES
   MEDPresentationMeshView.cxx
   MEDPresentationScalarMap.cxx
   MEDPresentationContour.cxx
   MEDPresentationMeshView.cxx
   MEDPresentationScalarMap.cxx
   MEDPresentationContour.cxx
-#  MEDPresentationVectorField.cxx
+  MEDPresentationVectorField.cxx
   MEDPresentationSlices.cxx
   MEDPresentationSlices.cxx
-#  MEDPresentationDeflectionShape.cxx
-#  MEDPresentationPointSprite.cxx
+  MEDPresentationPointSprite.cxx
+#  MEDPresentationDeflectionShape.cxx  
 )
 
 SET(MEDFactoryEngine_SOURCES
 )
 
 SET(MEDFactoryEngine_SOURCES
index c82f3076575c6f9540bd1ac4ba1c4b1a9fcb2dc8..a11077b64108d0ae80aa25e376bf4916e343a4e2 100644 (file)
@@ -57,6 +57,7 @@ MEDPresentation::MEDPresentation(MEDPresentation::TypeID fieldHandlerId, const s
   _fileName = dataSHandler->uri;
   _fieldName = fieldHandler->fieldname;
   _fieldType = getFieldTypeString((MEDCoupling::TypeOfField) fieldHandler->type);
   _fileName = dataSHandler->uri;
   _fieldName = fieldHandler->fieldname;
   _fieldType = getFieldTypeString((MEDCoupling::TypeOfField) fieldHandler->type);
+  _meshName = meshHandler->name;
 
   if (_fileName.substr(0, 7) != std::string("file://")) {
     const char* msg = "MEDPresentation(): Data source is not a file! Can not proceed.";
 
   if (_fileName.substr(0, 7) != std::string("file://")) {
     const char* msg = "MEDPresentation(): Data source is not a file! Can not proceed.";
@@ -209,6 +210,9 @@ MEDPresentation::getIntProperty(const std::string& propName) const
  }
 
 
  }
 
 
+/**
+* @return a borrowed reference. Do not DECRREF!
+*/
 PyObject*
 MEDPresentation::getPythonObjectFromMain(const char* python_var) const
 {
 PyObject*
 MEDPresentation::getPythonObjectFromMain(const char* python_var) const
 {
@@ -244,74 +248,123 @@ MEDPresentation::getRenderViewVar() const
   return oss.str();
 }
 
   return oss.str();
 }
 
-std::string
-MEDPresentation::getRenderViewCommand() const
+void
+MEDPresentation::createSource()
 {
 {
-  std::ostringstream oss, oss2;
+  std::ostringstream oss;
+  oss << _srcObjVar << " = pvs.MEDReader(FileName='" << _fileName << "');";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << _srcObjVar << ".GenerateVectors = 1;";
+  pushAndExecPyLine(oss.str()); oss.str("");
+}
+
+void
+MEDPresentation::setOrCreateRenderView()
+{
+  std::ostringstream oss2;
 
   std::string view(getRenderViewVar());
 
   std::string view(getRenderViewVar());
-  oss2 << "pvs._DisableFirstRenderCameraReset();" << std::endl;
+  oss2 << "pvs._DisableFirstRenderCameraReset();";
+  pushAndExecPyLine(oss2.str()); oss2.str("");
   if (_viewMode == MEDCALC::VIEW_MODE_OVERLAP) {
       // this might potentially re-assign to an existing view variable, but this is OK, we
       // normally reassign exaclty the same RenderView object.
   if (_viewMode == MEDCALC::VIEW_MODE_OVERLAP) {
       // this might potentially re-assign to an existing view variable, but this is OK, we
       // normally reassign exaclty the same RenderView object.
-      oss2 << view << " = pvs.GetActiveViewOrCreate('RenderView');" << std::endl;
+      oss2 << view << " = pvs.GetActiveViewOrCreate('RenderView');";
+      pushAndExecPyLine(oss2.str()); oss2.str("");
   } else if (_viewMode == MEDCALC::VIEW_MODE_REPLACE) {
       // same as above
   } else if (_viewMode == MEDCALC::VIEW_MODE_REPLACE) {
       // same as above
-      oss2 << view << " = pvs.GetActiveViewOrCreate('RenderView');" << std::endl;
-      oss2 << "pvs.active_objects.source and pvs.Hide(view=" << view << ");" << std::endl;
-      oss2 << "pvs.Render();" << std::endl;
+      oss2 << view << " = pvs.GetActiveViewOrCreate('RenderView');";
+      pushAndExecPyLine(oss2.str()); oss2.str("");
+      oss2 << "pvs.active_objects.source and pvs.Hide(view=" << view << ");";
+      pushAndExecPyLine(oss2.str()); oss2.str("");
+      oss2 << "pvs.Render();";
+      pushAndExecPyLine(oss2.str()); oss2.str("");
   } else if (_viewMode == MEDCALC::VIEW_MODE_NEW_LAYOUT) {
   } else if (_viewMode == MEDCALC::VIEW_MODE_NEW_LAYOUT) {
-      oss2 <<  "__layout1 = pvs.servermanager.misc.ViewLayout(registrationGroup='layouts');" << std::endl;
-      oss2 << view << " = pvs.CreateView('RenderView');" << std::endl;
+      oss2 <<  "__layout1 = pvs.servermanager.misc.ViewLayout(registrationGroup='layouts');";
+      pushAndExecPyLine(oss2.str()); oss2.str("");
+      oss2 << view << " = pvs.CreateView('RenderView');";
+      pushAndExecPyLine(oss2.str()); oss2.str("");
   } else if (_viewMode == MEDCALC::VIEW_MODE_SPLIT_VIEW) {
   } else if (_viewMode == MEDCALC::VIEW_MODE_SPLIT_VIEW) {
-      oss2 << view << " = pvs.CreateView('RenderView');" << std::endl;
+      oss2 << view << " = pvs.CreateView('RenderView');";
+      pushAndExecPyLine(oss2.str()); oss2.str("");
   }
   }
-  return oss2.str();
 }
 
 }
 
-std::string
-MEDPresentation::getResetCameraCommand() const
+void
+MEDPresentation::resetCameraAndRender()
 {
 {
-  return getRenderViewVar() + ".ResetCamera();";
+  pushAndExecPyLine(getRenderViewVar() + ".ResetCamera();");
+  pushAndExecPyLine("pvs.Render();");
 }
 
 }
 
-std::string
-MEDPresentation::getComponentSelectionCommand() const
+void
+MEDPresentation::selectFieldComponent()
 {
   std::ostringstream oss, oss_l;
   std::string ret;
 
   if (_selectedComponentIndex != -1)
     {
 {
   std::ostringstream oss, oss_l;
   std::string ret;
 
   if (_selectedComponentIndex != -1)
     {
-      oss << _lutVar << ".VectorMode = 'Component';\n";
+      oss << _lutVar << ".VectorMode = 'Component';";
+      pushAndExecPyLine(oss.str()); oss.str("");
       oss << _lutVar << ".VectorComponent = " << _selectedComponentIndex << ";";
       oss << _lutVar << ".VectorComponent = " << _selectedComponentIndex << ";";
+      pushAndExecPyLine(oss.str()); oss.str("");
     }
   else  // Euclidean norm
     {
       oss << _lutVar << ".VectorMode = 'Magnitude';";
     }
   else  // Euclidean norm
     {
       oss << _lutVar << ".VectorMode = 'Magnitude';";
+      pushAndExecPyLine(oss.str()); oss.str("");
     }
     }
-  return oss.str();
 }
 
 }
 
-std::string
-MEDPresentation::getColorMapCommand() const
+void
+MEDPresentation::selectColorMap()
 {
 {
-  std::string ret;
+  std::ostringstream oss, oss2;
+
+  oss2 << _lutVar << " = pvs.GetColorTransferFunction('" << _fieldName << "');";
+  pushAndExecPyLine(oss2.str());
+
   switch (_colorMap) {
   case MEDCALC::COLOR_MAP_BLUE_TO_RED_RAINBOW:
   switch (_colorMap) {
   case MEDCALC::COLOR_MAP_BLUE_TO_RED_RAINBOW:
-    ret = _lutVar + ".ApplyPreset('Blue to Red Rainbow',True);";
+    oss << _lutVar << ".ApplyPreset('Blue to Red Rainbow',True);";
     break;
   case MEDCALC::COLOR_MAP_COOL_TO_WARM:
     break;
   case MEDCALC::COLOR_MAP_COOL_TO_WARM:
-    ret = _lutVar + ".ApplyPreset('Cool to Warm',True);";
+    oss << _lutVar << ".ApplyPreset('Cool to Warm',True);";
     break;
   default:
     STDLOG("MEDPresentation::getColorMapCommand(): invalid colormap!");
     throw KERNEL::createSalomeException("MEDPresentation::getColorMapCommand(): invalid colormap!");
   }
     break;
   default:
     STDLOG("MEDPresentation::getColorMapCommand(): invalid colormap!");
     throw KERNEL::createSalomeException("MEDPresentation::getColorMapCommand(): invalid colormap!");
   }
-  return ret;
+  pushAndExecPyLine(oss.str());
 }
 }
-std::string
-MEDPresentation::getRescaleCommand() const
+
+void
+MEDPresentation::showObject()
+{
+  std::ostringstream oss;
+  oss << _dispVar << " = pvs.Show(" << _objVar << ", " << getRenderViewVar() << ");";
+  pushAndExecPyLine(oss.str());
+}
+
+void
+MEDPresentation::showScalarBar()
+{
+  std::ostringstream oss;
+  oss << _dispVar <<  ".SetScalarBarVisibility(" << getRenderViewVar() << ", True);";
+  pushAndExecPyLine(oss.str());
+}
+
+void
+MEDPresentation::colorBy(const std::string & fieldType)
+{
+  std::ostringstream oss;
+  oss << "pvs.ColorBy(" << _dispVar << ", ('" << fieldType << "', '" << _fieldName << "'));";
+  pushAndExecPyLine(oss.str());
+}
+
+void
+MEDPresentation::rescaleTransferFunction()
 {
   std::string ret;
   switch(_sbRange)
 {
   std::string ret;
   switch(_sbRange)
@@ -326,7 +379,7 @@ MEDPresentation::getRescaleCommand() const
       STDLOG("MEDPresentation::getRescaleCommand(): invalid range!");
       throw KERNEL::createSalomeException("MEDPresentation::getRescaleCommand(): invalid range!");
   }
       STDLOG("MEDPresentation::getRescaleCommand(): invalid range!");
       throw KERNEL::createSalomeException("MEDPresentation::getRescaleCommand(): invalid range!");
   }
-  return ret;
+  pushAndExecPyLine(ret);
 }
 
 int
 }
 
 int
@@ -416,3 +469,97 @@ MEDPresentation::fillAvailableFieldComponents()
     }
 }
 
     }
 }
 
+/**
+ * In case where a CELLS field needs to be converted to POINT field.
+ * This updates the source object to become the result of the CellDatatoPointData filter.
+ */
+void
+MEDPresentation::applyCellToPointIfNeeded()
+{
+  std::ostringstream oss, oss2;
+  // Apply Cell data to point data:
+  oss2 << "__srcObj" << GeneratePythonId();
+  oss << oss2.str() << " = pvs.CellDatatoPointData(Input=" << _srcObjVar << ");";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  // Now the source becomes the result of the CellDatatoPointData:
+  _srcObjVar = oss2.str();
+}
+
+/**
+ * Convert a vector field into a 3D vector field:
+ *  - if the vector field is already 3D, nothing to do
+ *  - if it is 2D, then add a null component
+ *  - otherwise (tensor field, scalar field) throw
+ */
+void
+MEDPresentation::convertTo3DVectorField()
+{
+  std::ostringstream oss, oss1, oss2, oss3;
+
+  int nbCompo = getIntProperty(MEDPresentation::PROP_NB_COMPONENTS);
+  if (nbCompo < 2 || nbCompo > 3)
+    {
+      oss << "The field '" << _fieldName << "' must have 2 or 3 components for this presentation!";
+      STDLOG(oss.str());
+      throw KERNEL::createSalomeException(oss.str().c_str());
+    }
+  if (nbCompo == 3)
+    return;
+
+  // Apply calculator:
+  oss2 << "__srcObj" << GeneratePythonId();
+  oss << oss2.str() << " = pvs.Calculator(Input=" << _srcObjVar << ");";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  // Now the source becomes the result of the CellDatatoPointData:
+  _srcObjVar = oss2.str();
+  std::string typ;
+  if(_fieldType == "CELLS")
+    typ = "Cell Data";
+  else if(_fieldType == "POINTS")
+    typ = "Point Data";
+  else
+    {
+      oss3 << "Field '" << _fieldName << "' has invalid field type";
+      STDLOG(oss3.str());
+      throw KERNEL::createSalomeException(oss3.str().c_str());
+    }
+  oss << _srcObjVar << ".AttributeMode = '" <<  typ << "';";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << _srcObjVar << ".ResultArrayName = '" <<  _fieldName << "_CALC';";  // will never be needed I think
+  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << _srcObjVar << ".Function = '" <<  _fieldName << "_0*iHat + " << _fieldName << "_1*jHat + 0.0*zHat';";
+  pushAndExecPyLine(oss.str()); oss.str("");
+}
+
+//double
+//MEDPresentation::computeCellAverageSize()
+//{
+//  std::ostringstream oss;
+//  oss << "import MEDLoader;";
+//  pushAndExecPyLine(oss.str()); oss.str("");
+//  oss << "__mesh = MEDLoader.ReadMeshFromFile('" << _fileName << "', '" << _meshName << "');";
+//  pushAndExecPyLine(oss.str()); oss.str("");
+//
+//  oss << "__bb = __mesh.getBoundingBox()";
+//  pushAndExecPyLine(oss.str()); oss.str("");
+//  oss << "__deltas = [x[1]-x[0] for x in __bb];";
+//  pushAndExecPyLine(oss.str()); oss.str("");
+//  oss << "__vol = reduce(lambda x,y:x*y, __deltas, 1.0);";
+//  pushAndExecPyLine(oss.str()); oss.str("");
+//  // Average cell size is the the n-th root of average volume of a cell, with n being the space dimension
+//  oss << "__cellSize = (__vol/__mesh.getNumberOfCells())**(1.0/len(__bb));";
+//  pushAndExecPyLine(oss.str()); oss.str("");
+//
+//  PyObject * pyObj = getPythonObjectFromMain("__cellSize");
+//  bool err = false;
+//  if (!pyObj || !PyFloat_Check(pyObj)) {  /* nothing to do, err handler below */}
+//  else {
+//      double ret= PyFloat_AsDouble(pyObj);
+//      if(!PyErr_Occurred())
+//        return ret;
+//    }
+//  // From here, an error for sure.
+//  const char * msg = "MEDPresentation::computeCellAverageSize(): Python error.";
+//  STDLOG(msg);
+//  throw KERNEL::createSalomeException(msg);
+//}
index bfcdd2fccd2a68af110fc812181ddf641a2ec4c3..55999b0e1fbd4f1d45e727fa6d4d46db16263a25 100644 (file)
@@ -73,13 +73,18 @@ protected:
                   const MEDCALC::ViewModeType viewMode,
                   const MEDCALC::ColorMapType colorMap,
                   const MEDCALC::ScalarBarRangeType sbRange);
                   const MEDCALC::ViewModeType viewMode,
                   const MEDCALC::ColorMapType colorMap,
                   const MEDCALC::ScalarBarRangeType sbRange);
-  std::string getRenderViewCommand() const;
   std::string getRenderViewVar() const;
   std::string getRenderViewVar() const;
-  std::string getResetCameraCommand() const;
 
 
-  std::string getComponentSelectionCommand() const;
-  std::string getColorMapCommand() const;
-  std::string getRescaleCommand() const;
+  // The most common elements of the ParaView pipeline:
+  void setOrCreateRenderView();
+  void createSource();
+  void selectFieldComponent();
+  void showObject();
+  void colorBy(const std::string & fieldType);
+  void showScalarBar();
+  void rescaleTransferFunction();
+  void selectColorMap();
+  void resetCameraAndRender();
 
   virtual void internalGeneratePipeline();
   PyObject* getPythonObjectFromMain(const char* var) const;
 
   virtual void internalGeneratePipeline();
   PyObject* getPythonObjectFromMain(const char* var) const;
@@ -90,6 +95,10 @@ protected:
   MEDPresentation::TypeID getID() const { return _fieldHandlerId; }
 
   void fillAvailableFieldComponents();
   MEDPresentation::TypeID getID() const { return _fieldHandlerId; }
 
   void fillAvailableFieldComponents();
+  void applyCellToPointIfNeeded();
+  void convertTo3DVectorField();
+//  double computeCellAverageSize();
+  //void computeFieldRange
 
 //  virtual MEDCALC::ViewModeType getViewMode() = 0;
 
 
 //  virtual MEDCALC::ViewModeType getViewMode() = 0;
 
@@ -118,6 +127,7 @@ private:
   void updatePipeline(const PresentationParameters& params);
 
 protected:
   void updatePipeline(const PresentationParameters& params);
 
 protected:
+  std::string _meshName;
   std::string _fileName;
   std::string _fieldName;
   std::string _fieldType;
   std::string _fileName;
   std::string _fieldName;
   std::string _fieldType;
index dc99dcdc522b111732d6eebc6b84db36f3ca031e..59b09181c3c0d4acad60ac8de0c61c5227316736 100644 (file)
@@ -89,8 +89,7 @@ MEDPresentation::updateComponent(const std::string& newCompo)
     MEDPyLockWrapper lock;
 
     std::ostringstream oss;
     MEDPyLockWrapper lock;
 
     std::ostringstream oss;
-    std::string cmd = getComponentSelectionCommand();
-    pushAndExecPyLine(cmd);
+    selectFieldComponent();
     pushAndExecPyLine("pvs.Render();");
   }
 
     pushAndExecPyLine("pvs.Render();");
   }
 
@@ -115,8 +114,7 @@ MEDPresentation::updateColorMap(MEDCALC::ColorMapType colorMap)
   // Update the pipeline:
   {
     MEDPyLockWrapper lock;
   // Update the pipeline:
   {
     MEDPyLockWrapper lock;
-    std::string cmd = getColorMapCommand();
-    pushAndExecPyLine(cmd);
+    selectColorMap();
     pushAndExecPyLine("pvs.Render();");
   }
 }
     pushAndExecPyLine("pvs.Render();");
   }
 }
@@ -140,8 +138,7 @@ MEDPresentation::updateScalarBarRange(MEDCALC::ScalarBarRangeType sbRange)
   // Update the pipeline:
   {
     MEDPyLockWrapper lock;
   // Update the pipeline:
   {
     MEDPyLockWrapper lock;
-    std::string cmd = getRescaleCommand();
-    pushAndExecPyLine(cmd);
+    rescaleTransferFunction();
     pushAndExecPyLine("pvs.Render();");
   }
 }
     pushAndExecPyLine("pvs.Render();");
   }
 }
index fee4659e59a133cb89f096b5503117c35bfa34e8..f08493b3088ad13553f1608a801d5ddbb530d17c 100644 (file)
@@ -36,15 +36,17 @@ MEDPresentationContour::MEDPresentationContour(const MEDCALC::ContourParameters&
   setIntProperty(MEDPresentationContour::PROP_NB_CONTOUR, params.nbContours);
 }
 
   setIntProperty(MEDPresentationContour::PROP_NB_CONTOUR, params.nbContours);
 }
 
-std::string
-MEDPresentationContour::getContourCommand() const
+void
+MEDPresentationContour::setNumberContours()
 {
 {
-  std::ostringstream oss1;
+  std::ostringstream oss;
 
 
-  oss1 << "min_max = " << _srcObjVar << ".PointData.GetArray('" << _fieldName << "').GetRange();\n";
-  oss1 << "delta = (min_max[1]-min_max[0])/float(" << _params.nbContours << ");\n";
-  oss1 << _objVar << ".Isosurfaces = [min_max[0]+0.5*delta+i*delta for i in range(" << _params.nbContours << ")];\n";
-  return oss1.str();
+  oss << "min_max = " << _srcObjVar << ".PointData.GetArray('" << _fieldName << "').GetRange();";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << "delta = (min_max[1]-min_max[0])/float(" << _params.nbContours << ");";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << _objVar << ".Isosurfaces = [min_max[0]+0.5*delta+i*delta for i in range(" << _params.nbContours << ")];";
+  pushAndExecPyLine(oss.str()); oss.str("");
 }
 
 void
 }
 
 void
@@ -54,11 +56,7 @@ MEDPresentationContour::internalGeneratePipeline()
 
   MEDPyLockWrapper lock;
 
 
   MEDPyLockWrapper lock;
 
-  std::ostringstream oss_o, oss;
-  std::string view(getRenderViewVar());
-
-  oss << _srcObjVar << " = pvs.MEDReader(FileName='" << _fileName << "');";
-  pushAndExecPyLine(oss.str()); oss.str("");
+  createSource();
 
   // Populate internal array of available components:
   fillAvailableFieldComponents();
 
   // Populate internal array of available components:
   fillAvailableFieldComponents();
@@ -69,41 +67,27 @@ MEDPresentationContour::internalGeneratePipeline()
       throw KERNEL::createSalomeException(msg);
     }
 
       throw KERNEL::createSalomeException(msg);
     }
 
-  pushAndExecPyLine( getRenderViewCommand() ); // instanciate __viewXXX
+  setOrCreateRenderView(); // instanciate __viewXXX
 
 
-  if(_fieldType == "CELLS")
-    {
-      // In case of a CELLS field need to convert to POINT field, and update source
-      STDLOG("Applying CellDatatoPointData filter");
-      std::ostringstream oss2, oss4;
-      // Apply Cell data to point data:
-      oss2 << "__obj" << GeneratePythonId();
-      oss << oss2.str() << " = pvs.CellDatatoPointData(Input=" << _srcObjVar << ");";
-      pushAndExecPyLine(oss.str()); oss.str("");
-      // Now the source becomes the result of the CellDatatoPointData:
-      _srcObjVar = oss2.str();
-    }
+  // Contour needs point data:
+  applyCellToPointIfNeeded();
+
+  std::ostringstream oss;
   oss << _objVar << " = pvs.Contour(Input=" << _srcObjVar << ");";
   pushAndExecPyLine(oss.str()); oss.str("");
   oss << _objVar << " = pvs.Contour(Input=" << _srcObjVar << ");";
   pushAndExecPyLine(oss.str()); oss.str("");
+
+  showObject();
+
   oss << _objVar << ".ContourBy = ['POINTS', '" << _fieldName << "'];";
   pushAndExecPyLine(oss.str()); oss.str("");
 
   // Set number of contours
   oss << _objVar << ".ContourBy = ['POINTS', '" << _fieldName << "'];";
   pushAndExecPyLine(oss.str()); oss.str("");
 
   // Set number of contours
-  pushAndExecPyLine(getContourCommand());
-
-  oss << _dispVar << " = pvs.Show(" << _objVar << ", " << view << ");";
-  pushAndExecPyLine(oss.str()); oss.str("");
-  oss << "pvs.ColorBy(" << _dispVar << ", ('POINTS', '" << _fieldName << "'));";  // necessarily POINTS
-  pushAndExecPyLine(oss.str()); oss.str("");
-  oss << _dispVar <<  ".SetScalarBarVisibility(" << view << ", True);";
-  pushAndExecPyLine(oss.str()); oss.str("");
-  oss << getRescaleCommand();
-  pushAndExecPyLine(oss.str()); oss.str("");
-  oss << _lutVar << " = pvs.GetColorTransferFunction('" << _fieldName << "');";
-  pushAndExecPyLine(oss.str()); oss.str("");
-  pushAndExecPyLine(getColorMapCommand()); oss.str("");
-  pushAndExecPyLine(getResetCameraCommand());
-  pushAndExecPyLine("pvs.Render();");
+  setNumberContours();
+  colorBy("POINTS");    // necessarily POINTS because of the conversion above
+  showScalarBar();
+  rescaleTransferFunction();
+  selectColorMap();
+  resetCameraAndRender();
 }
 
 void
 }
 
 void
@@ -132,8 +116,7 @@ MEDPresentationContour::updateNbContours(const int nbContours)
   // Update the pipeline:
   {
     MEDPyLockWrapper lock;
   // Update the pipeline:
   {
     MEDPyLockWrapper lock;
-    std::string cmd = getContourCommand();
-    pushAndExecPyLine(cmd);
+    setNumberContours();
     pushAndExecPyLine("pvs.Render();");
   }
 }
     pushAndExecPyLine("pvs.Render();");
   }
 }
index bf36fee8c3a4eaa2f73cbf5e84c8faf10c968576..d7fbc19defb74583d06ce790ed3ececcd72237de 100644 (file)
@@ -41,7 +41,7 @@ protected:
   void updateNbContours(const int nbContours);
   virtual void internalGeneratePipeline();
 
   void updateNbContours(const int nbContours);
   virtual void internalGeneratePipeline();
 
-  std::string getContourCommand() const;
+  void setNumberContours();
 
 private:
   MEDCALC::ContourParameters _params;
 
 private:
   MEDCALC::ContourParameters _params;
index 09b2f57265fd6b6e55b8393385ac4cdc962b6082..876b3ec1ceb5ed730cee66e130148d6eec25d589 100644 (file)
@@ -26,9 +26,9 @@
 #include "MEDPresentationScalarMap.hxx"
 #include "MEDPresentationContour.hxx"
 #include "MEDPresentationSlices.hxx"
 #include "MEDPresentationScalarMap.hxx"
 #include "MEDPresentationContour.hxx"
 #include "MEDPresentationSlices.hxx"
-//#include "MEDPresentationVectorField.hxx"
+#include "MEDPresentationVectorField.hxx"
 //#include "MEDPresentationDeflectionShape.hxx"
 //#include "MEDPresentationDeflectionShape.hxx"
-//#include "MEDPresentationPointSprite.hxx"
+#include "MEDPresentationPointSprite.hxx"
 
 #include <SALOME_KernelServices.hxx>
 
 
 #include <SALOME_KernelServices.hxx>
 
@@ -141,12 +141,12 @@ MEDPresentationManager_i::makeContour(const MEDCALC::ContourParameters& params,
   return _makePresentation<MEDPresentationContour>(params, viewMode);
 }
 
   return _makePresentation<MEDPresentationContour>(params, viewMode);
 }
 
-//MEDPresentation::TypeID
-//MEDPresentationManager_i::makeVectorField(const MEDCALC::VectorFieldParameters& params)
-//{
-//  return _makePresentation<MEDPresentationVectorField>(params);
-//}
-//
+MEDPresentation::TypeID
+MEDPresentationManager_i::makeVectorField(const MEDCALC::VectorFieldParameters& params, const MEDCALC::ViewModeType viewMode)
+{
+  return _makePresentation<MEDPresentationVectorField>(params, viewMode);
+}
+
 MEDPresentation::TypeID
 MEDPresentationManager_i::makeSlices(const MEDCALC::SlicesParameters& params, const MEDCALC::ViewModeType viewMode)
 {
 MEDPresentation::TypeID
 MEDPresentationManager_i::makeSlices(const MEDCALC::SlicesParameters& params, const MEDCALC::ViewModeType viewMode)
 {
@@ -158,12 +158,12 @@ MEDPresentationManager_i::makeSlices(const MEDCALC::SlicesParameters& params, co
 //{
 //  return _makePresentation<MEDPresentationDeflectionShape>(params);
 //}
 //{
 //  return _makePresentation<MEDPresentationDeflectionShape>(params);
 //}
-//
-//MEDPresentation::TypeID
-//MEDPresentationManager_i::makePointSprite(const MEDCALC::PointSpriteParameters& params)
-//{
-//  return _makePresentation<MEDPresentationPointSprite>(params);
-//}
+
+MEDPresentation::TypeID
+MEDPresentationManager_i::makePointSprite(const MEDCALC::PointSpriteParameters& params, const MEDCALC::ViewModeType viewMode)
+{
+  return _makePresentation<MEDPresentationPointSprite>(params, viewMode);
+}
 
 MEDCALC::MeshViewParameters
 MEDPresentationManager_i::getMeshViewParameters(MEDPresentation::TypeID presentationID)
 
 MEDCALC::MeshViewParameters
 MEDPresentationManager_i::getMeshViewParameters(MEDPresentation::TypeID presentationID)
@@ -200,6 +200,23 @@ MEDPresentationManager_i::getSlicesParameters(MEDPresentation::TypeID presentati
   return tmp._retn();
 }
 
   return tmp._retn();
 }
 
+MEDCALC::VectorFieldParameters*
+MEDPresentationManager_i::getVectorFieldParameters(MEDPresentation::TypeID presentationID)
+{
+  MEDCALC::VectorFieldParameters* p = new MEDCALC::VectorFieldParameters();
+  _getParameters<MEDPresentationVectorField>(presentationID, *p);
+  MEDCALC::VectorFieldParameters_var tmp(p);
+  return tmp._retn();
+}
+
+MEDCALC::PointSpriteParameters*
+MEDPresentationManager_i::getPointSpriteParameters(MEDPresentation::TypeID presentationID)
+{
+  MEDCALC::PointSpriteParameters* p = new MEDCALC::PointSpriteParameters();
+  _getParameters<MEDPresentationPointSprite>(presentationID, *p);
+  MEDCALC::PointSpriteParameters_var tmp(p);
+  return tmp._retn();
+}
 
 void
 MEDPresentationManager_i::updateMeshView(MEDPresentation::TypeID presentationID, const MEDCALC::MeshViewParameters& params)
 
 void
 MEDPresentationManager_i::updateMeshView(MEDPresentation::TypeID presentationID, const MEDCALC::MeshViewParameters& params)
@@ -219,12 +236,12 @@ MEDPresentationManager_i::updateContour(MEDPresentation::TypeID presentationID,
   return _updatePresentation<MEDPresentationContour>(presentationID, params);
 }
 
   return _updatePresentation<MEDPresentationContour>(presentationID, params);
 }
 
-//void
-//MEDPresentationManager_i::updateVectorField(MEDPresentation::TypeID presentationID, const MEDCALC::VectorFieldParameters& params)
-//{
-//  return _updatePresentation<MEDPresentationVectorField>(presentationID, params);
-//}
-//
+void
+MEDPresentationManager_i::updateVectorField(MEDPresentation::TypeID presentationID, const MEDCALC::VectorFieldParameters& params)
+{
+  return _updatePresentation<MEDPresentationVectorField>(presentationID, params);
+}
+
 void
 MEDPresentationManager_i::updateSlices(MEDPresentation::TypeID presentationID, const MEDCALC::SlicesParameters& params)
 {
 void
 MEDPresentationManager_i::updateSlices(MEDPresentation::TypeID presentationID, const MEDCALC::SlicesParameters& params)
 {
@@ -236,12 +253,12 @@ MEDPresentationManager_i::updateSlices(MEDPresentation::TypeID presentationID, c
 //{
 //  return _updatePresentation<MEDPresentationDeflectionShape>(presentationID, params);
 //}
 //{
 //  return _updatePresentation<MEDPresentationDeflectionShape>(presentationID, params);
 //}
-//
-//void
-//MEDPresentationManager_i::updatePointSprite(MEDPresentation::TypeID presentationID, const MEDCALC::PointSpriteParameters& params)
-//{
-//  return _updatePresentation<MEDPresentationPointSprite>(presentationID, params);
-//}
+
+void
+MEDPresentationManager_i::updatePointSprite(MEDPresentation::TypeID presentationID, const MEDCALC::PointSpriteParameters& params)
+{
+  return _updatePresentation<MEDPresentationPointSprite>(presentationID, params);
+}
 
 CORBA::Boolean
 MEDPresentationManager_i::removePresentation(MEDPresentation::TypeID presentationID)
 
 CORBA::Boolean
 MEDPresentationManager_i::removePresentation(MEDPresentation::TypeID presentationID)
index c2c17873a2a73d0b5e69c24def524928412bcfc5..9f89afcc1ce95bbcbb7dd63e5dddef1aab5ad764 100644 (file)
@@ -42,10 +42,10 @@ class MEDPresentationManager_i: public POA_MEDCALC::MEDPresentationManager,
   MEDCALC_EXPORT MEDPresentation::TypeID makeMeshView(const MEDCALC::MeshViewParameters&, const MEDCALC::ViewModeType);
   MEDCALC_EXPORT MEDPresentation::TypeID makeScalarMap(const MEDCALC::ScalarMapParameters&, const MEDCALC::ViewModeType);
   MEDCALC_EXPORT MEDPresentation::TypeID makeContour(const MEDCALC::ContourParameters&, const MEDCALC::ViewModeType);
   MEDCALC_EXPORT MEDPresentation::TypeID makeMeshView(const MEDCALC::MeshViewParameters&, const MEDCALC::ViewModeType);
   MEDCALC_EXPORT MEDPresentation::TypeID makeScalarMap(const MEDCALC::ScalarMapParameters&, const MEDCALC::ViewModeType);
   MEDCALC_EXPORT MEDPresentation::TypeID makeContour(const MEDCALC::ContourParameters&, const MEDCALC::ViewModeType);
-//  MEDCALC_EXPORT MEDPresentation::TypeID makeVectorField(const MEDCALC::VectorFieldParameters&, const MEDCALC::ViewModeType);
+  MEDCALC_EXPORT MEDPresentation::TypeID makeVectorField(const MEDCALC::VectorFieldParameters&, const MEDCALC::ViewModeType);
   MEDCALC_EXPORT MEDPresentation::TypeID makeSlices(const MEDCALC::SlicesParameters&, const MEDCALC::ViewModeType);
 //  MEDCALC_EXPORT MEDPresentation::TypeID makeDeflectionShape(const MEDCALC::DeflectionShapeParameters&, const MEDCALC::ViewModeType);
   MEDCALC_EXPORT MEDPresentation::TypeID makeSlices(const MEDCALC::SlicesParameters&, const MEDCALC::ViewModeType);
 //  MEDCALC_EXPORT MEDPresentation::TypeID makeDeflectionShape(const MEDCALC::DeflectionShapeParameters&, const MEDCALC::ViewModeType);
-//  MEDCALC_EXPORT MEDPresentation::TypeID makePointSprite(const MEDCALC::PointSpriteParameters&, const MEDCALC::ViewModeType);
+  MEDCALC_EXPORT MEDPresentation::TypeID makePointSprite(const MEDCALC::PointSpriteParameters&, const MEDCALC::ViewModeType);
 
   MEDCALC_EXPORT void setPresentationStringProperty(MEDPresentation::TypeID presentationID, const char* propName, const char* propValue);
   MEDCALC_EXPORT char* getPresentationStringProperty(MEDPresentation::TypeID presentationID, const char* propName);
 
   MEDCALC_EXPORT void setPresentationStringProperty(MEDPresentation::TypeID presentationID, const char* propName, const char* propValue);
   MEDCALC_EXPORT char* getPresentationStringProperty(MEDPresentation::TypeID presentationID, const char* propName);
@@ -57,14 +57,16 @@ class MEDPresentationManager_i: public POA_MEDCALC::MEDPresentationManager,
   MEDCALC_EXPORT MEDCALC::ScalarMapParameters* getScalarMapParameters(MEDPresentation::TypeID presentationID);
   MEDCALC_EXPORT MEDCALC::ContourParameters    getContourParameters(MEDPresentation::TypeID presentationID);
   MEDCALC_EXPORT MEDCALC::SlicesParameters*    getSlicesParameters(MEDPresentation::TypeID presentationID);
   MEDCALC_EXPORT MEDCALC::ScalarMapParameters* getScalarMapParameters(MEDPresentation::TypeID presentationID);
   MEDCALC_EXPORT MEDCALC::ContourParameters    getContourParameters(MEDPresentation::TypeID presentationID);
   MEDCALC_EXPORT MEDCALC::SlicesParameters*    getSlicesParameters(MEDPresentation::TypeID presentationID);
+  MEDCALC_EXPORT MEDCALC::VectorFieldParameters*    getVectorFieldParameters(MEDPresentation::TypeID presentationID);
+  MEDCALC_EXPORT MEDCALC::PointSpriteParameters*    getPointSpriteParameters(MEDPresentation::TypeID presentationID);
 
   MEDCALC_EXPORT void updateMeshView(MEDPresentation::TypeID, const MEDCALC::MeshViewParameters&);
   MEDCALC_EXPORT void updateScalarMap(MEDPresentation::TypeID, const MEDCALC::ScalarMapParameters&);
   MEDCALC_EXPORT void updateContour(MEDPresentation::TypeID, const MEDCALC::ContourParameters&);
 
   MEDCALC_EXPORT void updateMeshView(MEDPresentation::TypeID, const MEDCALC::MeshViewParameters&);
   MEDCALC_EXPORT void updateScalarMap(MEDPresentation::TypeID, const MEDCALC::ScalarMapParameters&);
   MEDCALC_EXPORT void updateContour(MEDPresentation::TypeID, const MEDCALC::ContourParameters&);
-//  MEDCALC_EXPORT void updateVectorField(MEDPresentation::TypeID, const MEDCALC::VectorFieldParameters&);
+  MEDCALC_EXPORT void updateVectorField(MEDPresentation::TypeID, const MEDCALC::VectorFieldParameters&);
   MEDCALC_EXPORT void updateSlices(MEDPresentation::TypeID, const MEDCALC::SlicesParameters&);
 //  MEDCALC_EXPORT void updateDeflectionShape(MEDPresentation::TypeID, const MEDCALC::DeflectionShapeParameters&);
   MEDCALC_EXPORT void updateSlices(MEDPresentation::TypeID, const MEDCALC::SlicesParameters&);
 //  MEDCALC_EXPORT void updateDeflectionShape(MEDPresentation::TypeID, const MEDCALC::DeflectionShapeParameters&);
-//  MEDCALC_EXPORT void updatePointSprite(MEDPresentation::TypeID, const MEDCALC::PointSpriteParameters&);
+  MEDCALC_EXPORT void updatePointSprite(MEDPresentation::TypeID, const MEDCALC::PointSpriteParameters&);
 
   MEDCALC_EXPORT CORBA::Boolean removePresentation(MEDPresentation::TypeID);
   MEDCALC_EXPORT CORBA::Boolean activateView(MEDPresentation::TypeID);
 
   MEDCALC_EXPORT CORBA::Boolean removePresentation(MEDPresentation::TypeID);
   MEDCALC_EXPORT CORBA::Boolean activateView(MEDPresentation::TypeID);
index 83678f19bffd2a1b69b4aa2a7def0710ac2103d8..60ce767e6a3e2b15bd160134b53d9e6d3614b6b2 100644 (file)
@@ -38,8 +38,8 @@ MEDPresentationMeshView::MEDPresentationMeshView(const MEDCALC::MeshViewParamete
   setIntProperty(MEDPresentationMeshView::PROP_MESH_MODE, params.mode);
 }
 
   setIntProperty(MEDPresentationMeshView::PROP_MESH_MODE, params.mode);
 }
 
-std::string
-MEDPresentationMeshView::getMeshViewCommand() const
+void
+MEDPresentationMeshView::representationType()
 {
   std::ostringstream oss1;
 
 {
   std::ostringstream oss1;
 
@@ -59,8 +59,7 @@ MEDPresentationMeshView::getMeshViewCommand() const
       STDLOG(mes);
       throw KERNEL::createSalomeException(mes);
   }
       STDLOG(mes);
       throw KERNEL::createSalomeException(mes);
   }
-
-  return oss1.str();
+  pushAndExecPyLine(oss1.str());
 }
 
 void
 }
 
 void
@@ -70,19 +69,16 @@ MEDPresentationMeshView::internalGeneratePipeline()
 
   MEDPyLockWrapper lock;
 
 
   MEDPyLockWrapper lock;
 
-  std::ostringstream oss;
-  std::string view(getRenderViewVar());
+  createSource();
+  setOrCreateRenderView();
 
 
-  oss << _srcObjVar << " = pvs.MEDReader(FileName='" << _fileName << "');";
-  pushAndExecPyLine(oss.str()); oss.str("");
-  pushAndExecPyLine( getRenderViewCommand() ); // instanciate __viewXXX
+  std::ostringstream oss;
   oss << _objVar << " = " << _srcObjVar << ";";
   pushAndExecPyLine(oss.str()); oss.str("");
   oss << _objVar << " = " << _srcObjVar << ";";
   pushAndExecPyLine(oss.str()); oss.str("");
-  oss << _dispVar << " = pvs.Show(" << _objVar << ", " << view << ");";
-  pushAndExecPyLine(oss.str()); oss.str("");
-  pushAndExecPyLine(getMeshViewCommand());
-  pushAndExecPyLine(getResetCameraCommand());
-  pushAndExecPyLine("pvs.Render();");
+
+  showObject();
+  representationType();
+  resetCameraAndRender();
 }
 
 void
 }
 
 void
@@ -106,8 +102,7 @@ MEDPresentationMeshView::updateMeshMode(const MEDCALC::MeshModeType mode)
   // Update the pipeline:
   {
     MEDPyLockWrapper lock;
   // Update the pipeline:
   {
     MEDPyLockWrapper lock;
-    std::string cmd = getMeshViewCommand();
-    pushAndExecPyLine(cmd);
+    representationType();
     pushAndExecPyLine("pvs.Render();");
   }
 }
     pushAndExecPyLine("pvs.Render();");
   }
 }
index 30c6d8bcaa77b0b9862005270fb0e7c83cec51ab..9eb9ecede68f48611603db2fa7a8b6092343e983 100644 (file)
@@ -41,7 +41,7 @@ protected:
   void updateMeshMode(const MEDCALC::MeshModeType mode);
   virtual void internalGeneratePipeline();
 
   void updateMeshMode(const MEDCALC::MeshModeType mode);
   virtual void internalGeneratePipeline();
 
-  std::string getMeshViewCommand() const;
+  void representationType();
 
 private:
   MEDCALC::MeshViewParameters _params;
 
 private:
   MEDCALC::MeshViewParameters _params;
index 18fdff4d37e6f17f3cbcb5c434a839904a2f88bc..9dbc17ff884ae5846ea4a384e1e3be06fe850c10 100644 (file)
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+#include "MEDPyLockWrapper.hxx"
+
 #include "MEDPresentationPointSprite.hxx"
 #include "MEDPresentationPointSprite.hxx"
+#include "MEDPresentationException.hxx"
+
+#include <SALOME_KernelServices.hxx>
+#undef LOG  // should be fixed in KERNEL - double definition
+#include <Basics_Utils.hxx>
+
+#include <sstream>
+
+const std::string MEDPresentationPointSprite::TYPE_NAME = "MEDPresentationPointSprite";
+
+MEDPresentationPointSprite::MEDPresentationPointSprite(const MEDCALC::PointSpriteParameters& params,
+                                                   const MEDCALC::ViewModeType viewMode) :
+    MEDPresentation(params.fieldHandlerId, TYPE_NAME, viewMode, params.colorMap, params.scalarBarRange), _params(params)
+{
+}
 
 void
 MEDPresentationPointSprite::internalGeneratePipeline()
 {
 
 void
 MEDPresentationPointSprite::internalGeneratePipeline()
 {
-//  PyGILState_STATE _gil_state = PyGILState_Ensure();
-//
-//  std::string cmd = std::string("import pvsimple as pvs;");
-//  cmd += getRenderViewCommand(_params.viewMode); // define __view1
-//
-//  cmd += std::string("__obj1 = pvs.MEDReader(FileName='") + _fileName + std::string("');");
-//  cmd += std::string("__disp1 = pvs.Show(__obj1, __view1);");
-//  cmd += std::string("pvs.ColorBy(__disp1, ('") + _fieldType + std::string("', '") + _fieldName + std::string("'));");
-//  cmd += std::string("__disp1.SetScalarBarVisibility(__view1, True);");
-//  cmd += std::string("__disp1.RescaleTransferFunctionToDataRangeOverTime();");
-//  cmd += std::string("__disp1.SetRepresentationType('Point Sprite');");
-//  cmd += std::string("pvs.Render();");
-//
-//  cmd += getResetCameraCommand();
-//
-//  //std::cerr << "Python command:" << std::endl;
-//  //std::cerr << cmd << std::endl;
-//  PyRun_SimpleString(cmd.c_str());
-//  // Retrieve Python object for internal storage:
-//  PyObject* obj = getPythonObjectFromMain("__obj1");
-//  PyObject* disp = getPythonObjectFromMain("__disp1");
-//  pushInternal(obj, disp);
-//
-//  PyGILState_Release(_gil_state);
+  MEDPresentation::internalGeneratePipeline();
+
+  MEDPyLockWrapper lock;
+
+  setOrCreateRenderView(); // instanciate __viewXXX
+  createSource();
+
+  // Populate internal array of available components:
+  fillAvailableFieldComponents();
+  int nbCompo = getIntProperty(MEDPresentation::PROP_NB_COMPONENTS);
+
+  // Point sprite needs point data:
+  applyCellToPointIfNeeded();
+
+  pushAndExecPyLine(_objVar + " = " + _srcObjVar);
+
+  showObject(); // needs to be done before cell size computation to be sure ParaView has computed bounds, etc ...
+
+  // Compute cell average size in the mesh to have a nice scaling ratio:
+  std::ostringstream oss;
+  oss << "import medcalc; __avgSize=medcalc.ComputeCellAverageSize(" << _srcObjVar << ");";
+  pushAndExecPyLine(oss.str()); oss.str("");
+
+  colorBy("POINTS");  // like in Contour
+
+  // Set point sprite:
+  oss << _dispVar << ".SetRepresentationType('Point Sprite');";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << _dispVar << ".PointSpriteDefaultsInitialized = 1;";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << _dispVar << ".RadiusArray = ['POINTS', '" << _fieldName << "'];";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << _dispVar << ".RadiusMode = 'Scalar';";
+  pushAndExecPyLine(oss.str()); oss.str("");
+
+  oss << _dispVar << ".RadiusVectorComponent = " << _selectedComponentIndex << ";";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << _dispVar << ".RadiusIsProportional = 0 ;";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << _dispVar << ".RadiusTransferFunctionEnabled = 1 ;";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << _dispVar << ".MaxPixelSize = 30 ;";   // Avoid too big balls
+  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << _dispVar << ".RadiusRange = [0.0, __avgSize];";
+  pushAndExecPyLine(oss.str()); oss.str("");
+
+  showScalarBar();
+  rescaleTransferFunction();
+  selectColorMap();
+  resetCameraAndRender();
 }
 
 void
 MEDPresentationPointSprite::updatePipeline(const MEDCALC::PointSpriteParameters& params)
 {
 }
 
 void
 MEDPresentationPointSprite::updatePipeline(const MEDCALC::PointSpriteParameters& params)
 {
-  // :TODO:
+  if (params.fieldHandlerId != _params.fieldHandlerId)
+    throw KERNEL::createSalomeException("Unexpected updatePipeline error! Mismatching fieldHandlerId!");
+
+  if (std::string(params.displayedComponent) != std::string(_params.displayedComponent))
+    updateComponent<MEDPresentationPointSprite, MEDCALC::PointSpriteParameters>(std::string(params.displayedComponent));
+  if (params.scalarBarRange != _params.scalarBarRange)
+    updateScalarBarRange<MEDPresentationPointSprite, MEDCALC::PointSpriteParameters>(params.scalarBarRange);
+  if (params.colorMap != _params.colorMap)
+    updateColorMap<MEDPresentationPointSprite, MEDCALC::PointSpriteParameters>(params.colorMap);
 }
 }
index 56d83e27b1fa2d0e7b946c53f7973d9d6529aae1..e38b9ea1f5c668b1458c5e027c072804b4635a01 100644 (file)
 class MEDCALC_EXPORT MEDPresentationPointSprite : public MEDPresentation
 {
 public:
 class MEDCALC_EXPORT MEDPresentationPointSprite : public MEDPresentation
 {
 public:
-  MEDPresentationPointSprite(const MEDCALC::PointSpriteParameters& params) :
-    MEDPresentation(params.fieldHandlerId, "MEDPresentationPointSprite"), _params(params)
-  {}
+  static const std::string TYPE_NAME;
+
+  MEDPresentationPointSprite(const MEDCALC::PointSpriteParameters& params, const MEDCALC::ViewModeType viewMode);
   virtual ~MEDPresentationPointSprite() {}
 
   void updatePipeline(const MEDCALC::PointSpriteParameters& params);
   virtual ~MEDPresentationPointSprite() {}
 
   void updatePipeline(const MEDCALC::PointSpriteParameters& params);
-  MEDCALC::ViewModeType getViewMode() { return _params.viewMode; }
+
+  void getParameters(MEDCALC::PointSpriteParameters & params) const { params = _params; } ;
+  void setParameters(const MEDCALC::PointSpriteParameters & params) { _params = params; } ;
 
 protected:
   virtual void internalGeneratePipeline();
 
 protected:
   virtual void internalGeneratePipeline();
index 79af31efd47fbaca5c9ac5b976425f6833be7b13..7c0c21a84365b49710434ba7b8b0b9d7d1043dcd 100644 (file)
@@ -43,34 +43,21 @@ MEDPresentationScalarMap::internalGeneratePipeline()
 
   MEDPyLockWrapper lock;
 
 
   MEDPyLockWrapper lock;
 
-  std::ostringstream oss;
-  std::string view(getRenderViewVar());
-
-  pushAndExecPyLine( getRenderViewCommand() ); // instanciate __viewXXX
-
-  oss << _srcObjVar << " = pvs.MEDReader(FileName='" << _fileName << "');";
-  pushAndExecPyLine(oss.str()); oss.str("");
+  setOrCreateRenderView(); // instanciate __viewXXX
+  createSource();
 
   // Populate internal array of available components:
   fillAvailableFieldComponents();
 
   // Populate internal array of available components:
   fillAvailableFieldComponents();
-//  dumpIntProperties();
-//  dumpStringProperties();
 
 
+  // Nothing to do in a scalar map, obj = source:
   pushAndExecPyLine(_objVar + " = " + _srcObjVar);
 
   pushAndExecPyLine(_objVar + " = " + _srcObjVar);
 
-  oss << _dispVar << " = pvs.Show(" << _objVar << ", " << view << ");";
-  pushAndExecPyLine(oss.str()); oss.str("");
-  oss << "pvs.ColorBy(" << _dispVar << ", ('" << _fieldType << "', '" << _fieldName << "'));";
-  pushAndExecPyLine(oss.str()); oss.str("");
-  oss << _dispVar <<  ".SetScalarBarVisibility(" << view << ", True);";
-  pushAndExecPyLine(oss.str()); oss.str("");
-  oss << getRescaleCommand();
-  pushAndExecPyLine(oss.str()); oss.str("");
-  oss << _lutVar << " = pvs.GetColorTransferFunction('" << _fieldName << "');";
-  pushAndExecPyLine(oss.str()); oss.str("");
-  pushAndExecPyLine(getColorMapCommand()); oss.str("");
-  pushAndExecPyLine(getResetCameraCommand());
-  pushAndExecPyLine("pvs.Render();");
+  showObject();
+  colorBy(_fieldType);
+  showScalarBar();
+  rescaleTransferFunction();
+  selectColorMap();
+  resetCameraAndRender();
 
   // Retrieve Python object for internal storage:
 //  PyObject* p_obj = getPythonObjectFromMain(obj.c_str());
 
   // Retrieve Python object for internal storage:
 //  PyObject* p_obj = getPythonObjectFromMain(obj.c_str());
index 3e51ee28fd601c1af2ce3b92eb92451fb80d04a2..16dbf4fad256bf69bdb5b2da793c2b019e8c9a8e 100644 (file)
@@ -38,17 +38,16 @@ MEDPresentationSlices::MEDPresentationSlices(const MEDCALC::SlicesParameters& pa
   setIntProperty(MEDPresentationSlices::PROP_SLICE_ORIENTATION, params.orientation);
 }
 
   setIntProperty(MEDPresentationSlices::PROP_SLICE_ORIENTATION, params.orientation);
 }
 
-std::string
-MEDPresentationSlices::getNbSlicesCommand() const
+void
+MEDPresentationSlices::setNumberOfSlices()
 {
   std::ostringstream oss1;
   // TODO
 //  oss1 << _objVar << ".SliceType.Normal = " << norm << ";";
 {
   std::ostringstream oss1;
   // TODO
 //  oss1 << _objVar << ".SliceType.Normal = " << norm << ";";
-  return oss1.str();
 }
 
 }
 
-std::string
-MEDPresentationSlices::getOrientationCommand() const
+void
+MEDPresentationSlices::selectSliceOrientation()
 {
   std::ostringstream oss1;
   std::string norm;
 {
   std::ostringstream oss1;
   std::string norm;
@@ -83,7 +82,7 @@ MEDPresentationSlices::getOrientationCommand() const
   }
 
   oss1 << _objVar << ".SliceType.Normal = " << norm << ";";
   }
 
   oss1 << _objVar << ".SliceType.Normal = " << norm << ";";
-  return oss1.str();
+  pushAndExecPyLine(oss1.str()); oss1.str("");
 }
 
 
 }
 
 
@@ -95,35 +94,28 @@ MEDPresentationSlices::internalGeneratePipeline()
   MEDPyLockWrapper lock;
 
   std::ostringstream oss_o, oss;
   MEDPyLockWrapper lock;
 
   std::ostringstream oss_o, oss;
-  std::string view(getRenderViewVar());
 
 
-  oss << _srcObjVar << " = pvs.MEDReader(FileName='" << _fileName << "');";
-  pushAndExecPyLine(oss.str()); oss.str("");
+  createSource();
 
   // Populate internal array of available components:
   fillAvailableFieldComponents();
 
   // Populate internal array of available components:
   fillAvailableFieldComponents();
-  pushAndExecPyLine( getRenderViewCommand() ); // instanciate __viewXXX
+  setOrCreateRenderView(); // instanciate __viewXXX
+
   oss << _objVar << " = pvs.Slice(Input=" << _srcObjVar << ");";
   pushAndExecPyLine(oss.str()); oss.str("");
   oss << _objVar << " = pvs.Slice(Input=" << _srcObjVar << ");";
   pushAndExecPyLine(oss.str()); oss.str("");
+
+  showObject();
+
   oss << _objVar << ".SliceType = 'Plane';";
   pushAndExecPyLine(oss.str()); oss.str("");
 
   // Set slice orientation
   oss << _objVar << ".SliceType = 'Plane';";
   pushAndExecPyLine(oss.str()); oss.str("");
 
   // Set slice orientation
-  pushAndExecPyLine(getOrientationCommand());
-
-  oss << _dispVar << " = pvs.Show(" << _objVar << ", " << view << ");";
-  pushAndExecPyLine(oss.str()); oss.str("");
-  oss << "pvs.ColorBy(" << _dispVar << ", ('" << _fieldType << "', '" << _fieldName << "'));";
-  pushAndExecPyLine(oss.str()); oss.str("");
-  oss << _dispVar <<  ".SetScalarBarVisibility(" << view << ", True);";
-  pushAndExecPyLine(oss.str()); oss.str("");
-  oss << getRescaleCommand();
-  pushAndExecPyLine(oss.str()); oss.str("");
-  oss << _lutVar << " = pvs.GetColorTransferFunction('" << _fieldName << "');";
-  pushAndExecPyLine(oss.str()); oss.str("");
-  pushAndExecPyLine(getColorMapCommand()); oss.str("");
-  pushAndExecPyLine(getResetCameraCommand());
-  pushAndExecPyLine("pvs.Render();");
+  selectSliceOrientation();
+  colorBy(_fieldType);
+  showScalarBar();
+  rescaleTransferFunction();
+  selectColorMap();
+  resetCameraAndRender();
 }
 
 void
 }
 
 void
@@ -156,8 +148,7 @@ MEDPresentationSlices::updateNbSlices(const int nbSlices)
   // Update the pipeline:
   {
     MEDPyLockWrapper lock;
   // Update the pipeline:
   {
     MEDPyLockWrapper lock;
-    std::string cmd = getNbSlicesCommand();
-    pushAndExecPyLine(cmd);
+    setNumberOfSlices();
     pushAndExecPyLine("pvs.Render();");
   }
 }
     pushAndExecPyLine("pvs.Render();");
   }
 }
@@ -173,8 +164,7 @@ MEDPresentationSlices::updateOrientation(const MEDCALC::SliceOrientationType ori
   // Update the pipeline:
   {
     MEDPyLockWrapper lock;
   // Update the pipeline:
   {
     MEDPyLockWrapper lock;
-    std::string cmd = getOrientationCommand();
-    pushAndExecPyLine(cmd);
+    selectSliceOrientation();
     pushAndExecPyLine("pvs.Render();");
   }
 }
     pushAndExecPyLine("pvs.Render();");
   }
 }
index 9237475342c1aa40c27082f0d2733ea4f59d7d30..81d5ae7e8ac117c1f9a879afcecadc1b290dffd1 100644 (file)
@@ -43,8 +43,8 @@ protected:
   void updateOrientation(const MEDCALC::SliceOrientationType orientation);
   virtual void internalGeneratePipeline();
 
   void updateOrientation(const MEDCALC::SliceOrientationType orientation);
   virtual void internalGeneratePipeline();
 
-  std::string getNbSlicesCommand() const;
-  std::string getOrientationCommand() const;
+  void setNumberOfSlices();
+  void selectSliceOrientation();
 
 private:
   MEDCALC::SlicesParameters _params;
 
 private:
   MEDCALC::SlicesParameters _params;
index 979f8ed8cfa258e55a11271c642c5495c135d032..f922e29df090cd3953909a8bbffbdb710f1cd343 100644 (file)
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+#include "MEDPyLockWrapper.hxx"
+
 #include "MEDPresentationVectorField.hxx"
 #include "MEDPresentationVectorField.hxx"
+#include "MEDPresentationException.hxx"
+
+#include <SALOME_KernelServices.hxx>
+#undef LOG  // should be fixed in KERNEL - double definition
+#include <Basics_Utils.hxx>
+
+#include <sstream>
+
+const std::string MEDPresentationVectorField::TYPE_NAME = "MEDPresentationVectorField";
+
+MEDPresentationVectorField::MEDPresentationVectorField(const MEDCALC::VectorFieldParameters& params,
+                                                   const MEDCALC::ViewModeType viewMode) :
+    MEDPresentation(params.fieldHandlerId, TYPE_NAME, viewMode, params.colorMap, params.scalarBarRange), _params(params)
+{
+}
 
 void
 MEDPresentationVectorField::internalGeneratePipeline()
 {
 
 void
 MEDPresentationVectorField::internalGeneratePipeline()
 {
-//  PyGILState_STATE _gil_state = PyGILState_Ensure();
-//
-//  std::string cmd = std::string("import pvsimple as pvs;");
-//  cmd += getRenderViewCommand(_params.viewMode); // define __view1
-//
-//  cmd += std::string("__obj1 = pvs.MEDReader(FileName='") + _fileName + std::string("');");
-//  cmd += std::string("__disp1 = pvs.Show(__obj1, __view1);");
-//  cmd += std::string("pvs.ColorBy(__disp1, ('") + _fieldType + std::string("', '") + _fieldName + std::string("'));");
-//  cmd += std::string("__disp1.SetScalarBarVisibility(__view1, True);");
-//  cmd += std::string("__disp1.RescaleTransferFunctionToDataRangeOverTime();");
-//  cmd += std::string("__disp1.SetRepresentationType('3D Glyphs');");
-//  cmd += std::string("pvs.Render();");
-//
-//  cmd += getResetCameraCommand();
-//
-//  //std::cerr << "Python command:" << std::endl;
-//  //std::cerr << cmd << std::endl;
-//  PyRun_SimpleString(cmd.c_str());
-//  // Retrieve Python object for internal storage:
-//  PyObject* obj = getPythonObjectFromMain("__obj1");
-//  PyObject* disp = getPythonObjectFromMain("__disp1");
-//  pushInternal(obj, disp);
-//
-//  PyGILState_Release(_gil_state);
+  MEDPresentation::internalGeneratePipeline();
+
+  MEDPyLockWrapper lock;
+
+  setOrCreateRenderView();
+  createSource();
+
+  // Populate internal array of available components:
+  fillAvailableFieldComponents();
+  if (getIntProperty(MEDPresentation::PROP_NB_COMPONENTS) <= 1)
+    {
+      const char * msg = "Vector field presentation does not work for scalar  field!"; // this message will appear in GUI too
+      STDLOG(msg);
+      throw KERNEL::createSalomeException(msg);
+    }
+
+  std::ostringstream oss;
+  oss << _objVar << " = pvs.Glyph(Input=" << _srcObjVar << ", GlyphType='Arrow');";
+  pushAndExecPyLine(oss.str()); oss.str("");
+
+  showObject(); // to be done first so that the scale factor computation properly works
+
+  oss << _objVar << ".Scalars = ['"<< _fieldType << "', 'None'];";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << _objVar << ".Vectors = ['"<< _fieldType << "', '" << _fieldName << "'];";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << _objVar << ".ScaleMode = 'vector';";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << _objVar << ".GlyphMode = 'All Points';";
+  pushAndExecPyLine(oss.str()); oss.str("");
+//  oss << _objVar << "GlyphTransform = 'Transform2';";  // not sure this is really needed?
+//  pushAndExecPyLine(oss.str()); oss.str("");
+  oss << _objVar << ".ScaleFactor = 0.1;";
+  pushAndExecPyLine(oss.str()); oss.str("");
+  // Auto-tuning of the scale factor:
+//  oss << "import medcalc; medcalc.SetDefaultScaleFactor(active=" << _objVar << ");";
+//  pushAndExecPyLine(oss.str()); oss.str("");
+
+  colorBy("POINTS");
+  showScalarBar();
+  rescaleTransferFunction();
+  selectColorMap();
+  resetCameraAndRender();
 }
 
 void
 MEDPresentationVectorField::updatePipeline(const MEDCALC::VectorFieldParameters& params)
 {
 }
 
 void
 MEDPresentationVectorField::updatePipeline(const MEDCALC::VectorFieldParameters& params)
 {
-  // :TODO:
+  if (params.fieldHandlerId != _params.fieldHandlerId)
+    throw KERNEL::createSalomeException("Unexpected updatePipeline error! Mismatching fieldHandlerId!");
+
+  if (std::string(params.displayedComponent) != std::string(_params.displayedComponent))
+    updateComponent<MEDPresentationVectorField, MEDCALC::VectorFieldParameters>(std::string(params.displayedComponent));
+  if (params.scalarBarRange != _params.scalarBarRange)
+    updateScalarBarRange<MEDPresentationVectorField, MEDCALC::VectorFieldParameters>(params.scalarBarRange);
+  if (params.colorMap != _params.colorMap)
+    updateColorMap<MEDPresentationVectorField, MEDCALC::VectorFieldParameters>(params.colorMap);
 }
 }
index 758cb152e1edb189ff7e9897dabd5564295589c6..3c37fba534285bb066527b136f260663bedbe427 100644 (file)
 class MEDCALC_EXPORT MEDPresentationVectorField : public MEDPresentation
 {
 public:
 class MEDCALC_EXPORT MEDPresentationVectorField : public MEDPresentation
 {
 public:
-  MEDPresentationVectorField(const MEDCALC::VectorFieldParameters& params) :
-    MEDPresentation(params.fieldHandlerId, "MEDPresentationVectorField"), _params(params)
-  {}
+  static const std::string TYPE_NAME;
+
+  MEDPresentationVectorField(const MEDCALC::VectorFieldParameters& params, const MEDCALC::ViewModeType viewMode);
   virtual ~MEDPresentationVectorField() {}
 
   void updatePipeline(const MEDCALC::VectorFieldParameters& params);
   virtual ~MEDPresentationVectorField() {}
 
   void updatePipeline(const MEDCALC::VectorFieldParameters& params);
-  MEDCALC::ViewModeType getViewMode() { return _params.viewMode; }
+
+  void getParameters(MEDCALC::VectorFieldParameters & params) const { params = _params; } ;
+  void setParameters(const MEDCALC::VectorFieldParameters & params) { _params = params; } ;
 
 protected:
   virtual void internalGeneratePipeline();
 
 private:
   MEDCALC::VectorFieldParameters _params;
 
 protected:
   virtual void internalGeneratePipeline();
 
 private:
   MEDCALC::VectorFieldParameters _params;
+
 };
 
 #endif
 };
 
 #endif
index 0ff4b8f455e80f4fc46480cf507814e002a42fc9..f968a83811126e84c143e5409da79bb73c6d88dc 100644 (file)
@@ -39,7 +39,7 @@ SET(MEDCALCGUI_SOURCES
     XmedDataModel.cxx
     MEDWidgetHelper.cxx
     MEDWidgetHelperMeshView.cxx
     XmedDataModel.cxx
     MEDWidgetHelper.cxx
     MEDWidgetHelperMeshView.cxx
-    MEDWidgetHelperScalarMap.cxx
+    MEDWidgetHelperComponent.cxx
     MEDWidgetHelperContour.cxx
     MEDWidgetHelperSlices.cxx
 )
     MEDWidgetHelperContour.cxx
     MEDWidgetHelperSlices.cxx
 )
@@ -57,9 +57,12 @@ SET(MEDCALCGUI_HEADERS
   ProcessingController.hxx
   MEDWidgetHelper.hxx
   MEDWidgetHelperMeshView.hxx
   ProcessingController.hxx
   MEDWidgetHelper.hxx
   MEDWidgetHelperMeshView.hxx
+  MEDWidgetHelperComponent.hxx
   MEDWidgetHelperScalarMap.hxx
   MEDWidgetHelperContour.hxx
   MEDWidgetHelperSlices.hxx
   MEDWidgetHelperScalarMap.hxx
   MEDWidgetHelperContour.hxx
   MEDWidgetHelperSlices.hxx
+  MEDWidgetHelperPointSprite.hxx
+  MEDWidgetHelperVectorField.hxx
   )
  
 IF(SALOME_MED_WITH_QTTESTING)
   )
  
 IF(SALOME_MED_WITH_QTTESTING)
diff --git a/src/MEDCalc/gui/MEDWidgetHelperComponent.cxx b/src/MEDCalc/gui/MEDWidgetHelperComponent.cxx
new file mode 100644 (file)
index 0000000..947fc34
--- /dev/null
@@ -0,0 +1,50 @@
+// Copyright (C) 2016  CEA/DEN, EDF R&D
+//
+// 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, or (at your option) any later version.
+//
+// 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
+//
+
+#include "MEDWidgetHelperComponent.hxx"
+#include "PresentationController.hxx"
+
+MEDWidgetHelperComponent::MEDWidgetHelperComponent(const PresentationController * presController, MEDCALC::MEDPresentationManager_ptr presManager, int presId,
+                                                   const std::string & presName, WidgetPresentationParameters * paramW):
+  MEDWidgetHelper(presController, presManager, presId, presName, paramW)
+{}
+
+MEDWidgetHelperComponent::~MEDWidgetHelperComponent()
+{}
+
+void MEDWidgetHelperComponent::udpateWidget()
+{
+  MEDWidgetHelper::udpateWidget();
+
+  _paramWidget->setComponents(_allCompos, _selectedCompo);
+
+  // Connect combo box changes
+  QObject::connect( this, SIGNAL(presentationUpdateSignal(const PresentationEvent *)),
+                    _presController, SIGNAL(presentationSignal(const PresentationEvent *)) );
+  QObject::connect( _paramWidget, SIGNAL(comboCompoIndexChanged(int)), this, SLOT(onComponentChanged(int)) );
+}
+
+void MEDWidgetHelperComponent::releaseWidget()
+{
+  MEDWidgetHelper::releaseWidget();
+
+  QObject::disconnect( this, SIGNAL(presentationUpdateSignal(const PresentationEvent *)),
+                       _presController, SIGNAL(presentationSignal(const PresentationEvent *)) );
+  QObject::disconnect( _paramWidget, SIGNAL(comboCompoIndexChanged(int)), this, SLOT(onComponentChanged(int)) );
+}
diff --git a/src/MEDCalc/gui/MEDWidgetHelperComponent.hxx b/src/MEDCalc/gui/MEDWidgetHelperComponent.hxx
new file mode 100644 (file)
index 0000000..58c774f
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright (C) 2016  CEA/DEN, EDF R&D
+//
+// 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, or (at your option) any later version.
+//
+// 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
+//
+
+#ifndef SRC_MEDCALC_GUI_MEDWIDGETHELPERCOMPONENT_HXX_
+#define SRC_MEDCALC_GUI_MEDWIDGETHELPERCOMPONENT_HXX_
+
+#include "MEDWidgetHelper.hxx"
+
+class PresentationController;
+
+/**
+ * Abstract class to manage all presentations having only the component name to change.
+ */
+class MEDWidgetHelperComponent: public MEDWidgetHelper
+{
+  Q_OBJECT
+
+public:
+  MEDWidgetHelperComponent(const PresentationController* presController,
+                           MEDCALC::MEDPresentationManager_ptr presManager, int presId, const std::string & presName,
+                           WidgetPresentationParameters * paramW);
+  virtual ~MEDWidgetHelperComponent();
+
+  virtual void udpateWidget();
+  virtual void releaseWidget();
+
+  virtual std::string getPythonTag() const = 0;
+};
+
+#endif /* SRC_MEDCALC_GUI_MEDWIDGETHELPERCOMPONENT_HXX_ */
diff --git a/src/MEDCalc/gui/MEDWidgetHelperPointSprite.hxx b/src/MEDCalc/gui/MEDWidgetHelperPointSprite.hxx
new file mode 100644 (file)
index 0000000..0ad72e4
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright (C) 2016  CEA/DEN, EDF R&D
+//
+// 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, or (at your option) any later version.
+//
+// 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
+//
+
+#ifndef SRC_MEDCALC_GUI_MEDWIDGETHELPERPOINTSPRITE_HXX_
+#define SRC_MEDCALC_GUI_MEDWIDGETHELPERPOINTSPRITE_HXX_
+
+#include "MEDWidgetHelperComponent.hxx"
+
+class PresentationController;
+
+class MEDWidgetHelperPointSprite: public MEDWidgetHelperComponent
+{
+  Q_OBJECT
+
+public:
+  MEDWidgetHelperPointSprite(const PresentationController* presController,
+                           MEDCALC::MEDPresentationManager_ptr presManager, int presId, const std::string & presName,
+                           WidgetPresentationParameters * paramW):
+     MEDWidgetHelperComponent(presController, presManager, presId, presName, paramW)
+  {}
+
+  virtual ~MEDWidgetHelperPointSprite() {}
+
+  virtual std::string getPythonTag() const { return "PointSprite"; }
+};
+
+#endif /* SRC_MEDCALC_GUI_MEDWIDGETHELPERPOINTSPRITE_HXX_ */
diff --git a/src/MEDCalc/gui/MEDWidgetHelperScalarMap.cxx b/src/MEDCalc/gui/MEDWidgetHelperScalarMap.cxx
deleted file mode 100644 (file)
index 755bf80..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (C) 2016  CEA/DEN, EDF R&D
-//
-// 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, or (at your option) any later version.
-//
-// 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
-//
-
-#include "MEDWidgetHelperScalarMap.hxx"
-#include "MEDPresentationScalarMap.hxx"  // from component side.
-#include "PresentationController.hxx"
-
-#include <sstream>
-
-MEDWidgetHelperScalarMap::MEDWidgetHelperScalarMap(const PresentationController * presController, MEDCALC::MEDPresentationManager_ptr presManager, int presId,
-                                                   const std::string & presName, WidgetPresentationParameters * paramW):
-  MEDWidgetHelper(presController, presManager, presId, presName, paramW)
-{
-}
-
-MEDWidgetHelperScalarMap::~MEDWidgetHelperScalarMap()
-{}
-
-void MEDWidgetHelperScalarMap::udpateWidget()
-{
-  MEDWidgetHelper::udpateWidget();
-
-  // Scalar map presentation needs the component name, that's all.
-  _paramWidget->setComponents(_allCompos, _selectedCompo);
-
-  // Connect combo box changes
-  QObject::connect( this, SIGNAL(presentationUpdateSignal(const PresentationEvent *)),
-                    _presController, SIGNAL(presentationSignal(const PresentationEvent *)) );
-  QObject::connect( _paramWidget, SIGNAL(comboCompoIndexChanged(int)), this, SLOT(onComponentChanged(int)) );
-}
-
-void MEDWidgetHelperScalarMap::releaseWidget()
-{
-  MEDWidgetHelper::releaseWidget();
-
-  QObject::disconnect( this, SIGNAL(presentationUpdateSignal(const PresentationEvent *)),
-                       _presController, SIGNAL(presentationSignal(const PresentationEvent *)) );
-  QObject::disconnect( _paramWidget, SIGNAL(comboCompoIndexChanged(int)), this, SLOT(onComponentChanged(int)) );
-}
index ee17a53076ace9f58ecfc74c89bae211c8289602..d3ba5c056d7be3a424bb3eac59a8cdfd9c11673a 100644 (file)
 #ifndef SRC_MEDCALC_GUI_MEDWIDGETHELPERSCALARMAP_HXX_
 #define SRC_MEDCALC_GUI_MEDWIDGETHELPERSCALARMAP_HXX_
 
 #ifndef SRC_MEDCALC_GUI_MEDWIDGETHELPERSCALARMAP_HXX_
 #define SRC_MEDCALC_GUI_MEDWIDGETHELPERSCALARMAP_HXX_
 
-#include "MEDWidgetHelper.hxx"
+#include "MEDWidgetHelperComponent.hxx"
 
 class PresentationController;
 
 
 class PresentationController;
 
-class MEDWidgetHelperScalarMap: public MEDWidgetHelper
+class MEDWidgetHelperScalarMap: public MEDWidgetHelperComponent
 {
   Q_OBJECT
 
 public:
   MEDWidgetHelperScalarMap(const PresentationController* presController,
                            MEDCALC::MEDPresentationManager_ptr presManager, int presId, const std::string & presName,
 {
   Q_OBJECT
 
 public:
   MEDWidgetHelperScalarMap(const PresentationController* presController,
                            MEDCALC::MEDPresentationManager_ptr presManager, int presId, const std::string & presName,
-                           WidgetPresentationParameters * paramW);
-  virtual ~MEDWidgetHelperScalarMap();
+                           WidgetPresentationParameters * paramW):
+      MEDWidgetHelperComponent(presController, presManager, presId, presName, paramW)
+  {}
 
 
-  virtual void udpateWidget();
-  virtual void releaseWidget();
+  virtual ~MEDWidgetHelperScalarMap() {}
 
   virtual std::string getPythonTag() const { return "ScalarMap"; }
 };
 
   virtual std::string getPythonTag() const { return "ScalarMap"; }
 };
diff --git a/src/MEDCalc/gui/MEDWidgetHelperVectorField.hxx b/src/MEDCalc/gui/MEDWidgetHelperVectorField.hxx
new file mode 100644 (file)
index 0000000..daca5df
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright (C) 2016  CEA/DEN, EDF R&D
+//
+// 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, or (at your option) any later version.
+//
+// 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
+//
+
+#ifndef SRC_MEDCALC_GUI_MEDWIDGETHELPERVECTORFIELD_HXX_
+#define SRC_MEDCALC_GUI_MEDWIDGETHELPERVECTORFIELD_HXX_
+
+#include "MEDWidgetHelperComponent.hxx"
+
+class PresentationController;
+
+class MEDWidgetHelperVectorField: public MEDWidgetHelperComponent
+{
+  Q_OBJECT
+
+public:
+  MEDWidgetHelperVectorField(const PresentationController* presController,
+                           MEDCALC::MEDPresentationManager_ptr presManager, int presId, const std::string & presName,
+                           WidgetPresentationParameters * paramW):
+     MEDWidgetHelperComponent(presController, presManager, presId, presName, paramW)
+  {}
+
+  virtual ~MEDWidgetHelperVectorField() {}
+
+  virtual std::string getPythonTag() const { return "VectorField"; }
+};
+
+#endif /* SRC_MEDCALC_GUI_MEDWIDGETHELPERVECTORFIELD_HXX_ */
index ffd9bab25867669160df4cd6d93aeaed4afd0bda..359ed79ce77031aeb7e88d5cbee090e02d23a7d9 100644 (file)
 #include "MEDPresentationScalarMap.hxx"
 #include "MEDPresentationContour.hxx"
 #include "MEDPresentationSlices.hxx"
 #include "MEDPresentationScalarMap.hxx"
 #include "MEDPresentationContour.hxx"
 #include "MEDPresentationSlices.hxx"
+#include "MEDPresentationPointSprite.hxx"
+#include "MEDPresentationVectorField.hxx"
+//#include "MEDPresentationDeflectionShape.hxx"
 
 #include "MEDWidgetHelperMeshView.hxx"
 #include "MEDWidgetHelperScalarMap.hxx"
 #include "MEDWidgetHelperContour.hxx"
 #include "MEDWidgetHelperSlices.hxx"
 
 #include "MEDWidgetHelperMeshView.hxx"
 #include "MEDWidgetHelperScalarMap.hxx"
 #include "MEDWidgetHelperContour.hxx"
 #include "MEDWidgetHelperSlices.hxx"
+#include "MEDWidgetHelperPointSprite.hxx"
+#include "MEDWidgetHelperVectorField.hxx"
+//#include "MEDWidgetHelperDeflectionShape.hxx"
 
 #include <SalomeApp_Application.h>
 #include <SalomeApp_Study.h>
 
 #include <SalomeApp_Application.h>
 #include <SalomeApp_Study.h>
@@ -489,26 +495,28 @@ PresentationController::processPresentationEvent(const PresentationEvent* event)
   }
   else if ( event->eventtype == PresentationEvent::EVENT_VIEW_OBJECT_CONTOUR ) {
       commands += QString("presentation_id = medcalc.MakeContour(accessField(%1), viewMode=%2, scalarBarRange=%3, colorMap=%4)")
   }
   else if ( event->eventtype == PresentationEvent::EVENT_VIEW_OBJECT_CONTOUR ) {
       commands += QString("presentation_id = medcalc.MakeContour(accessField(%1), viewMode=%2, scalarBarRange=%3, colorMap=%4)")
-        .arg(fieldHandler->id).arg(viewMode).arg(scalarBarRange).arg(colorMap);
+            .arg(fieldHandler->id).arg(viewMode).arg(scalarBarRange).arg(colorMap);
       commands += QString("presentation_id");
   }
       commands += QString("presentation_id");
   }
-  //  else if ( event->eventtype == PresentationEvent::EVENT_VIEW_OBJECT_VECTOR_FIELD ) {
-  //    commands += QString("presentation_id = medcalc.MakeVectorField(accessField(%1), %2)").arg(fieldHandler->id).arg(viewMode);
-  //    commands += QString("presentation_id");
-  //  }
-    else if ( event->eventtype == PresentationEvent::EVENT_VIEW_OBJECT_SLICES ) {
+  else if ( event->eventtype == PresentationEvent::EVENT_VIEW_OBJECT_SLICES ) {
       commands += QString("presentation_id = medcalc.MakeSlices(accessField(%1), viewMode=%2, scalarBarRange=%3, colorMap=%4)")
       commands += QString("presentation_id = medcalc.MakeSlices(accessField(%1), viewMode=%2, scalarBarRange=%3, colorMap=%4)")
-        .arg(fieldHandler->id).arg(viewMode).arg(scalarBarRange).arg(colorMap);
+            .arg(fieldHandler->id).arg(viewMode).arg(scalarBarRange).arg(colorMap);
       commands += QString("presentation_id");
       commands += QString("presentation_id");
-    }
+  }
+  else if ( event->eventtype == PresentationEvent::EVENT_VIEW_OBJECT_VECTOR_FIELD ) {
+      commands += QString("presentation_id = medcalc.MakeVectorField(accessField(%1), viewMode=%2, scalarBarRange=%3, colorMap=%4)")
+          .arg(fieldHandler->id).arg(viewMode).arg(scalarBarRange).arg(colorMap);
+      commands += QString("presentation_id");
+  }
+  else if ( event->eventtype == PresentationEvent::EVENT_VIEW_OBJECT_POINT_SPRITE ) {
+      commands += QString("presentation_id = medcalc.MakePointSprite(accessField(%1), viewMode=%2, scalarBarRange=%3, colorMap=%4)")
+              .arg(fieldHandler->id).arg(viewMode).arg(scalarBarRange).arg(colorMap);
+      commands += QString("presentation_id");
+  }
+
   //  else if ( event->eventtype == PresentationEvent::EVENT_VIEW_OBJECT_DEFLECTION_SHAPE ) {
   //    commands += QString("presentation_id = medcalc.MakeDeflectionShape(accessField(%1), %2)").arg(fieldHandler->id).arg(viewMode);
   //    commands += QString("presentation_id");
   //  else if ( event->eventtype == PresentationEvent::EVENT_VIEW_OBJECT_DEFLECTION_SHAPE ) {
   //    commands += QString("presentation_id = medcalc.MakeDeflectionShape(accessField(%1), %2)").arg(fieldHandler->id).arg(viewMode);
   //    commands += QString("presentation_id");
-  //  }
-  //  else if ( event->eventtype == PresentationEvent::EVENT_VIEW_OBJECT_POINT_SPRITE ) {
-  //    commands += QString("presentation_id = medcalc.MakePointSprite(accessField(%1), %2)").arg(fieldHandler->id).arg(viewMode);
-  //    commands += QString("presentation_id");
-  //  }
 
   // [ABN] using event mechanism for this is awkward? TODO: direct implementation in each
   // dedicated widget helper class?
 
   // [ABN] using event mechanism for this is awkward? TODO: direct implementation in each
   // dedicated widget helper class?
@@ -571,7 +579,7 @@ PresentationController::findOrCreateWidgetHelper(MEDCALC::MEDPresentationManager
   std::map<int, MEDWidgetHelper *>::const_iterator it =_presHelperMap.find(presId);
   if (it != _presHelperMap.end())
     return (*it).second;
   std::map<int, MEDWidgetHelper *>::const_iterator it =_presHelperMap.find(presId);
   if (it != _presHelperMap.end())
     return (*it).second;
-  MEDWidgetHelper * wh;
+  MEDWidgetHelper * wh = 0;
   if (type == MEDPresentationMeshView::TYPE_NAME)
     wh = new MEDWidgetHelperMeshView(this, _presManager, presId, name, _widgetPresentationParameters);
   else if (type == MEDPresentationScalarMap::TYPE_NAME)
   if (type == MEDPresentationMeshView::TYPE_NAME)
     wh = new MEDWidgetHelperMeshView(this, _presManager, presId, name, _widgetPresentationParameters);
   else if (type == MEDPresentationScalarMap::TYPE_NAME)
@@ -579,10 +587,15 @@ PresentationController::findOrCreateWidgetHelper(MEDCALC::MEDPresentationManager
   else if (type == MEDPresentationContour::TYPE_NAME)
     wh = new MEDWidgetHelperContour(this, _presManager, presId, name, _widgetPresentationParameters);
   else if (type == MEDPresentationSlices::TYPE_NAME)
   else if (type == MEDPresentationContour::TYPE_NAME)
     wh = new MEDWidgetHelperContour(this, _presManager, presId, name, _widgetPresentationParameters);
   else if (type == MEDPresentationSlices::TYPE_NAME)
-      wh = new MEDWidgetHelperSlices(this, _presManager, presId, name, _widgetPresentationParameters);
+    wh = new MEDWidgetHelperSlices(this, _presManager, presId, name, _widgetPresentationParameters);
+  else if (type == MEDPresentationVectorField::TYPE_NAME)
+    wh = new MEDWidgetHelperVectorField(this, _presManager, presId, name, _widgetPresentationParameters);
+  else if (type == MEDPresentationPointSprite::TYPE_NAME)
+    wh = new MEDWidgetHelperPointSprite(this, _presManager, presId, name, _widgetPresentationParameters);
   else
     {
   else
     {
-      STDLOG("findOrCreateWidgetHelper(): NOT IMPLEMENTED !!!");
+      const char * msg ="findOrCreateWidgetHelper(): NOT IMPLEMENTED !!!";
+      STDLOG(msg);
     }
   _presHelperMap[presId] = wh;
   return wh;
     }
   _presHelperMap[presId] = wh;
   return wh;
index 648ebf102144c7553a6b88cfd1d10e3976abbc46..92b8dc4f9691e997c7f985f9b8fb564cca4b9750 100644 (file)
@@ -12,6 +12,7 @@ typedef struct {
     EVENT_VIEW_OBJECT_SCALAR_MAP,
     EVENT_VIEW_OBJECT_SLICES,
     EVENT_VIEW_OBJECT_VECTOR_FIELD,
     EVENT_VIEW_OBJECT_SCALAR_MAP,
     EVENT_VIEW_OBJECT_SLICES,
     EVENT_VIEW_OBJECT_VECTOR_FIELD,
+
     EVENT_DELETE_PRESENTATION,
 
     EVENT_CHANGE_COMPONENT,
     EVENT_DELETE_PRESENTATION,
 
     EVENT_CHANGE_COMPONENT,
@@ -19,7 +20,9 @@ typedef struct {
     EVENT_CHANGE_TIME_RANGE,
 
     EVENT_CHANGE_MESH_MODE,
     EVENT_CHANGE_TIME_RANGE,
 
     EVENT_CHANGE_MESH_MODE,
+
     EVENT_CHANGE_NB_CONTOUR,
     EVENT_CHANGE_NB_CONTOUR,
+
     EVENT_CHANGE_SLICE_ORIENTATION,
     EVENT_CHANGE_NB_SLICES
   };
     EVENT_CHANGE_SLICE_ORIENTATION,
     EVENT_CHANGE_NB_SLICES
   };
diff --git a/src/MEDCalc/test/tui/point_sprite.py b/src/MEDCalc/test/tui/point_sprite.py
new file mode 100644 (file)
index 0000000..5a86b51
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright (C) 2016  CEA/DEN, EDF R&D
+#
+# 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, or (at your option) any later version.
+#
+# 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
+#
+
+import os
+from time import sleep
+
+import medcalc
+medcalc.medconsole.setConsoleGlobals(globals())
+import MEDCALC
+from medcalc.medconsole import accessField
+
+from medcalc_testutils import GetMEDFileDirTUI
+
+if 1:
+  datafile = os.path.join(GetMEDFileDirTUI(), "smooth_surface_and_field.med")
+  source_id = medcalc.LoadDataSource(datafile)
+  presentation_id = medcalc.MakePointSprite(accessField(0), MEDCALC.VIEW_MODE_REPLACE, colorMap=MEDCALC.COLOR_MAP_BLUE_TO_RED_RAINBOW)
+else:
+  datafile = os.path.join(GetMEDFileDirTUI(), "agitateur.med")
+  source_id = medcalc.LoadDataSource(datafile)
+  presentation_id = medcalc.MakePointSprite(accessField(55), MEDCALC.VIEW_MODE_REPLACE, colorMap=MEDCALC.COLOR_MAP_BLUE_TO_RED_RAINBOW)
+  
+sleep(1)
+medcalc.RemovePresentation(presentation_id)
index 413a3d11854d655747fa437a51d11a7b8670dde7..e3edd10ba2475b489068267c044325fcd311c6f1 100644 (file)
@@ -30,7 +30,9 @@ from medcalc_testutils import GetMEDFileDirTUI
 datafile = os.path.join(GetMEDFileDirTUI(), "agitateur.med")
 source_id = medcalc.LoadDataSource(datafile)
 
 datafile = os.path.join(GetMEDFileDirTUI(), "agitateur.med")
 source_id = medcalc.LoadDataSource(datafile)
 
-presentation_id = medcalc.MakeSlices(accessField(0), MEDCALC.VIEW_MODE_REPLACE, colorMap=MEDCALC.COLOR_MAP_BLUE_TO_RED_RAINBOW)
+presentation_id = medcalc.MakeSlices(accessField(0), MEDCALC.VIEW_MODE_REPLACE, 
+                                     colorMap=MEDCALC.COLOR_MAP_BLUE_TO_RED_RAINBOW,
+                                     sliceOrientation=MEDCALC.SLICE_NORMAL_TO_Z)  # normal to Z to see something!
 sleep(1)
 medcalc.RemovePresentation(presentation_id)
 sleep(1)
 sleep(1)
 medcalc.RemovePresentation(presentation_id)
 sleep(1)
index e2cad1b1ebb314b092fd81af716cf5bc2667f8b8..06c61c4d6795a114740de473236bf6ea989ba7c1 100644 (file)
@@ -25,4 +25,7 @@ SET(TEST_NAMES
 #  contour
 #  slices
 #  mesh_view
 #  contour
 #  slices
 #  mesh_view
+#  point_sprite
+#  vector_field
+#  deflection_shape
 )
 )
diff --git a/src/MEDCalc/test/tui/vector_field.py b/src/MEDCalc/test/tui/vector_field.py
new file mode 100644 (file)
index 0000000..de17aa5
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright (C) 2016  CEA/DEN, EDF R&D
+#
+# 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, or (at your option) any later version.
+#
+# 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
+#
+
+import os
+from time import sleep
+
+import medcalc
+medcalc.medconsole.setConsoleGlobals(globals())
+import MEDCALC
+from medcalc.medconsole import accessField
+
+from medcalc_testutils import GetMEDFileDirTUI
+
+datafile = os.path.join(GetMEDFileDirTUI(), "agitateur.med")
+source_id = medcalc.LoadDataSource(datafile)
+
+# Field 55 = VITESSE_ELEM_DOM (ON_CELLS)
+presentation_id = medcalc.MakeVectorField(accessField(57), viewMode=MEDCALC.VIEW_MODE_REPLACE, 
+                                          colorMap=MEDCALC.COLOR_MAP_BLUE_TO_RED_RAINBOW,
+                                          scalarBarRange=MEDCALC.SCALAR_BAR_CURRENT_TIMESTEP
+                                          )
+sleep(1)
+medcalc.RemovePresentation(presentation_id)
+sleep(1)
index a409f477b50f80ee420c702f8a5e31dbb558562f..ee461af8a9484f37c35a75f6a9df2dbe44ffb7ff 100644 (file)
@@ -42,21 +42,29 @@ from medio import LoadImageAsDataSource
 from medpresentation import MakeMeshView
 from medpresentation import MakeScalarMap
 from medpresentation import MakeContour
 from medpresentation import MakeMeshView
 from medpresentation import MakeScalarMap
 from medpresentation import MakeContour
-#from medpresentation import MakeVectorField
+from medpresentation import MakeVectorField
 from medpresentation import MakeSlices
 from medpresentation import MakeSlices
-#from medpresentation import MakeDeflectionShape
-#from medpresentation import MakePointSprite
+from medpresentation import MakePointSprite
 from medpresentation import RemovePresentation
 from medpresentation import RemovePresentation
+#from medpresentation import MakeDeflectionShape
 
 from medpresentation import GetMeshViewParameters
 from medpresentation import GetScalarMapParameters
 from medpresentation import GetContourParameters
 from medpresentation import GetSlicesParameters
 
 from medpresentation import GetMeshViewParameters
 from medpresentation import GetScalarMapParameters
 from medpresentation import GetContourParameters
 from medpresentation import GetSlicesParameters
+from medpresentation import GetPointSpriteParameters
+from medpresentation import GetVectorFieldParameters
+#from medpresentation import GetDeflectionShapeParameters
 
 from medpresentation import UpdateMeshView
 from medpresentation import UpdateScalarMap
 from medpresentation import UpdateContour
 from medpresentation import UpdateSlices
 
 from medpresentation import UpdateMeshView
 from medpresentation import UpdateScalarMap
 from medpresentation import UpdateContour
 from medpresentation import UpdateSlices
+from medpresentation import UpdateVectorField
+from medpresentation import UpdatePointSprite
+#from medpresentation import UpdateDeflectionShape
+
+from medpresentation import SetDefaultScaleFactor, ComputeCellAverageSize, GetDomainCenter
 
 # Console commands
 import medconsole
 
 # Console commands
 import medconsole
index c1da528a41086963d91bab10b69523680ea5a985..40cad1ece84c9a55666e9f646b1c24e239430c07 100644 (file)
@@ -70,17 +70,25 @@ def MakeContour(proxy,
     notifyGui_error("An error occured while creating the contour:\n" + e.details.text)
     raise Exception(e.details.text)
 
     notifyGui_error("An error occured while creating the contour:\n" + e.details.text)
     raise Exception(e.details.text)
 
-##
-#
-#def MakeVectorField(proxy,
-#                    viewMode=MEDCALC.VIEW_MODE_DEFAULT
-#                    ):
-#  params = MEDCALC.VectorFieldParameters(proxy.id, viewMode)
-#  presentation_id = __manager.makeVectorField(params)
-#  notifyGui_addPresentation(proxy.id, presentation_id)
-#  return presentation_id
-##
 #
 #
+
+def MakeVectorField(proxy,
+                  viewMode=MEDCALC.VIEW_MODE_DEFAULT,
+                  displayedComponent=MEDCALC.DISPLAY_DEFAULT,
+                  scalarBarRange=MEDCALC.SCALAR_BAR_RANGE_DEFAULT,
+                  colorMap=MEDCALC.COLOR_MAP_DEFAULT
+                  ):
+  # Create the presentation instance in CORBA engine
+  # The engine in turn creates the ParaView pipeline elements
+  params = MEDCALC.VectorFieldParameters(proxy.id, displayedComponent, scalarBarRange, colorMap)
+  try:
+    presentation_id = __manager.makeVectorField(params, viewMode)
+    notifyGui_addPresentation(proxy.id, presentation_id)
+    return presentation_id
+  except SALOME.SALOME_Exception as e:
+    notifyGui_error("An error occured while creating the vector field:\n" + e.details.text)
+    raise Exception(e.details.text)
+
 def MakeSlices(proxy,
                 viewMode=MEDCALC.VIEW_MODE_DEFAULT,
                 displayedComponent=MEDCALC.DISPLAY_DEFAULT,
 def MakeSlices(proxy,
                 viewMode=MEDCALC.VIEW_MODE_DEFAULT,
                 displayedComponent=MEDCALC.DISPLAY_DEFAULT,
@@ -110,17 +118,22 @@ def MakeSlices(proxy,
 #  return presentation_id
 ##
 #
 #  return presentation_id
 ##
 #
-#def MakePointSprite(proxy,
-#                    viewMode=MEDCALC.VIEW_MODE_DEFAULT,
-#                    displayedComponent=MEDCALC.DISPLAY_DEFAULT,
-#                    scalarBarRange=MEDCALC.SCALAR_BAR_RANGE_DEFAULT,
-#                    colorMap=MEDCALC.COLOR_MAP_DEFAULT,
-#                    ):
-#  params = MEDCALC.PointSpriteParameters(proxy.id, viewMode, displayedComponent, scalarBarRange, colorMap)
-#  presentation_id = __manager.makePointSprite(params)
-#  notifyGui_addPresentation(proxy.id, presentation_id)
-#  return presentation_id
-#
+def MakePointSprite(proxy,
+                  viewMode=MEDCALC.VIEW_MODE_DEFAULT,
+                  displayedComponent=MEDCALC.DISPLAY_DEFAULT,
+                  scalarBarRange=MEDCALC.SCALAR_BAR_RANGE_DEFAULT,
+                  colorMap=MEDCALC.COLOR_MAP_DEFAULT
+                  ):
+  # Create the presentation instance in CORBA engine
+  # The engine in turn creates the ParaView pipeline elements
+  params = MEDCALC.PointSpriteParameters(proxy.id, displayedComponent, scalarBarRange, colorMap)
+  try:
+    presentation_id = __manager.makePointSprite(params, viewMode)
+    notifyGui_addPresentation(proxy.id, presentation_id)
+    return presentation_id
+  except SALOME.SALOME_Exception as e:
+    notifyGui_error("An error occured while creating the point sprite:\n" + e.details.text)
+    raise Exception(e.details.text)
 
 def RemovePresentation(presentation_id):
   ok = __manager.removePresentation(presentation_id)
 
 def RemovePresentation(presentation_id):
   ok = __manager.removePresentation(presentation_id)
@@ -128,20 +141,131 @@ def RemovePresentation(presentation_id):
     notifyGui_removePresentation(presentation_id)
 #
 
     notifyGui_removePresentation(presentation_id)
 #
 
-def GetGENERICParameters(tag, presentation_id):
+def __GetGENERICParameters(tag, presentation_id):
   exec "params = __manager.get%sParameters(presentation_id)" % tag
   return params
 
   exec "params = __manager.get%sParameters(presentation_id)" % tag
   return params
 
-GetMeshViewParameters = lambda pres_id: GetGENERICParameters("MeshView", pres_id)
-GetScalarMapParameters = lambda pres_id: GetGENERICParameters("ScalarMap", pres_id)
-GetContourParameters = lambda pres_id: GetGENERICParameters("Contour", pres_id)
-GetSlicesParameters = lambda pres_id: GetGENERICParameters("Slices", pres_id)
+GetMeshViewParameters = lambda pres_id: __GetGENERICParameters("MeshView", pres_id)
+GetScalarMapParameters = lambda pres_id: __GetGENERICParameters("ScalarMap", pres_id)
+GetContourParameters = lambda pres_id: __GetGENERICParameters("Contour", pres_id)
+GetSlicesParameters = lambda pres_id: __GetGENERICParameters("Slices", pres_id)
+GetPointSpriteParameters = lambda pres_id: __GetGENERICParameters("PointSprite", pres_id)
+GetVectorFieldParameters = lambda pres_id: __GetGENERICParameters("VectorField", pres_id)
+#GetDeflectionShapeParameters = lambda pres_id: __GetGENERICParameters("DeflectionShape", pres_id)
 
 
 
 
-def UpdateGENERIC(tag, presentation_id, params):
+def __UpdateGENERIC(tag, presentation_id, params):
   exec "__manager.update%s(presentation_id, params)" % tag
 
   exec "__manager.update%s(presentation_id, params)" % tag
 
-UpdateMeshView = lambda pres_id, params: UpdateGENERIC("MeshView", pres_id, params)
-UpdateScalarMap = lambda pres_id, params: UpdateGENERIC("ScalarMap", pres_id, params)
-UpdateContour = lambda pres_id, params: UpdateGENERIC("Contour", pres_id, params)
-UpdateSlices = lambda pres_id, params: UpdateGENERIC("Slices", pres_id, params)
+UpdateMeshView = lambda pres_id, params: __UpdateGENERIC("MeshView", pres_id, params)
+UpdateScalarMap = lambda pres_id, params: __UpdateGENERIC("ScalarMap", pres_id, params)
+UpdateContour = lambda pres_id, params: __UpdateGENERIC("Contour", pres_id, params)
+UpdateSlices = lambda pres_id, params: __UpdateGENERIC("Slices", pres_id, params)
+UpdateVectorField = lambda pres_id, params: __UpdateGENERIC("VectorField", pres_id, params)
+UpdatePointSprite = lambda pres_id, params: __UpdateGENERIC("PointSprite", pres_id, params)
+#UpdateDeflectionShape = lambda pres_id, params: __UpdateGENERIC("DeflectionShape", pres_id, params)
+
+def ComputeCellAverageSize(obj):
+  """
+  @return the average cell size
+  """
+  bb, nCells = obj.GetDataInformation().GetBounds(), obj.GetDataInformation().GetNumberOfCells()
+  bb = zip(bb[::2], bb[1::2])
+  deltas = [x[1]-x[0] for x in bb]
+  vol = reduce(lambda x,y:x*y, deltas, 1.0) 
+  cellSize = (vol/nCells)**(1.0/3.0)  # necessarily 3D in ParaView
+  return cellSize
+
+def GetDomainCenter(obj):
+  """
+  @return the center of the domain as the central point of the bounding box
+  """
+  bb = obj.GetDataInformation().GetBounds()
+  bb = zip(bb[::2], bb[1::2])
+  mids = [x[0] + 0.5*(x[1]-x[0]) for x in bb]
+  return mids
+
+# Taken from paraview.simple from CEA ParaView's version:
+def SetDefaultScaleFactor(active=None):
+    """Provides a good display to the bounding box of the mesh and min / max of the field.
+    This method available for filters: Warp By Vector, Glyph and Tensor Glyph"""
+    if not active:
+        active = GetActiveSource()
+    if not active:
+        return
+    name = active.__class__.__name__
+    if (name == 'WarpByVector'  or name == 'TensorGlyph') and hasattr(active, 'ScaleFactor'):
+      import math
+      datainfo = active.GetProperty("Input").SMProperty.GetProxy(0).GetDataInformation()
+      if not datainfo:
+          active.ScaleFactor = 1.0
+          return
+      nbcells = datainfo.GetNumberOfCells()
+      nbpoints = datainfo.GetNumberOfPoints()
+      nbelem = nbcells
+      if nbelem == 0:
+          nbelem = nbpoints
+      abounds = datainfo.GetBounds()
+      volume = 1
+      vol = 0
+      idim = 0
+      i = 0
+      eps = 1.0e-38
+      while i < 6 :
+          vol = math.fabs( abounds[i+1] - abounds[i] )
+          if vol > 0:
+            idim += 1
+            volume *= vol
+          i += 2
+      if nbelem == 0 or math.fabs(idim) < eps:
+          active.ScaleFactor = 0.0
+          return
+      volume /= nbelem
+      scalefactor = pow( volume, 1.0 / idim )
+      maximum = 1.0
+      property = active.GetProperty('ScaleFactor')
+      domain = None
+      if property.GetDomain('vector_range').__class__.__name__ == 'vtkSMArrayRangeDomain':
+          domain = property.GetDomain('vector_range')
+      if property.GetDomain('tensor_range').__class__.__name__ == 'vtkSMArrayRangeDomain':
+          domain = property.GetDomain('tensor_range')
+      if not domain is None:
+          if domain.GetMaximumExists(3):
+            maximum = domain.GetMaximum(3)
+      if math.fabs(maximum) > eps:
+          scalefactor /= maximum
+      active.ScaleFactor = scalefactor
+      return
+    if name == 'Glyph' and hasattr(active, 'ScaleFactor') and hasattr(active, 'UseCellsCenter') and hasattr(active, 'ScaleMode'):
+      import math
+      scaledextent = 1.0
+      property = active.GetProperty('ScaleFactor')
+      bounds_domain = property.GetDomain('bounds')
+      if bounds_domain.__class__.__name__ == 'vtkSMBoundsDomain':
+          if bounds_domain.GetMaximumExists(0):
+            scaledextent = bounds_domain.GetMaximum(0)
+      usecellscenter = active.GetProperty('UseCellsCenter').GetData()
+      sdomain = "cells_"
+      if usecellscenter == 0:
+          sdomain = "points_"
+      divisor = 1.0
+      scalemode_domain = active.GetProperty('ScaleMode')
+      scalemode = scalemode_domain.ConvertValue(scalemode_domain.GetData())
+      if scalemode == 0:
+          sdomain += "scalar_range"
+          domain = property.GetDomain(sdomain)
+          if domain.__class__.__name__ == 'vtkSMArrayRangeDomain':
+            if domain.GetMaximumExists(0):
+                divisor = domain.GetMaximum(0)
+      if scalemode == 1 or scalemode == 2:
+          sdomain += "vector_range"
+          domain = property.GetDomain(sdomain)
+          if domain.__class__.__name__ == 'vtkSMArrayRangeDomain':
+            if domain.GetMaximumExists(3):
+                divisor = domain.GetMaximum(3)
+      divisor = math.fabs(divisor)
+      if divisor < 0.000000001:
+          divisor = 1
+      scalefactor = scaledextent / divisor 
+      active.ScaleFactor = scalefactor
+      return