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.5 2007/04/11 08:55:59 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 class VISU_CommonCellsFilter;
00042 
00043 #include "VISU_Convertor.hxx"
00044 #include "MED_SliceArray.hxx"
00045 
00046 #ifndef VISU_ENABLE_QUADRATIC
00047 #define VISU_ENABLE_QUADRATIC
00048 #define VISU_USE_VTK_QUADRATIC
00049 #endif
00050 
00051 namespace VISU
00052 {
00054   enum EGeometry {ePOINT1=1, eSEG2=102, eSEG3=103, eTRIA3=203,
00055             eQUAD4=204, eTRIA6=206,eQUAD8=208, eTETRA4=304,
00056             ePYRA5=305, ePENTA6=306, eHEXA8=308, eTETRA10=310, 
00057             ePYRA13=313, ePENTA15=315, eHEXA20=320, 
00058             ePOLYGONE=400, ePOLYEDRE=500, eNONE=-1};
00059 
00061   vtkIdType
00062   VISUGeom2NbNodes(EGeometry theGeom);
00063 
00065   vtkIdType
00066   VISUGeom2VTK(EGeometry theGeom);
00067 
00068   //---------------------------------------------------------------
00069   using MED::TCSlice;
00070   using MED::TSlice;
00071 
00072   typedef vtkUnstructuredGrid TDataSet;
00073 
00074   typedef vtkSmartPointer<TDataSet> TVTKSource;
00075   typedef vtkSmartPointer<vtkPoints> TVTKPoints;
00076   typedef vtkSmartPointer<VISU_MergeFilter> TVTKMergeFilter;
00077   typedef vtkSmartPointer<VISU_CommonCellsFilter> TVTKCommonCellsFilter;
00078 
00079   typedef vtkSmartPointer<VTKViewer_AppendFilter> TVTKAppendFilter;
00080 
00081   typedef vtkFloatingPointType TCoord;
00082 
00083   //---------------------------------------------------------------
00085   struct TIsVTKDone: virtual TBaseStructure
00086   {
00087     TIsVTKDone();
00088     bool myIsDone; 
00089     bool myIsVTKDone; 
00090   };
00091 
00092   
00093   //---------------------------------------------------------------
00095   struct TSizeCounter: virtual TIsVTKDone
00096   {
00097     TSizeCounter();
00098     vtkIdType myNbCells; 
00099     vtkIdType myCellsSize; 
00100   };
00101 
00102 
00103   //---------------------------------------------------------------
00105   class TSource: public virtual TSizeCounter
00106   {
00107   protected:
00108     mutable TVTKSource mySource;
00109   public:
00110     TSource();
00111 
00113     const TVTKSource& 
00114     GetSource() const;
00115 
00117     virtual
00118     TVTKOutput* 
00119     GetVTKOutput();
00120   };
00121 
00122 
00123   //---------------------------------------------------------------
00125 
00128   class TAppendFilter: public virtual TIsVTKDone,
00129                  public virtual TIDMapper
00130   {
00131   protected:
00132     mutable TVTKAppendFilter myFilter;
00133   public:
00134     TAppendFilter();
00135 
00137     const TVTKAppendFilter& 
00138     GetFilter() const;
00139 
00141     virtual
00142     TVTKOutput* 
00143     GetVTKOutput();
00144   };
00145   typedef SharedPtr<TAppendFilter> PAppendFilter;
00146 
00147 
00148   //---------------------------------------------------------------
00150 
00153   class TMergeFilter: public virtual TIsVTKDone,
00154                 public virtual TIDMapper
00155   {
00156   protected:
00157     mutable TVTKMergeFilter myFilter;
00158   public:
00159     TMergeFilter();
00160 
00162     const TVTKMergeFilter& 
00163     GetFilter() const;
00164 
00166     virtual
00167     TVTKOutput* 
00168     GetVTKOutput();
00169   };
00170   typedef SharedPtr<TMergeFilter> PMergeFilter;
00171 
00172 
00173   //---------------------------------------------------------------
00174   typedef TVector<TCoord> TCoordArray;
00175   typedef TSlice<TCoordArray> TCoordSlice;
00176   typedef TCSlice<TCoordArray> TCCoordSlice;
00177 
00179   class TPointCoords: public virtual TBaseStructure
00180   {
00181   protected:
00182     vtkIdType myDim; 
00183     vtkIdType myNbPoints; 
00184 
00186 
00190     TCoordArray myCoord; 
00191     TVTKPoints myPoints; 
00192 
00193   public:
00194     TPointCoords();
00195 
00197     void
00198     Init(vtkIdType theNbPoints,
00199       vtkIdType theDim);
00200 
00202     TCCoordSlice
00203     GetCoordSlice(vtkIdType theNodeId) const;
00204 
00206     TCoordSlice 
00207     GetCoordSlice(vtkIdType theNodeId);
00208 
00209     vtkIdType
00210     GetNbPoints() const { return myNbPoints; }
00211 
00212     vtkIdType
00213     GetDim() const { return myDim; }
00214 
00215     vtkIdType
00216     size() const { return GetNbPoints(); }
00217 
00218     const TVTKPoints&
00219     GetPoints() const { return myPoints;}
00220   };
00221   typedef SharedPtr<TPointCoords> PPointCoords;
00222 
00223 
00224   //---------------------------------------------------------------
00225   typedef TVector<vtkIdType> TVectorID;
00226   typedef std::map<vtkIdType,vtkIdType> TObj2VTKID;
00227 
00229 
00233   class TNamedPointCoords: public virtual TPointCoords
00234   {
00235   protected:
00236     typedef TVector<std::string> TPointsDim;
00237     TPointsDim myPointsDim; 
00238     TVectorID myVectorID; 
00239     TObj2VTKID myObj2VTKID; 
00240 
00241   public:
00242 
00244     void
00245     Init(vtkIdType theNbPoints,
00246       vtkIdType theDim,
00247       const TVectorID& theVectorID = TVectorID());
00248     
00250     std::string&
00251     GetName(vtkIdType theDim);
00252     
00254     const std::string&
00255     GetName(vtkIdType theDim) const;
00256 
00258     virtual
00259     vtkIdType
00260     GetObjID(vtkIdType theID) const;
00261 
00263     virtual
00264     vtkIdType
00265     GetVTKID(vtkIdType theID) const;
00266 
00268     virtual
00269     std::string 
00270     GetNodeName(vtkIdType theObjID) const;
00271   };
00272   typedef SharedPtr<TNamedPointCoords> PNamedPointCoords;
00273 
00274 
00275   //---------------------------------------------------------------
00277   struct TMeshImpl: virtual TMesh, 
00278               virtual TIsVTKDone
00279   {
00280     PNamedPointCoords myNamedPointCoords; 
00281 
00282     TVTKSource myPointsSource; 
00283     vtkIdType myNbPoints; 
00284 
00285     TMeshImpl();
00286   };
00287   typedef SharedPtr<TMeshImpl> PMeshImpl;
00288 
00289 
00290   //---------------------------------------------------------------
00291   typedef TVector<vtkIdType> TSubMeshID;
00292   typedef enum {eRemoveAll, eAddAll, eAddPart, eNone} ESubMeshStatus; 
00293 
00295   struct TSubProfileImpl: virtual TSubProfile, 
00296                  virtual TSource
00297   {
00298     TSubProfileImpl();
00299 
00300     EGeometry myGeom; 
00301     std::string myName; 
00302 
00304     virtual 
00305     vtkIdType 
00306     GetElemObjID(int theVtkI) const;
00307 
00309 
00313     ESubMeshStatus myStatus; 
00314     TSubMeshID mySubMeshID; 
00315   };
00316   typedef SharedPtr<TSubProfileImpl> PSubProfileImpl;
00317 
00318 
00319   //---------------------------------------------------------------
00320   struct TMeshOnEntityImpl;
00321 
00322   typedef std::map<vtkIdType,vtkIdType> TID2ID;
00323   typedef TVector<PSubProfileImpl> TSubProfileArr;
00324   typedef std::map<EGeometry,PSubProfileImpl> TGeom2SubProfile;
00325 
00327   struct TProfileImpl: virtual TProfile, 
00328                  virtual TAppendFilter
00329   {
00330     TProfileImpl();
00331     bool myIsAll; 
00332    
00334     virtual 
00335     vtkIdType 
00336     GetNodeObjID(vtkIdType theID) const;
00337 
00339     virtual 
00340     vtkIdType 
00341     GetNodeVTKID(vtkIdType theID) const;
00342 
00344     virtual 
00345     vtkFloatingPointType*  
00346     GetNodeCoord(vtkIdType theObjID);
00347 
00349     virtual 
00350     vtkIdType 
00351     GetElemObjID(vtkIdType theID) const;
00352 
00354     virtual 
00355     vtkIdType 
00356     GetElemVTKID(vtkIdType theID) const;
00357 
00359     virtual
00360     vtkCell* 
00361     GetElemCell(vtkIdType theObjID);
00362     
00364     virtual
00365     TVTKOutput* 
00366     GetVTKOutput();
00367 
00369     virtual
00370     std::string 
00371     GetNodeName(vtkIdType theObjID) const;
00372 
00374     virtual
00375     std::string 
00376     GetElemName(vtkIdType theObjID) const;
00377 
00378     TID2ID myElemObj2VTKID; 
00379     TSubProfileArr mySubProfileArr; 
00380     PNamedPointCoords myNamedPointCoords; 
00381     TMeshOnEntityImpl* myMeshOnEntity; //<! Keeps backward reference to corresponding MED ENTITY mesh
00382 
00383     TSource mySource; 
00384     TGeom2SubProfile myGeom2SubProfile; 
00385   };
00386   typedef SharedPtr<TProfileImpl> PProfileImpl;
00387 
00388 
00389   //---------------------------------------------------------------
00391   struct TIDMapperFilter: virtual TMergeFilter
00392   {
00393     PAppendFilter myIDMapper; 
00394     TSource mySource; 
00395 
00397     virtual 
00398     vtkIdType 
00399     GetNodeObjID(vtkIdType theID) const;
00400 
00402     virtual 
00403     vtkIdType 
00404     GetNodeVTKID(vtkIdType theID) const;
00405 
00407     virtual 
00408     vtkFloatingPointType*  
00409     GetNodeCoord(vtkIdType theObjID);
00410 
00412     virtual 
00413     vtkIdType 
00414     GetElemObjID(vtkIdType theID) const;
00415 
00417     virtual 
00418     vtkIdType 
00419     GetElemVTKID(vtkIdType theID) const;
00420 
00422     virtual
00423     vtkCell* 
00424     GetElemCell(vtkIdType theObjID);
00425     
00427     virtual
00428     TVTKOutput* 
00429     GetVTKOutput();
00430   };
00431   typedef SharedPtr<TIDMapperFilter> PIDMapperFilter;
00432 
00433   typedef std::map<VISU::TEntity,VISU::PNamedIDMapper> PNamedIDMapperMap;
00434   //---------------------------------------------------------------
00436   struct TIDCommonCellsFilter: virtual TIDMapperFilter
00437   {
00438   protected:
00439     mutable TVTKCommonCellsFilter myFilter;
00440     mutable TVTKMergeFilter myMergeFilter;
00441   public:
00442     
00443     TIDCommonCellsFilter();
00444 
00446     const TVTKCommonCellsFilter& 
00447     GetFilter() const;
00448 
00451     bool myIsSpecialKey;
00452 
00455     PNamedIDMapperMap myMappers;
00457     virtual
00458     TVTKOutput* 
00459     GetVTKOutput();
00460   };
00461   typedef SharedPtr<TIDCommonCellsFilter> PIDCommonCellsFilter;
00462 
00463   
00464   //---------------------------------------------------------------
00465   struct TGaussImpl;
00466   typedef SharedPtr<TGaussImpl> PGaussImpl;
00467 
00469   struct TGaussImpl: virtual TGauss
00470   {
00471     EGeometry myGeom; 
00472     std::string myName; 
00473     vtkIdType myNbPoints; //<! Keeps number of points for the MED GAUSS entity
00474 
00476     virtual
00477     void
00478     LessThan(const PGaussImpl& theGauss,
00479           bool& theResult) const;
00480   };
00481 
00482 
00483   //---------------------------------------------------------------
00485   struct TGaussSubMeshImpl: virtual TGaussSubMesh, 
00486                    virtual TSource
00487   {
00488     TGaussSubMeshImpl();
00489 
00491     virtual
00492     TGaussPointID
00493     GetObjID(vtkIdType theID,
00494           vtkIdType theStartID) const;
00495     
00496     PGaussImpl myGauss; //<! Keep reference to corresponding TGauss structure
00497 
00499 
00503     ESubMeshStatus myStatus;
00504 
00505     TPointCoords myPointCoords; 
00506   };
00507   typedef SharedPtr<TGaussSubMeshImpl> PGaussSubMeshImpl;
00508 
00509 
00510   //---------------------------------------------------------------
00511   typedef TVector<PGaussSubMeshImpl> TGaussSubMeshArr;
00512   typedef std::map<EGeometry,PGaussSubMeshImpl> TGeom2GaussSubMesh;
00513 
00515   struct TGaussMeshImpl: virtual TGaussMesh, 
00516                 virtual TAppendFilter
00517   {
00518     TGaussMeshImpl();
00519 
00521     virtual
00522     TGaussPointID
00523     GetObjID(vtkIdType theID) const;
00524 
00526     virtual
00527     TVTKOutput* 
00528     GetVTKOutput();
00529 
00531     virtual 
00532     TNamedIDMapper*
00533     GetParent();
00534 
00535     TSource mySource; 
00536     TNamedIDMapper* myParent; 
00537     TGaussSubMeshArr myGaussSubMeshArr; 
00538     TGeom2GaussSubMesh myGeom2GaussSubMesh; 
00539   };
00540   typedef SharedPtr<TGaussMeshImpl> PGaussMeshImpl;
00541 
00542 
00543   //---------------------------------------------------------------
00545   struct TGaussPtsIDFilter: virtual TIDMapperFilter,
00546                    virtual TGaussPtsIDMapper
00547   { 
00548     PGaussPtsIDMapper myGaussPtsIDMapper;
00549 
00551     virtual 
00552     TGaussPointID 
00553     GetObjID(vtkIdType theID) const;
00554 
00556     virtual 
00557     TNamedIDMapper*
00558     GetParent();
00559   };
00560   typedef SharedPtr<TGaussPtsIDFilter> PGaussPtsIDFilter;
00561 
00562 
00563   //---------------------------------------------------------------
00564   typedef TVector<vtkIdType> TConnect;
00565   typedef TVector<TConnect> TCell2Connect;
00566 
00568   struct TSubMeshImpl: virtual TSource,
00569                  virtual TStructured // ENK: 23.11.2006 - PAL13176 - EDF228 VISU : Enhancement of structured datas processing
00570   {
00571     
00573     virtual 
00574     vtkIdType 
00575     GetElemObjID(vtkIdType theID) const;
00576 
00578     virtual
00579     std::string 
00580     GetElemName(vtkIdType theObjID) const;
00581 
00582     vtkIdType myStartID;
00583     TCell2Connect myCell2Connect; 
00584   };
00585   typedef SharedPtr<TSubMeshImpl> PSubMeshImpl;
00586 
00587 
00588   //---------------------------------------------------------------
00589   typedef std::map<EGeometry,PSubMeshImpl> TGeom2SubMesh;
00590   typedef TVector<PSubMeshImpl> TSubMeshArr;
00591 
00593   struct TMeshOnEntityImpl: virtual TMeshOnEntity, 
00594                    virtual TAppendFilter, 
00595                    virtual TSizeCounter
00596   {
00598     virtual 
00599     vtkIdType 
00600     GetNodeVTKID(vtkIdType theID) const;
00601 
00603     virtual 
00604     vtkIdType 
00605     GetNodeObjID(vtkIdType theID) const;
00606 
00608     virtual 
00609     vtkIdType 
00610     GetElemVTKID(vtkIdType theID) const;
00611 
00613     virtual 
00614     vtkIdType 
00615     GetElemObjID(vtkIdType theID) const;
00616 
00618     virtual
00619     std::string 
00620     GetNodeName(vtkIdType theObjID) const;
00621 
00623     virtual
00624     std::string 
00625     GetElemName(vtkIdType theObjID) const;
00626 
00627     TID2ID myElemObj2VTKID; 
00628     TSubMeshArr mySubMeshArr; 
00629     PNamedPointCoords myNamedPointCoords; 
00630 
00631     TGeom2SubMesh myGeom2SubMesh; 
00632   };
00633   typedef SharedPtr<TMeshOnEntityImpl> PMeshOnEntityImpl;
00634 
00635 
00636   //---------------------------------------------------------------
00637   typedef std::map<EGeometry,TSubMeshID> TGeom2SubMeshID;
00638 
00640   struct TFamilyImpl: virtual TFamily, 
00641                 virtual TSource
00642   {
00644     vtkIdType 
00645     GetNodeObjID(vtkIdType theID) const ;
00646 
00648     virtual 
00649     vtkIdType 
00650     GetNodeVTKID(vtkIdType theID) const ;
00651 
00653     virtual 
00654     vtkIdType 
00655     GetElemVTKID(vtkIdType theID) const;
00656 
00658     virtual 
00659     vtkIdType 
00660     GetElemObjID(vtkIdType theID) const;
00661 
00663     virtual
00664     TVTKOutput* 
00665     GetVTKOutput();
00666 
00667     PNamedPointCoords myNamedPointCoords;  
00668     TID2ID myElemObj2VTKID; 
00669     TSubMeshID myMeshID; 
00670 
00671     TGeom2SubMeshID myGeom2SubMeshID; 
00672   };
00673   typedef SharedPtr<TFamilyImpl> PFamilyImpl;
00674 
00675 
00676   //---------------------------------------------------------------
00677   typedef std::pair<vtkIdType,vtkIdType> TNbASizeCells;
00678   typedef TVector<PFamilyImpl> TFamilyArr;
00679 
00681   struct TGroupImpl: virtual TGroup, 
00682                virtual TAppendFilter
00683   {
00685     TNbASizeCells 
00686     GetNbASizeCells() const;
00687 
00689     virtual 
00690     vtkIdType 
00691     GetElemVTKID(vtkIdType theID) const;
00692 
00694     virtual 
00695     vtkIdType 
00696     GetElemObjID(vtkIdType theID) const;
00697 
00699     virtual 
00700     vtkIdType 
00701     GetNodeObjID(vtkIdType theID) const;
00702 
00704     virtual 
00705     vtkIdType 
00706     GetNodeVTKID(vtkIdType theID) const;
00707 
00708     TID2ID myElemObj2VTKID; 
00709     TFamilyArr myFamilyArr; 
00710     PNamedPointCoords myNamedPointCoords; 
00711   };
00712   typedef SharedPtr<TGroupImpl> PGroupImpl;
00713 
00714 
00715   //---------------------------------------------------------------
00716   typedef TVector<TMinMax> TMinMaxArr;
00717 
00719   struct TFieldImpl: virtual TField
00720   {
00721     vtkIdType myDataSize; 
00722 
00723     TMinMaxArr myMinMaxArr; 
00724 
00726     virtual
00727     TMinMax 
00728     GetMinMax(vtkIdType theCompID);
00729 
00731     void 
00732     InitArrays(vtkIdType theNbComp);
00733 
00734     TFieldImpl();
00735   };
00736   typedef SharedPtr<TFieldImpl> PFieldImpl;
00737 
00738 
00739   //---------------------------------------------------------------
00740   typedef TVector<vtkFloatingPointType> TValue;
00741   typedef TSlice<TValue> TValueSlice;
00742   typedef TCSlice<TValue> TCValueSlice;
00743 
00744   typedef TVector<TCValueSlice> TCValueSliceArr;
00745   typedef TVector<TValueSlice> TValueSliceArr;
00746 
00748   struct TMeshValue
00749   {
00750     TValue myValue; 
00751 
00752     vtkIdType myNbElem; 
00753     vtkIdType myNbComp; 
00754     vtkIdType myNbGauss; 
00755     vtkIdType myStep; 
00756 
00758     void
00759     Init(vtkIdType theNbElem,
00760       vtkIdType theNbGauss,
00761       vtkIdType theNbComp);
00762 
00764     TCValueSliceArr
00765     GetGaussValueSliceArr(vtkIdType theElemId) const;
00766 
00768     TValueSliceArr 
00769     GetGaussValueSliceArr(vtkIdType theElemId);
00770 
00772     TCValueSliceArr
00773     GetCompValueSliceArr(vtkIdType theElemId) const;
00774 
00776     TValueSliceArr 
00777     GetCompValueSliceArr(vtkIdType theElemId);
00778   };
00779   
00780 
00781   //---------------------------------------------------------------
00782   typedef std::map<EGeometry,TMeshValue> TGeom2Value;
00783   typedef std::map<EGeometry,vtkIdType> TGeom2NbGauss;
00784 
00786   struct TValForTimeImpl: virtual TValForTime
00787   {
00788     PGaussPtsIDFilter myGaussPtsIDFilter; 
00789     PIDCommonCellsFilter myIDMapperFilter; 
00790     TGeom2Value myGeom2Value; 
00791     TGeom2NbGauss myGeom2NbGauss; 
00792    
00793     TValForTimeImpl();
00794 
00796     const TMeshValue& 
00797     GetMeshValue(EGeometry theGeom) const;
00798 
00800     TMeshValue& 
00801     GetMeshValue(EGeometry theGeom);
00802 
00804     virtual
00805     int
00806     GetNbGauss(EGeometry theGeom) const;
00807   };
00808   typedef SharedPtr<TValForTimeImpl> PValForTimeImpl;
00809 }
00810 
00811 
00813 
00817 class VISU_Convertor_impl: public VISU_Convertor
00818 {
00819 public:
00820   VISU_Convertor_impl();
00821 
00822   virtual
00823   ~VISU_Convertor_impl();
00824 
00826   virtual
00827   VISU_Convertor* 
00828   Build();
00829 
00831   virtual
00832   VISU_Convertor* 
00833   BuildEntities();
00834 
00836   virtual
00837   VISU_Convertor* 
00838   BuildFields();
00839 
00841   virtual
00842   VISU_Convertor* 
00843   BuildMinMax();
00844 
00846   virtual
00847   VISU_Convertor* 
00848   BuildGroups();
00849 
00851   virtual 
00852   vtkFloatingPointType
00853   GetSize();
00854 
00856   virtual 
00857   VISU::PNamedIDMapper 
00858   GetMeshOnEntity(const std::string& theMeshName, 
00859             const VISU::TEntity& theEntity);
00860 
00862   virtual 
00863   vtkFloatingPointType 
00864   GetMeshOnEntitySize(const std::string& theMeshName, 
00865                  const VISU::TEntity& theEntity);
00866 
00868   virtual 
00869   VISU::PIDMapper 
00870   GetFamilyOnEntity(const std::string& theMeshName, 
00871               const VISU::TEntity& theEntity,
00872               const std::string& theFamilyName);
00873 
00875   virtual 
00876   vtkFloatingPointType 
00877   GetFamilyOnEntitySize(const std::string& theMeshName, 
00878                const VISU::TEntity& theEntity,
00879                const std::string& theFamilyName);
00880 
00882   virtual 
00883   VISU::PIDMapper 
00884   GetMeshOnGroup(const std::string& theMeshName, 
00885            const std::string& theGroupName);
00886   
00888   virtual 
00889   vtkFloatingPointType 
00890   GetMeshOnGroupSize(const std::string& theMeshName, 
00891                const std::string& theGroupName);
00892 
00894   virtual
00895   VISU::PIDMapper 
00896   GetTimeStampOnMesh(const std::string& theMeshName, 
00897                const VISU::TEntity& theEntity,
00898                const std::string& theFieldName,
00899                int theStampsNum);
00900 
00902   virtual 
00903   vtkFloatingPointType 
00904   GetTimeStampSize(const std::string& theMeshName, 
00905              const VISU::TEntity& theEntity,
00906              const std::string& theFieldName,
00907              int theStampsNum);
00908 
00910   virtual
00911   VISU::PGaussPtsIDMapper 
00912   GetTimeStampOnGaussPts(const std::string& theMeshName, 
00913                 const VISU::TEntity& theEntity,
00914                 const std::string& theFieldName,
00915                 int theStampsNum);
00916   
00918   virtual 
00919   vtkFloatingPointType 
00920   GetFieldOnMeshSize(const std::string& theMeshName, 
00921                const VISU::TEntity& theEntity,
00922                const std::string& theFieldName);
00923 
00925   virtual 
00926   const VISU::PField 
00927   GetField(const std::string& theMeshName, 
00928         VISU::TEntity theEntity, 
00929         const std::string& theFieldName);
00930 
00932   virtual 
00933   const VISU::PValForTime 
00934   GetTimeStamp(const std::string& theMeshName, 
00935             const VISU::TEntity& theEntity,
00936             const std::string& theFieldName,
00937             int theStampsNum);
00938 
00939 protected:
00941   VISU::PMeshImpl 
00942   FindMesh(const std::string& theMeshName);
00943 
00945   typedef boost::tuple<VISU::PMeshImpl,VISU::PMeshOnEntityImpl> TFindMeshOnEntity;
00946   TFindMeshOnEntity
00947   FindMeshOnEntity(const std::string& theMeshName,
00948              const VISU::TEntity& theEntity,
00949                    bool checkExists=false);
00950 
00952   typedef boost::tuple<VISU::PMeshImpl,VISU::PMeshOnEntityImpl,VISU::PFamilyImpl> TFindFamilyOnEntity;
00953   TFindFamilyOnEntity
00954   FindFamilyOnEntity(const std::string& theMeshName,
00955               const VISU::TEntity& theEntity,
00956               const std::string& theFamilyName);
00957 
00959   typedef boost::tuple<VISU::PMeshImpl,VISU::PGroupImpl> TFindMeshOnGroup;
00960   TFindMeshOnGroup
00961   FindMeshOnGroup(const std::string& theMeshName, 
00962             const std::string& theGroupName);
00963 
00965   typedef boost::tuple<VISU::PMeshImpl,
00966                  VISU::PMeshOnEntityImpl,
00967                  VISU::PMeshOnEntityImpl,
00968                  VISU::PFieldImpl> TFindField;
00969   TFindField
00970   FindField(const std::string& theMeshName, 
00971          const VISU::TEntity& theEntity, 
00972          const std::string& theFieldName);
00973 
00975   typedef boost::tuple<VISU::PMeshImpl,
00976                  VISU::PMeshOnEntityImpl,
00977                  VISU::PMeshOnEntityImpl,
00978                  VISU::PFieldImpl,
00979                  VISU::PValForTimeImpl> TFindTimeStamp;
00980   TFindTimeStamp
00981   FindTimeStamp(const std::string& theMeshName, 
00982           const VISU::TEntity& theEntity, 
00983           const std::string& theFieldName, 
00984           int theStampsNum);
00985 
00986   VISU::TVTKOutput*
00987   GetTimeStampOnProfile(const VISU::PMeshImpl& theMesh,
00988                const VISU::PMeshOnEntityImpl& theMeshOnEntity,
00989                const VISU::PFieldImpl& theField,
00990                const VISU::PValForTimeImpl& theValForTime,
00991                const VISU::PIDCommonCellsFilter& theIDMapperFilter,
00992                const VISU::PProfileImpl& theProfile,
00993                const VISU::TEntity& theEntity);
00994 
00995   void
00996   GetTimeStampOnNodalProfile(const VISU::PMeshImpl& theMesh,
00997                              const VISU::PIDCommonCellsFilter& theIDMapperFilter,
00998                              const VISU::PFieldImpl& theField, 
00999                              const VISU::PValForTimeImpl& theValForTime,
01000                              const VISU::TEntity& theEntity);
01001   
01002   
01003 protected:
01005   virtual
01006   int
01007   LoadMeshOnEntity(VISU::PMeshImpl theMesh,
01008              VISU::PMeshOnEntityImpl theMeshOnEntity) = 0;
01009 
01011   virtual
01012   int
01013   LoadFamilyOnEntity(VISU::PMeshImpl theMesh,
01014                VISU::PMeshOnEntityImpl theMeshOnEntity, 
01015                VISU::PFamilyImpl theFamily) = 0;
01016 
01018   virtual 
01019   int
01020   LoadMeshOnGroup(VISU::PMeshImpl theMesh, 
01021             const VISU::TFamilySet& theFamilySet) = 0;
01022 
01024   virtual 
01025   int
01026   LoadValForTimeOnMesh(VISU::PMeshImpl theMesh, 
01027                  VISU::PMeshOnEntityImpl theMeshOnEntity, 
01028                  VISU::PFieldImpl theField, 
01029                  VISU::PValForTimeImpl theValForTime) = 0;
01030 
01032   virtual 
01033   int
01034   LoadValForTimeOnGaussPts(VISU::PMeshImpl theMesh, 
01035                   VISU::PMeshOnEntityImpl theMeshOnEntity, 
01036                   VISU::PFieldImpl theField, 
01037                   VISU::PValForTimeImpl theValForTime) = 0;
01038 };
01039 
01040 #endif