src/CONVERTOR/VISU_Convertor_impl.hxx

Go to the documentation of this file.
00001 //  SALOME VTKViewer : build VTK viewer into Salome desktop
00002 //
00003 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
00004 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
00005 // 
00006 //  This library is free software; you can redistribute it and/or 
00007 //  modify it under the terms of the GNU Lesser General Public 
00008 //  License as published by the Free Software Foundation; either 
00009 //  version 2.1 of the License. 
00010 // 
00011 //  This library is distributed in the hope that it will be useful, 
00012 //  but WITHOUT ANY WARRANTY; without even the implied warranty of 
00013 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
00014 //  Lesser General Public License for more details. 
00015 // 
00016 //  You should have received a copy of the GNU Lesser General Public 
00017 //  License along with this library; if not, write to the Free Software 
00018 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
00019 // 
00020 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
00021 //
00022 //
00023 //
00024 //  File   : 
00025 //  Author : 
00026 //  Module : SALOME
00027 //  $Header: /home/server/cvs/VISU/VISU_SRC/src/CONVERTOR/VISU_Convertor_impl.hxx,v 1.8 2006/06/01 11:36:04 jfa Exp $
00028 
00029 #ifndef VISU_Convertor_impl_HeaderFile
00030 #define VISU_Convertor_impl_HeaderFile
00031 
00032 #include <vtkSmartPointer.h>
00033 
00034 #include <boost/tuple/tuple.hpp>
00035 
00036 class vtkCell;
00037 class vtkPoints;
00038 class vtkUnstructuredGrid;
00039 class VTKViewer_AppendFilter;
00040 class VISU_MergeFilter;
00041 
00042 #include "VISU_Convertor.hxx"
00043 #include "MED_SliceArray.hxx"
00044 
00045 #ifndef VISU_ENABLE_QUADRATIC
00046 #define VISU_ENABLE_QUADRATIC
00047 #define VISU_USE_VTK_QUADRATIC
00048 #endif
00049 
00050 namespace VISU
00051 {
00053   enum EGeometry {ePOINT1=1, eSEG2=102, eSEG3=103, eTRIA3=203,
00054             eQUAD4=204, eTRIA6=206,eQUAD8=208, eTETRA4=304,
00055             ePYRA5=305, ePENTA6=306, eHEXA8=308, eTETRA10=310, 
00056             ePYRA13=313, ePENTA15=315, eHEXA20=320, 
00057             ePOLYGONE=400, ePOLYEDRE=500, eNONE=-1};
00058 
00060   vtkIdType
00061   VISUGeom2NbNodes(EGeometry theGeom);
00062 
00064   vtkIdType
00065   VISUGeom2VTK(EGeometry theGeom);
00066 
00067   //---------------------------------------------------------------
00068   using MED::TCSlice;
00069   using MED::TSlice;
00070 
00071   typedef vtkUnstructuredGrid TDataSet;
00072 
00073   typedef vtkSmartPointer<TDataSet> TVTKSource;
00074   typedef vtkSmartPointer<vtkPoints> TVTKPoints;
00075   typedef vtkSmartPointer<VISU_MergeFilter> TVTKMergeFilter;
00076 
00077   typedef vtkSmartPointer<VTKViewer_AppendFilter> TVTKAppendFilter;
00078 
00079   typedef vtkFloatingPointType TCoord;
00080 
00081   //---------------------------------------------------------------
00083   struct TIsVTKDone: virtual TBaseStructure
00084   {
00085     TIsVTKDone();
00086     bool myIsDone; 
00087     bool myIsVTKDone; 
00088   };
00089 
00090   
00091   //---------------------------------------------------------------
00093   struct TSizeCounter: virtual TIsVTKDone
00094   {
00095     TSizeCounter();
00096     vtkIdType myNbCells; 
00097     vtkIdType myCellsSize; 
00098   };
00099 
00100 
00101   //---------------------------------------------------------------
00103   class TSource: public virtual TSizeCounter
00104   {
00105   protected:
00106     mutable TVTKSource mySource;
00107   public:
00108     TSource();
00109 
00111     const TVTKSource& 
00112     GetSource() const;
00113 
00115     virtual
00116     TVTKOutput* 
00117     GetVTKOutput();
00118   };
00119 
00120 
00121   //---------------------------------------------------------------
00123 
00126   class TAppendFilter: public virtual TIsVTKDone,
00127                  public virtual TIDMapper
00128   {
00129   protected:
00130     mutable TVTKAppendFilter myFilter;
00131   public:
00132     TAppendFilter();
00133 
00135     const TVTKAppendFilter& 
00136     GetFilter() const;
00137 
00139     virtual
00140     TVTKOutput* 
00141     GetVTKOutput();
00142   };
00143 
00144 
00145   //---------------------------------------------------------------
00147 
00150   class TMergeFilter: public virtual TIsVTKDone,
00151                 public virtual TIDMapper
00152   {
00153   protected:
00154     mutable TVTKMergeFilter myFilter;
00155   public:
00156     TMergeFilter();
00157 
00159     const TVTKMergeFilter& 
00160     GetFilter() const;
00161 
00163     virtual
00164     TVTKOutput* 
00165     GetVTKOutput();
00166   };
00167 
00168 
00169   //---------------------------------------------------------------
00170   typedef TVector<TCoord> TCoordArray;
00171   typedef TSlice<TCoordArray> TCoordSlice;
00172   typedef TCSlice<TCoordArray> TCCoordSlice;
00173 
00175   class TPointCoords: public virtual TBaseStructure
00176   {
00177   protected:
00178     vtkIdType myDim; 
00179     vtkIdType myNbPoints; 
00180 
00182 
00186     TCoordArray myCoord; 
00187     TVTKPoints myPoints; 
00188 
00189   public:
00190     TPointCoords();
00191 
00193     void
00194     Init(vtkIdType theNbPoints,
00195       vtkIdType theDim);
00196 
00198     TCCoordSlice
00199     GetCoordSlice(vtkIdType theNodeId) const;
00200 
00202     TCoordSlice 
00203     GetCoordSlice(vtkIdType theNodeId);
00204 
00205     vtkIdType
00206     GetNbPoints() const { return myNbPoints; }
00207 
00208     vtkIdType
00209     GetDim() const { return myDim; }
00210 
00211     vtkIdType
00212     size() const { return GetNbPoints(); }
00213 
00214     const TVTKPoints&
00215     GetPoints() const { return myPoints;}
00216   };
00217   typedef SharedPtr<TPointCoords> PPointCoords;
00218 
00219 
00220   //---------------------------------------------------------------
00221   typedef TVector<vtkIdType> TVectorID;
00222   typedef std::map<vtkIdType,vtkIdType> TObj2VTKID;
00223 
00225 
00229   class TNamedPointCoords: public virtual TPointCoords
00230   {
00231   protected:
00232     typedef TVector<std::string> TPointsDim;
00233     TPointsDim myPointsDim; 
00234     TVectorID myVectorID; 
00235     TObj2VTKID myObj2VTKID; 
00236 
00237   public:
00238 
00240     void
00241     Init(vtkIdType theNbPoints,
00242       vtkIdType theDim,
00243       const TVectorID& theVectorID = TVectorID());
00244     
00246     std::string&
00247     GetName(vtkIdType theDim);
00248     
00250     const std::string&
00251     GetName(vtkIdType theDim) const;
00252 
00254     virtual
00255     vtkIdType
00256     GetObjID(vtkIdType theID) const;
00257 
00259     virtual
00260     vtkIdType
00261     GetVTKID(vtkIdType theID) const;
00262 
00264     virtual
00265     std::string 
00266     GetNodeName(vtkIdType theObjID) const;
00267   };
00268   typedef SharedPtr<TNamedPointCoords> PNamedPointCoords;
00269 
00270 
00271   //---------------------------------------------------------------
00273   struct TMeshImpl: virtual TMesh, 
00274               virtual TIsVTKDone
00275   {
00276     PNamedPointCoords myNamedPointCoords; 
00277 
00278     TVTKPoints myPoints; 
00279     vtkIdType myNbPoints; 
00280 
00281     TMeshImpl();
00282   };
00283   typedef SharedPtr<TMeshImpl> PMeshImpl;
00284 
00285 
00286   //---------------------------------------------------------------
00287   typedef TVector<vtkIdType> TSubMeshID;
00288   typedef enum {eRemoveAll, eAddAll, eAddPart, eNone} ESubMeshStatus; 
00289 
00291   struct TSubProfileImpl: virtual TSubProfile, 
00292                  virtual TSource
00293   {
00294     TSubProfileImpl();
00295 
00296     EGeometry myGeom; 
00297     std::string myName; 
00298 
00300     virtual 
00301     vtkIdType 
00302     GetElemObjID(int theVtkI) const;
00303 
00305 
00309     ESubMeshStatus myStatus; 
00310     TSubMeshID mySubMeshID; 
00311   };
00312   typedef SharedPtr<TSubProfileImpl> PSubProfileImpl;
00313 
00314 
00315   //---------------------------------------------------------------
00316   struct TMeshOnEntityImpl;
00317 
00318   typedef std::map<vtkIdType,vtkIdType> TID2ID;
00319   typedef TVector<PSubProfileImpl> TSubProfileArr;
00320   typedef std::map<EGeometry,PSubProfileImpl> TGeom2SubProfile;
00321 
00323   struct TProfileImpl: virtual TProfile, 
00324                  virtual TAppendFilter
00325   {
00326     TProfileImpl();
00327     bool myIsAll; 
00328    
00330     virtual 
00331     vtkIdType 
00332     GetNodeObjID(vtkIdType theID) const;
00333 
00335     virtual 
00336     vtkIdType 
00337     GetNodeVTKID(vtkIdType theID) const;
00338 
00340     virtual 
00341     vtkFloatingPointType*  
00342     GetNodeCoord(vtkIdType theObjID);
00343 
00345     virtual 
00346     vtkIdType 
00347     GetElemObjID(vtkIdType theID) const;
00348 
00350     virtual 
00351     vtkIdType 
00352     GetElemVTKID(vtkIdType theID) const;
00353 
00355     virtual
00356     vtkCell* 
00357     GetElemCell(vtkIdType theObjID);
00358     
00360     virtual
00361     TVTKOutput* 
00362     GetVTKOutput();
00363 
00365     virtual
00366     std::string 
00367     GetNodeName(vtkIdType theObjID) const;
00368 
00370     virtual
00371     std::string 
00372     GetElemName(vtkIdType theObjID) const;
00373 
00374     TID2ID myElemObj2VTKID; 
00375     TSubProfileArr mySubProfileArr; 
00376     PNamedPointCoords myNamedPointCoords; 
00377     TMeshOnEntityImpl* myMeshOnEntity; //<! Keeps backward reference to corresponding MED ENTITY mesh
00378 
00379     TSource mySource; 
00380     TGeom2SubProfile myGeom2SubProfile; 
00381   };
00382   typedef SharedPtr<TProfileImpl> PProfileImpl;
00383 
00384 
00385   //---------------------------------------------------------------
00387   struct TIDMapperFilter: virtual TMergeFilter
00388   {
00389     TAppendFilter myIDMapper; 
00390     TSource mySource; 
00391 
00393     virtual 
00394     vtkIdType 
00395     GetNodeObjID(vtkIdType theID) const;
00396 
00398     virtual 
00399     vtkIdType 
00400     GetNodeVTKID(vtkIdType theID) const;
00401 
00403     virtual 
00404     vtkFloatingPointType*  
00405     GetNodeCoord(vtkIdType theObjID);
00406 
00408     virtual 
00409     vtkIdType 
00410     GetElemObjID(vtkIdType theID) const;
00411 
00413     virtual 
00414     vtkIdType 
00415     GetElemVTKID(vtkIdType theID) const;
00416 
00418     virtual
00419     vtkCell* 
00420     GetElemCell(vtkIdType theObjID);
00421     
00423     virtual
00424     TVTKOutput* 
00425     GetVTKOutput();
00426   };
00427   typedef SharedPtr<TIDMapperFilter> PIDMapperFilter;
00428 
00429 
00430   //---------------------------------------------------------------
00431   struct TGaussImpl;
00432   typedef SharedPtr<TGaussImpl> PGaussImpl;
00433 
00435   struct TGaussImpl: virtual TGauss
00436   {
00437     EGeometry myGeom; 
00438     std::string myName; 
00439     vtkIdType myNbPoints; //<! Keeps number of points for the MED GAUSS entity
00440 
00442     virtual
00443     void
00444     LessThan(const PGaussImpl& theGauss,
00445           bool& theResult) const;
00446   };
00447 
00448 
00449   //---------------------------------------------------------------
00451   struct TGaussSubMeshImpl: virtual TGaussSubMesh, 
00452                    virtual TSource
00453   {
00454     TGaussSubMeshImpl();
00455 
00457     virtual
00458     TGaussPointID
00459     GetObjID(vtkIdType theID,
00460           vtkIdType theStartID) const;
00461     
00462     PGaussImpl myGauss; //<! Keep reference to corresponding TGauss structure
00463 
00465 
00469     ESubMeshStatus myStatus;
00470 
00471     TPointCoords myPointCoords; 
00472   };
00473   typedef SharedPtr<TGaussSubMeshImpl> PGaussSubMeshImpl;
00474 
00475 
00476   //---------------------------------------------------------------
00477   typedef TVector<PGaussSubMeshImpl> TGaussSubMeshArr;
00478   typedef std::map<EGeometry,PGaussSubMeshImpl> TGeom2GaussSubMesh;
00479 
00481   struct TGaussMeshImpl: virtual TGaussMesh, 
00482                 virtual TAppendFilter
00483   {
00484     TGaussMeshImpl();
00485 
00487     virtual
00488     TGaussPointID
00489     GetObjID(vtkIdType theID) const;
00490 
00492     virtual
00493     TVTKOutput* 
00494     GetVTKOutput();
00495 
00497     virtual 
00498     TNamedIDMapper*
00499     GetParent();
00500 
00501     TSource mySource; 
00502     TNamedIDMapper* myParent; 
00503     TGaussSubMeshArr myGaussSubMeshArr; 
00504     TGeom2GaussSubMesh myGeom2GaussSubMesh; 
00505   };
00506   typedef SharedPtr<TGaussMeshImpl> PGaussMeshImpl;
00507 
00508 
00509   //---------------------------------------------------------------
00511   struct TGaussPtsIDFilter: virtual TIDMapperFilter,
00512                    virtual TGaussPtsIDMapper
00513   { 
00514     PGaussPtsIDMapper myGaussPtsIDMapper;
00515 
00517     virtual 
00518     TGaussPointID 
00519     GetObjID(vtkIdType theID) const;
00520 
00522     virtual 
00523     TNamedIDMapper*
00524     GetParent();
00525   };
00526   typedef SharedPtr<TGaussPtsIDFilter> PGaussPtsIDFilter;
00527 
00528 
00529   //---------------------------------------------------------------
00530   typedef TVector<vtkIdType> TConnect;
00531   typedef TVector<TConnect> TCell2Connect;
00532 
00534   struct TSubMeshImpl: virtual TSource
00535   {
00536     
00538     virtual 
00539     vtkIdType 
00540     GetElemObjID(vtkIdType theID) const;
00541 
00543     virtual
00544     std::string 
00545     GetElemName(vtkIdType theObjID) const;
00546 
00547     vtkIdType myStartID;
00548     TCell2Connect myCell2Connect; 
00549   };
00550   typedef SharedPtr<TSubMeshImpl> PSubMeshImpl;
00551 
00552 
00553   //---------------------------------------------------------------
00554   typedef std::map<EGeometry,PSubMeshImpl> TGeom2SubMesh;
00555   typedef TVector<PSubMeshImpl> TSubMeshArr;
00556 
00558   struct TMeshOnEntityImpl: virtual TMeshOnEntity, 
00559                    virtual TAppendFilter, 
00560                    virtual TSizeCounter
00561   {
00563     virtual 
00564     vtkIdType 
00565     GetNodeVTKID(vtkIdType theID) const;
00566 
00568     virtual 
00569     vtkIdType 
00570     GetNodeObjID(vtkIdType theID) const;
00571 
00573     virtual 
00574     vtkIdType 
00575     GetElemVTKID(vtkIdType theID) const;
00576 
00578     virtual 
00579     vtkIdType 
00580     GetElemObjID(vtkIdType theID) const;
00581 
00583     virtual
00584     std::string 
00585     GetNodeName(vtkIdType theObjID) const;
00586 
00588     virtual
00589     std::string 
00590     GetElemName(vtkIdType theObjID) const;
00591 
00592     TID2ID myElemObj2VTKID; 
00593     TSubMeshArr mySubMeshArr; 
00594     PNamedPointCoords myNamedPointCoords; 
00595 
00596     TGeom2SubMesh myGeom2SubMesh; 
00597   };
00598   typedef SharedPtr<TMeshOnEntityImpl> PMeshOnEntityImpl;
00599 
00600 
00601   //---------------------------------------------------------------
00602   typedef std::map<EGeometry,TSubMeshID> TGeom2SubMeshID;
00603 
00605   struct TFamilyImpl: virtual TFamily, 
00606                 virtual TSource
00607   {
00609     vtkIdType 
00610     GetNodeObjID(vtkIdType theID) const ;
00611 
00613     virtual 
00614     vtkIdType 
00615     GetNodeVTKID(vtkIdType theID) const ;
00616 
00618     virtual 
00619     vtkIdType 
00620     GetElemVTKID(vtkIdType theID) const;
00621 
00623     virtual 
00624     vtkIdType 
00625     GetElemObjID(vtkIdType theID) const;
00626 
00628     virtual
00629     TVTKOutput* 
00630     GetVTKOutput();
00631 
00632     PNamedPointCoords myNamedPointCoords;  
00633     TID2ID myElemObj2VTKID; 
00634     TSubMeshID myMeshID; 
00635 
00636     TGeom2SubMeshID myGeom2SubMeshID; 
00637   };
00638   typedef SharedPtr<TFamilyImpl> PFamilyImpl;
00639 
00640 
00641   //---------------------------------------------------------------
00642   typedef std::pair<vtkIdType,vtkIdType> TNbASizeCells;
00643   typedef TVector<PFamilyImpl> TFamilyArr;
00644 
00646   struct TGroupImpl: virtual TGroup, 
00647                virtual TAppendFilter
00648   {
00650     TNbASizeCells 
00651     GetNbASizeCells() const;
00652 
00654     virtual 
00655     vtkIdType 
00656     GetElemVTKID(vtkIdType theID) const;
00657 
00659     virtual 
00660     vtkIdType 
00661     GetElemObjID(vtkIdType theID) const;
00662 
00664     virtual 
00665     vtkIdType 
00666     GetNodeObjID(vtkIdType theID) const;
00667 
00669     virtual 
00670     vtkIdType 
00671     GetNodeVTKID(vtkIdType theID) const;
00672 
00673     TID2ID myElemObj2VTKID; 
00674     TFamilyArr myFamilyArr; 
00675     PNamedPointCoords myNamedPointCoords; 
00676   };
00677   typedef SharedPtr<TGroupImpl> PGroupImpl;
00678 
00679 
00680   //---------------------------------------------------------------
00681   typedef TVector<TMinMax> TMinMaxArr;
00682 
00684   struct TFieldImpl: virtual TField
00685   {
00686     vtkIdType myDataSize; 
00687 
00688     TMinMaxArr myMinMaxArr; 
00689 
00691     virtual
00692     TMinMax 
00693     GetMinMax(vtkIdType theCompID);
00694 
00696     void 
00697     InitArrays(vtkIdType theNbComp);
00698 
00699     TFieldImpl();
00700   };
00701   typedef SharedPtr<TFieldImpl> PFieldImpl;
00702 
00703 
00704   //---------------------------------------------------------------
00705   typedef TVector<vtkFloatingPointType> TValue;
00706   typedef TSlice<TValue> TValueSlice;
00707   typedef TCSlice<TValue> TCValueSlice;
00708 
00709   typedef TVector<TCValueSlice> TCValueSliceArr;
00710   typedef TVector<TValueSlice> TValueSliceArr;
00711 
00713   struct TMeshValue
00714   {
00715     TValue myValue; 
00716 
00717     vtkIdType myNbElem; 
00718     vtkIdType myNbComp; 
00719     vtkIdType myNbGauss; 
00720     vtkIdType myStep; 
00721 
00723     void
00724     Init(vtkIdType theNbElem,
00725       vtkIdType theNbGauss,
00726       vtkIdType theNbComp);
00727 
00729     TCValueSliceArr
00730     GetGaussValueSliceArr(vtkIdType theElemId) const;
00731 
00733     TValueSliceArr 
00734     GetGaussValueSliceArr(vtkIdType theElemId);
00735 
00737     TCValueSliceArr
00738     GetCompValueSliceArr(vtkIdType theElemId) const;
00739 
00741     TValueSliceArr 
00742     GetCompValueSliceArr(vtkIdType theElemId);
00743   };
00744   
00745 
00746   //---------------------------------------------------------------
00747   typedef std::map<EGeometry,TMeshValue> TGeom2Value;
00748   typedef std::map<EGeometry,vtkIdType> TGeom2NbGauss;
00749 
00751   struct TValForTimeImpl: virtual TValForTime
00752   {
00753     PGaussPtsIDFilter myGaussPtsIDFilter; 
00754     PIDMapperFilter myIDMapperFilter; 
00755     TGeom2Value myGeom2Value; 
00756     TGeom2NbGauss myGeom2NbGauss; 
00757    
00758     TValForTimeImpl();
00759 
00761     const TMeshValue& 
00762     GetMeshValue(EGeometry theGeom) const;
00763 
00765     TMeshValue& 
00766     GetMeshValue(EGeometry theGeom);
00767 
00769     virtual
00770     int
00771     GetNbGauss(EGeometry theGeom) const;
00772   };
00773   typedef SharedPtr<TValForTimeImpl> PValForTimeImpl;
00774 }
00775 
00776 
00778 
00782 class VISU_Convertor_impl: public VISU_Convertor
00783 {
00784 public:
00785   VISU_Convertor_impl();
00786 
00787   virtual
00788   ~VISU_Convertor_impl();
00789 
00791   virtual
00792   VISU_Convertor* 
00793   Build();
00794 
00796   virtual
00797   VISU_Convertor* 
00798   BuildEntities();
00799 
00801   virtual
00802   VISU_Convertor* 
00803   BuildFields();
00804 
00806   virtual
00807   VISU_Convertor* 
00808   BuildMinMax();
00809 
00811   virtual
00812   VISU_Convertor* 
00813   BuildGroups();
00814 
00816   virtual 
00817   vtkFloatingPointType
00818   GetSize();
00819 
00821   virtual 
00822   VISU::PNamedIDMapper 
00823   GetMeshOnEntity(const std::string& theMeshName, 
00824             const VISU::TEntity& theEntity);
00825 
00827   virtual 
00828   vtkFloatingPointType 
00829   GetMeshOnEntitySize(const std::string& theMeshName, 
00830                  const VISU::TEntity& theEntity);
00831 
00833   virtual 
00834   VISU::PIDMapper 
00835   GetFamilyOnEntity(const std::string& theMeshName, 
00836               const VISU::TEntity& theEntity,
00837               const std::string& theFamilyName);
00838 
00840   virtual 
00841   vtkFloatingPointType 
00842   GetFamilyOnEntitySize(const std::string& theMeshName, 
00843                const VISU::TEntity& theEntity,
00844                const std::string& theFamilyName);
00845 
00847   virtual 
00848   VISU::PIDMapper 
00849   GetMeshOnGroup(const std::string& theMeshName, 
00850            const std::string& theGroupName);
00851   
00853   virtual 
00854   vtkFloatingPointType 
00855   GetMeshOnGroupSize(const std::string& theMeshName, 
00856                const std::string& theGroupName);
00857 
00859   virtual
00860   VISU::PIDMapper 
00861   GetTimeStampOnMesh(const std::string& theMeshName, 
00862                const VISU::TEntity& theEntity,
00863                const std::string& theFieldName,
00864                int theStampsNum);
00865 
00867   virtual 
00868   vtkFloatingPointType 
00869   GetTimeStampSize(const std::string& theMeshName, 
00870              const VISU::TEntity& theEntity,
00871              const std::string& theFieldName,
00872              int theStampsNum);
00873 
00875   virtual
00876   VISU::PGaussPtsIDMapper 
00877   GetTimeStampOnGaussPts(const std::string& theMeshName, 
00878                 const VISU::TEntity& theEntity,
00879                 const std::string& theFieldName,
00880                 int theStampsNum);
00881   
00883   virtual 
00884   vtkFloatingPointType 
00885   GetFieldOnMeshSize(const std::string& theMeshName, 
00886                const VISU::TEntity& theEntity,
00887                const std::string& theFieldName);
00888 
00890   virtual 
00891   const VISU::PField 
00892   GetField(const std::string& theMeshName, 
00893         VISU::TEntity theEntity, 
00894         const std::string& theFieldName);
00895 
00897   virtual 
00898   const VISU::PValForTime 
00899   GetTimeStamp(const std::string& theMeshName, 
00900             const VISU::TEntity& theEntity,
00901             const std::string& theFieldName,
00902             int theStampsNum);
00903 
00904 protected:
00906   VISU::PMeshImpl 
00907   FindMesh(const std::string& theMeshName);
00908 
00910   typedef boost::tuple<VISU::PMeshImpl,VISU::PMeshOnEntityImpl> TFindMeshOnEntity;
00911   TFindMeshOnEntity
00912   FindMeshOnEntity(const std::string& theMeshName,
00913              const VISU::TEntity& theEntity);
00914 
00916   typedef boost::tuple<VISU::PMeshImpl,VISU::PMeshOnEntityImpl,VISU::PFamilyImpl> TFindFamilyOnEntity;
00917   TFindFamilyOnEntity
00918   FindFamilyOnEntity(const std::string& theMeshName,
00919               const VISU::TEntity& theEntity,
00920               const std::string& theFamilyName);
00921 
00923   typedef boost::tuple<VISU::PMeshImpl,VISU::PGroupImpl> TFindMeshOnGroup;
00924   TFindMeshOnGroup
00925   FindMeshOnGroup(const std::string& theMeshName, 
00926             const std::string& theGroupName);
00927 
00929   typedef boost::tuple<VISU::PMeshImpl,
00930                  VISU::PMeshOnEntityImpl,
00931                  VISU::PMeshOnEntityImpl,
00932                  VISU::PFieldImpl> TFindField;
00933   TFindField
00934   FindField(const std::string& theMeshName, 
00935          const VISU::TEntity& theEntity, 
00936          const std::string& theFieldName);
00937 
00939   typedef boost::tuple<VISU::PMeshImpl,
00940                  VISU::PMeshOnEntityImpl,
00941                  VISU::PMeshOnEntityImpl,
00942                  VISU::PFieldImpl,
00943                  VISU::PValForTimeImpl> TFindTimeStamp;
00944   TFindTimeStamp
00945   FindTimeStamp(const std::string& theMeshName, 
00946           const VISU::TEntity& theEntity, 
00947           const std::string& theFieldName, 
00948           int theStampsNum);
00949 
00950   VISU::TVTKOutput*
00951   GetTimeStampOnProfile(const VISU::PMeshImpl& theMesh,
00952                const VISU::PMeshOnEntityImpl& theMeshOnEntity,
00953                const VISU::PFieldImpl& theField,
00954                const VISU::PValForTimeImpl& theValForTime,
00955                const VISU::PIDMapperFilter& theIDMapperFilter,
00956                const VISU::PProfileImpl& theProfile,
00957                const VISU::TEntity& theEntity);
00958   
00959 protected:
00961   virtual
00962   int
00963   LoadMeshOnEntity(VISU::PMeshImpl theMesh,
00964              VISU::PMeshOnEntityImpl theMeshOnEntity) = 0;
00965 
00967   virtual
00968   int
00969   LoadFamilyOnEntity(VISU::PMeshImpl theMesh,
00970                VISU::PMeshOnEntityImpl theMeshOnEntity, 
00971                VISU::PFamilyImpl theFamily) = 0;
00972 
00974   virtual 
00975   int
00976   LoadMeshOnGroup(VISU::PMeshImpl theMesh, 
00977             const VISU::TFamilySet& theFamilySet) = 0;
00978 
00980   virtual 
00981   int
00982   LoadValForTimeOnMesh(VISU::PMeshImpl theMesh, 
00983                  VISU::PMeshOnEntityImpl theMeshOnEntity, 
00984                  VISU::PFieldImpl theField, 
00985                  VISU::PValForTimeImpl theValForTime) = 0;
00986 
00988   virtual 
00989   int
00990   LoadValForTimeOnGaussPts(VISU::PMeshImpl theMesh, 
00991                   VISU::PMeshOnEntityImpl theMeshOnEntity, 
00992                   VISU::PFieldImpl theField, 
00993                   VISU::PValForTimeImpl theValForTime) = 0;
00994 };
00995 
00996 #endif