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.2.1 2006/08/21 14:40:06 apo 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   typedef SharedPtr<TAppendFilter> PAppendFilter;
00168 
00169 
00170   //---------------------------------------------------------------
00171   typedef TVector<TCoord> TCoordArray;
00172   typedef TSlice<TCoordArray> TCoordSlice;
00173   typedef TCSlice<TCoordArray> TCCoordSlice;
00174 
00176   class TPointCoords: public virtual TBaseStructure
00177   {
00178   protected:
00179     vtkIdType myDim; 
00180     vtkIdType myNbPoints; 
00181 
00183 
00187     TCoordArray myCoord; 
00188     TVTKPoints myPoints; 
00189 
00190   public:
00191     TPointCoords();
00192 
00194     void
00195     Init(vtkIdType theNbPoints,
00196       vtkIdType theDim);
00197 
00199     TCCoordSlice
00200     GetCoordSlice(vtkIdType theNodeId) const;
00201 
00203     TCoordSlice 
00204     GetCoordSlice(vtkIdType theNodeId);
00205 
00206     vtkIdType
00207     GetNbPoints() const { return myNbPoints; }
00208 
00209     vtkIdType
00210     GetDim() const { return myDim; }
00211 
00212     vtkIdType
00213     size() const { return GetNbPoints(); }
00214 
00215     const TVTKPoints&
00216     GetPoints() const { return myPoints;}
00217   };
00218   typedef SharedPtr<TPointCoords> PPointCoords;
00219 
00220 
00221   //---------------------------------------------------------------
00222   typedef TVector<vtkIdType> TVectorID;
00223   typedef std::map<vtkIdType,vtkIdType> TObj2VTKID;
00224 
00226 
00230   class TNamedPointCoords: public virtual TPointCoords
00231   {
00232   protected:
00233     typedef TVector<std::string> TPointsDim;
00234     TPointsDim myPointsDim; 
00235     TVectorID myVectorID; 
00236     TObj2VTKID myObj2VTKID; 
00237 
00238   public:
00239 
00241     void
00242     Init(vtkIdType theNbPoints,
00243       vtkIdType theDim,
00244       const TVectorID& theVectorID = TVectorID());
00245     
00247     std::string&
00248     GetName(vtkIdType theDim);
00249     
00251     const std::string&
00252     GetName(vtkIdType theDim) const;
00253 
00255     virtual
00256     vtkIdType
00257     GetObjID(vtkIdType theID) const;
00258 
00260     virtual
00261     vtkIdType
00262     GetVTKID(vtkIdType theID) const;
00263 
00265     virtual
00266     std::string 
00267     GetNodeName(vtkIdType theObjID) const;
00268   };
00269   typedef SharedPtr<TNamedPointCoords> PNamedPointCoords;
00270 
00271 
00272   //---------------------------------------------------------------
00274   struct TMeshImpl: virtual TMesh, 
00275               virtual TIsVTKDone
00276   {
00277     PNamedPointCoords myNamedPointCoords; 
00278 
00279     TVTKPoints myPoints; 
00280     vtkIdType myNbPoints; 
00281 
00282     TMeshImpl();
00283   };
00284   typedef SharedPtr<TMeshImpl> PMeshImpl;
00285 
00286 
00287   //---------------------------------------------------------------
00288   typedef TVector<vtkIdType> TSubMeshID;
00289   typedef enum {eRemoveAll, eAddAll, eAddPart, eNone} ESubMeshStatus; 
00290 
00292   struct TSubProfileImpl: virtual TSubProfile, 
00293                  virtual TSource
00294   {
00295     TSubProfileImpl();
00296 
00297     EGeometry myGeom; 
00298     std::string myName; 
00299 
00301     virtual 
00302     vtkIdType 
00303     GetElemObjID(int theVtkI) const;
00304 
00306 
00310     ESubMeshStatus myStatus; 
00311     TSubMeshID mySubMeshID; 
00312   };
00313   typedef SharedPtr<TSubProfileImpl> PSubProfileImpl;
00314 
00315 
00316   //---------------------------------------------------------------
00317   struct TMeshOnEntityImpl;
00318 
00319   typedef std::map<vtkIdType,vtkIdType> TID2ID;
00320   typedef TVector<PSubProfileImpl> TSubProfileArr;
00321   typedef std::map<EGeometry,PSubProfileImpl> TGeom2SubProfile;
00322 
00324   struct TProfileImpl: virtual TProfile, 
00325                  virtual TAppendFilter
00326   {
00327     TProfileImpl();
00328     bool myIsAll; 
00329    
00331     virtual 
00332     vtkIdType 
00333     GetNodeObjID(vtkIdType theID) const;
00334 
00336     virtual 
00337     vtkIdType 
00338     GetNodeVTKID(vtkIdType theID) const;
00339 
00341     virtual 
00342     vtkFloatingPointType*  
00343     GetNodeCoord(vtkIdType theObjID);
00344 
00346     virtual 
00347     vtkIdType 
00348     GetElemObjID(vtkIdType theID) const;
00349 
00351     virtual 
00352     vtkIdType 
00353     GetElemVTKID(vtkIdType theID) const;
00354 
00356     virtual
00357     vtkCell* 
00358     GetElemCell(vtkIdType theObjID);
00359     
00361     virtual
00362     TVTKOutput* 
00363     GetVTKOutput();
00364 
00366     virtual
00367     std::string 
00368     GetNodeName(vtkIdType theObjID) const;
00369 
00371     virtual
00372     std::string 
00373     GetElemName(vtkIdType theObjID) const;
00374 
00375     TID2ID myElemObj2VTKID; 
00376     TSubProfileArr mySubProfileArr; 
00377     PNamedPointCoords myNamedPointCoords; 
00378     TMeshOnEntityImpl* myMeshOnEntity; //<! Keeps backward reference to corresponding MED ENTITY mesh
00379 
00380     TSource mySource; 
00381     TGeom2SubProfile myGeom2SubProfile; 
00382   };
00383   typedef SharedPtr<TProfileImpl> PProfileImpl;
00384 
00385 
00386   //---------------------------------------------------------------
00388   struct TIDMapperFilter: virtual TMergeFilter
00389   {
00390     PAppendFilter myIDMapper; 
00391     TSource mySource; 
00392 
00394     virtual 
00395     vtkIdType 
00396     GetNodeObjID(vtkIdType theID) const;
00397 
00399     virtual 
00400     vtkIdType 
00401     GetNodeVTKID(vtkIdType theID) const;
00402 
00404     virtual 
00405     vtkFloatingPointType*  
00406     GetNodeCoord(vtkIdType theObjID);
00407 
00409     virtual 
00410     vtkIdType 
00411     GetElemObjID(vtkIdType theID) const;
00412 
00414     virtual 
00415     vtkIdType 
00416     GetElemVTKID(vtkIdType theID) const;
00417 
00419     virtual
00420     vtkCell* 
00421     GetElemCell(vtkIdType theObjID);
00422     
00424     virtual
00425     TVTKOutput* 
00426     GetVTKOutput();
00427   };
00428   typedef SharedPtr<TIDMapperFilter> PIDMapperFilter;
00429 
00430 
00431   //---------------------------------------------------------------
00432   struct TGaussImpl;
00433   typedef SharedPtr<TGaussImpl> PGaussImpl;
00434 
00436   struct TGaussImpl: virtual TGauss
00437   {
00438     EGeometry myGeom; 
00439     std::string myName; 
00440     vtkIdType myNbPoints; //<! Keeps number of points for the MED GAUSS entity
00441 
00443     virtual
00444     void
00445     LessThan(const PGaussImpl& theGauss,
00446           bool& theResult) const;
00447   };
00448 
00449 
00450   //---------------------------------------------------------------
00452   struct TGaussSubMeshImpl: virtual TGaussSubMesh, 
00453                    virtual TSource
00454   {
00455     TGaussSubMeshImpl();
00456 
00458     virtual
00459     TGaussPointID
00460     GetObjID(vtkIdType theID,
00461           vtkIdType theStartID) const;
00462     
00463     PGaussImpl myGauss; //<! Keep reference to corresponding TGauss structure
00464 
00466 
00470     ESubMeshStatus myStatus;
00471 
00472     TPointCoords myPointCoords; 
00473   };
00474   typedef SharedPtr<TGaussSubMeshImpl> PGaussSubMeshImpl;
00475 
00476 
00477   //---------------------------------------------------------------
00478   typedef TVector<PGaussSubMeshImpl> TGaussSubMeshArr;
00479   typedef std::map<EGeometry,PGaussSubMeshImpl> TGeom2GaussSubMesh;
00480 
00482   struct TGaussMeshImpl: virtual TGaussMesh, 
00483                 virtual TAppendFilter
00484   {
00485     TGaussMeshImpl();
00486 
00488     virtual
00489     TGaussPointID
00490     GetObjID(vtkIdType theID) const;
00491 
00493     virtual
00494     TVTKOutput* 
00495     GetVTKOutput();
00496 
00498     virtual 
00499     TNamedIDMapper*
00500     GetParent();
00501 
00502     TSource mySource; 
00503     TNamedIDMapper* myParent; 
00504     TGaussSubMeshArr myGaussSubMeshArr; 
00505     TGeom2GaussSubMesh myGeom2GaussSubMesh; 
00506   };
00507   typedef SharedPtr<TGaussMeshImpl> PGaussMeshImpl;
00508 
00509 
00510   //---------------------------------------------------------------
00512   struct TGaussPtsIDFilter: virtual TIDMapperFilter,
00513                    virtual TGaussPtsIDMapper
00514   { 
00515     PGaussPtsIDMapper myGaussPtsIDMapper;
00516 
00518     virtual 
00519     TGaussPointID 
00520     GetObjID(vtkIdType theID) const;
00521 
00523     virtual 
00524     TNamedIDMapper*
00525     GetParent();
00526   };
00527   typedef SharedPtr<TGaussPtsIDFilter> PGaussPtsIDFilter;
00528 
00529 
00530   //---------------------------------------------------------------
00531   typedef TVector<vtkIdType> TConnect;
00532   typedef TVector<TConnect> TCell2Connect;
00533 
00535   struct TSubMeshImpl: virtual TSource
00536   {
00537     
00539     virtual 
00540     vtkIdType 
00541     GetElemObjID(vtkIdType theID) const;
00542 
00544     virtual
00545     std::string 
00546     GetElemName(vtkIdType theObjID) const;
00547 
00548     vtkIdType myStartID;
00549     TCell2Connect myCell2Connect; 
00550   };
00551   typedef SharedPtr<TSubMeshImpl> PSubMeshImpl;
00552 
00553 
00554   //---------------------------------------------------------------
00555   typedef std::map<EGeometry,PSubMeshImpl> TGeom2SubMesh;
00556   typedef TVector<PSubMeshImpl> TSubMeshArr;
00557 
00559   struct TMeshOnEntityImpl: virtual TMeshOnEntity, 
00560                    virtual TAppendFilter, 
00561                    virtual TSizeCounter
00562   {
00564     virtual 
00565     vtkIdType 
00566     GetNodeVTKID(vtkIdType theID) const;
00567 
00569     virtual 
00570     vtkIdType 
00571     GetNodeObjID(vtkIdType theID) const;
00572 
00574     virtual 
00575     vtkIdType 
00576     GetElemVTKID(vtkIdType theID) const;
00577 
00579     virtual 
00580     vtkIdType 
00581     GetElemObjID(vtkIdType theID) const;
00582 
00584     virtual
00585     std::string 
00586     GetNodeName(vtkIdType theObjID) const;
00587 
00589     virtual
00590     std::string 
00591     GetElemName(vtkIdType theObjID) const;
00592 
00593     TID2ID myElemObj2VTKID; 
00594     TSubMeshArr mySubMeshArr; 
00595     PNamedPointCoords myNamedPointCoords; 
00596 
00597     TGeom2SubMesh myGeom2SubMesh; 
00598   };
00599   typedef SharedPtr<TMeshOnEntityImpl> PMeshOnEntityImpl;
00600 
00601 
00602   //---------------------------------------------------------------
00603   typedef std::map<EGeometry,TSubMeshID> TGeom2SubMeshID;
00604 
00606   struct TFamilyImpl: virtual TFamily, 
00607                 virtual TSource
00608   {
00610     vtkIdType 
00611     GetNodeObjID(vtkIdType theID) const ;
00612 
00614     virtual 
00615     vtkIdType 
00616     GetNodeVTKID(vtkIdType theID) const ;
00617 
00619     virtual 
00620     vtkIdType 
00621     GetElemVTKID(vtkIdType theID) const;
00622 
00624     virtual 
00625     vtkIdType 
00626     GetElemObjID(vtkIdType theID) const;
00627 
00629     virtual
00630     TVTKOutput* 
00631     GetVTKOutput();
00632 
00633     PNamedPointCoords myNamedPointCoords;  
00634     TID2ID myElemObj2VTKID; 
00635     TSubMeshID myMeshID; 
00636 
00637     TGeom2SubMeshID myGeom2SubMeshID; 
00638   };
00639   typedef SharedPtr<TFamilyImpl> PFamilyImpl;
00640 
00641 
00642   //---------------------------------------------------------------
00643   typedef std::pair<vtkIdType,vtkIdType> TNbASizeCells;
00644   typedef TVector<PFamilyImpl> TFamilyArr;
00645 
00647   struct TGroupImpl: virtual TGroup, 
00648                virtual TAppendFilter
00649   {
00651     TNbASizeCells 
00652     GetNbASizeCells() const;
00653 
00655     virtual 
00656     vtkIdType 
00657     GetElemVTKID(vtkIdType theID) const;
00658 
00660     virtual 
00661     vtkIdType 
00662     GetElemObjID(vtkIdType theID) const;
00663 
00665     virtual 
00666     vtkIdType 
00667     GetNodeObjID(vtkIdType theID) const;
00668 
00670     virtual 
00671     vtkIdType 
00672     GetNodeVTKID(vtkIdType theID) const;
00673 
00674     TID2ID myElemObj2VTKID; 
00675     TFamilyArr myFamilyArr; 
00676     PNamedPointCoords myNamedPointCoords; 
00677   };
00678   typedef SharedPtr<TGroupImpl> PGroupImpl;
00679 
00680 
00681   //---------------------------------------------------------------
00682   typedef TVector<TMinMax> TMinMaxArr;
00683 
00685   struct TFieldImpl: virtual TField
00686   {
00687     vtkIdType myDataSize; 
00688 
00689     TMinMaxArr myMinMaxArr; 
00690 
00692     virtual
00693     TMinMax 
00694     GetMinMax(vtkIdType theCompID);
00695 
00697     void 
00698     InitArrays(vtkIdType theNbComp);
00699 
00700     TFieldImpl();
00701   };
00702   typedef SharedPtr<TFieldImpl> PFieldImpl;
00703 
00704 
00705   //---------------------------------------------------------------
00706   typedef TVector<vtkFloatingPointType> TValue;
00707   typedef TSlice<TValue> TValueSlice;
00708   typedef TCSlice<TValue> TCValueSlice;
00709 
00710   typedef TVector<TCValueSlice> TCValueSliceArr;
00711   typedef TVector<TValueSlice> TValueSliceArr;
00712 
00714   struct TMeshValue
00715   {
00716     TValue myValue; 
00717 
00718     vtkIdType myNbElem; 
00719     vtkIdType myNbComp; 
00720     vtkIdType myNbGauss; 
00721     vtkIdType myStep; 
00722 
00724     void
00725     Init(vtkIdType theNbElem,
00726       vtkIdType theNbGauss,
00727       vtkIdType theNbComp);
00728 
00730     TCValueSliceArr
00731     GetGaussValueSliceArr(vtkIdType theElemId) const;
00732 
00734     TValueSliceArr 
00735     GetGaussValueSliceArr(vtkIdType theElemId);
00736 
00738     TCValueSliceArr
00739     GetCompValueSliceArr(vtkIdType theElemId) const;
00740 
00742     TValueSliceArr 
00743     GetCompValueSliceArr(vtkIdType theElemId);
00744   };
00745   
00746 
00747   //---------------------------------------------------------------
00748   typedef std::map<EGeometry,TMeshValue> TGeom2Value;
00749   typedef std::map<EGeometry,vtkIdType> TGeom2NbGauss;
00750 
00752   struct TValForTimeImpl: virtual TValForTime
00753   {
00754     PGaussPtsIDFilter myGaussPtsIDFilter; 
00755     PIDMapperFilter myIDMapperFilter; 
00756     TGeom2Value myGeom2Value; 
00757     TGeom2NbGauss myGeom2NbGauss; 
00758    
00759     TValForTimeImpl();
00760 
00762     const TMeshValue& 
00763     GetMeshValue(EGeometry theGeom) const;
00764 
00766     TMeshValue& 
00767     GetMeshValue(EGeometry theGeom);
00768 
00770     virtual
00771     int
00772     GetNbGauss(EGeometry theGeom) const;
00773   };
00774   typedef SharedPtr<TValForTimeImpl> PValForTimeImpl;
00775 }
00776 
00777 
00779 
00783 class VISU_Convertor_impl: public VISU_Convertor
00784 {
00785 public:
00786   VISU_Convertor_impl();
00787 
00788   virtual
00789   ~VISU_Convertor_impl();
00790 
00792   virtual
00793   VISU_Convertor* 
00794   Build();
00795 
00797   virtual
00798   VISU_Convertor* 
00799   BuildEntities();
00800 
00802   virtual
00803   VISU_Convertor* 
00804   BuildFields();
00805 
00807   virtual
00808   VISU_Convertor* 
00809   BuildMinMax();
00810 
00812   virtual
00813   VISU_Convertor* 
00814   BuildGroups();
00815 
00817   virtual 
00818   vtkFloatingPointType
00819   GetSize();
00820 
00822   virtual 
00823   VISU::PNamedIDMapper 
00824   GetMeshOnEntity(const std::string& theMeshName, 
00825             const VISU::TEntity& theEntity);
00826 
00828   virtual 
00829   vtkFloatingPointType 
00830   GetMeshOnEntitySize(const std::string& theMeshName, 
00831                  const VISU::TEntity& theEntity);
00832 
00834   virtual 
00835   VISU::PIDMapper 
00836   GetFamilyOnEntity(const std::string& theMeshName, 
00837               const VISU::TEntity& theEntity,
00838               const std::string& theFamilyName);
00839 
00841   virtual 
00842   vtkFloatingPointType 
00843   GetFamilyOnEntitySize(const std::string& theMeshName, 
00844                const VISU::TEntity& theEntity,
00845                const std::string& theFamilyName);
00846 
00848   virtual 
00849   VISU::PIDMapper 
00850   GetMeshOnGroup(const std::string& theMeshName, 
00851            const std::string& theGroupName);
00852   
00854   virtual 
00855   vtkFloatingPointType 
00856   GetMeshOnGroupSize(const std::string& theMeshName, 
00857                const std::string& theGroupName);
00858 
00860   virtual
00861   VISU::PIDMapper 
00862   GetTimeStampOnMesh(const std::string& theMeshName, 
00863                const VISU::TEntity& theEntity,
00864                const std::string& theFieldName,
00865                int theStampsNum);
00866 
00868   virtual 
00869   vtkFloatingPointType 
00870   GetTimeStampSize(const std::string& theMeshName, 
00871              const VISU::TEntity& theEntity,
00872              const std::string& theFieldName,
00873              int theStampsNum);
00874 
00876   virtual
00877   VISU::PGaussPtsIDMapper 
00878   GetTimeStampOnGaussPts(const std::string& theMeshName, 
00879                 const VISU::TEntity& theEntity,
00880                 const std::string& theFieldName,
00881                 int theStampsNum);
00882   
00884   virtual 
00885   vtkFloatingPointType 
00886   GetFieldOnMeshSize(const std::string& theMeshName, 
00887                const VISU::TEntity& theEntity,
00888                const std::string& theFieldName);
00889 
00891   virtual 
00892   const VISU::PField 
00893   GetField(const std::string& theMeshName, 
00894         VISU::TEntity theEntity, 
00895         const std::string& theFieldName);
00896 
00898   virtual 
00899   const VISU::PValForTime 
00900   GetTimeStamp(const std::string& theMeshName, 
00901             const VISU::TEntity& theEntity,
00902             const std::string& theFieldName,
00903             int theStampsNum);
00904 
00905 protected:
00907   VISU::PMeshImpl 
00908   FindMesh(const std::string& theMeshName);
00909 
00911   typedef boost::tuple<VISU::PMeshImpl,VISU::PMeshOnEntityImpl> TFindMeshOnEntity;
00912   TFindMeshOnEntity
00913   FindMeshOnEntity(const std::string& theMeshName,
00914              const VISU::TEntity& theEntity);
00915 
00917   typedef boost::tuple<VISU::PMeshImpl,VISU::PMeshOnEntityImpl,VISU::PFamilyImpl> TFindFamilyOnEntity;
00918   TFindFamilyOnEntity
00919   FindFamilyOnEntity(const std::string& theMeshName,
00920               const VISU::TEntity& theEntity,
00921               const std::string& theFamilyName);
00922 
00924   typedef boost::tuple<VISU::PMeshImpl,VISU::PGroupImpl> TFindMeshOnGroup;
00925   TFindMeshOnGroup
00926   FindMeshOnGroup(const std::string& theMeshName, 
00927             const std::string& theGroupName);
00928 
00930   typedef boost::tuple<VISU::PMeshImpl,
00931                  VISU::PMeshOnEntityImpl,
00932                  VISU::PMeshOnEntityImpl,
00933                  VISU::PFieldImpl> TFindField;
00934   TFindField
00935   FindField(const std::string& theMeshName, 
00936          const VISU::TEntity& theEntity, 
00937          const std::string& theFieldName);
00938 
00940   typedef boost::tuple<VISU::PMeshImpl,
00941                  VISU::PMeshOnEntityImpl,
00942                  VISU::PMeshOnEntityImpl,
00943                  VISU::PFieldImpl,
00944                  VISU::PValForTimeImpl> TFindTimeStamp;
00945   TFindTimeStamp
00946   FindTimeStamp(const std::string& theMeshName, 
00947           const VISU::TEntity& theEntity, 
00948           const std::string& theFieldName, 
00949           int theStampsNum);
00950 
00951   VISU::TVTKOutput*
00952   GetTimeStampOnProfile(const VISU::PMeshImpl& theMesh,
00953                const VISU::PMeshOnEntityImpl& theMeshOnEntity,
00954                const VISU::PFieldImpl& theField,
00955                const VISU::PValForTimeImpl& theValForTime,
00956                const VISU::PIDMapperFilter& theIDMapperFilter,
00957                const VISU::PProfileImpl& theProfile,
00958                const VISU::TEntity& theEntity);
00959   
00960 protected:
00962   virtual
00963   int
00964   LoadMeshOnEntity(VISU::PMeshImpl theMesh,
00965              VISU::PMeshOnEntityImpl theMeshOnEntity) = 0;
00966 
00968   virtual
00969   int
00970   LoadFamilyOnEntity(VISU::PMeshImpl theMesh,
00971                VISU::PMeshOnEntityImpl theMeshOnEntity, 
00972                VISU::PFamilyImpl theFamily) = 0;
00973 
00975   virtual 
00976   int
00977   LoadMeshOnGroup(VISU::PMeshImpl theMesh, 
00978             const VISU::TFamilySet& theFamilySet) = 0;
00979 
00981   virtual 
00982   int
00983   LoadValForTimeOnMesh(VISU::PMeshImpl theMesh, 
00984                  VISU::PMeshOnEntityImpl theMeshOnEntity, 
00985                  VISU::PFieldImpl theField, 
00986                  VISU::PValForTimeImpl theValForTime) = 0;
00987 
00989   virtual 
00990   int
00991   LoadValForTimeOnGaussPts(VISU::PMeshImpl theMesh, 
00992                   VISU::PMeshOnEntityImpl theMeshOnEntity, 
00993                   VISU::PFieldImpl theField, 
00994                   VISU::PValForTimeImpl theValForTime) = 0;
00995 };
00996 
00997 #endif