1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 // Author : Alexey PETROV
26 #ifndef VISU_Structures_HeaderFile
27 #define VISU_Structures_HeaderFile
30 \file VISU_Structures.hxx
31 \brief The file contains definitions for basic classes of the VISU CONVERTER package
34 #include "VISUConvertor.hxx"
35 #include "VISU_IDMapper.hxx"
36 #include "VISU_ConvertorDef.hxx"
38 #include "MED_Vector.hxx"
49 //---------------------------------------------------------------
50 typedef std::string TName;
51 typedef TVector<TName> TNames;
53 //---------------------------------------------------------------
54 //! Define a basic class for all MED entites which can be identified by its number
55 struct VISU_CONVERTOR_EXPORT TIntId: virtual TBaseStructure
63 //---------------------------------------------------------------
64 //! Define an utility base class which is repsonsible for preventing repetion
65 struct VISU_CONVERTOR_EXPORT TIsVTKDone: virtual TBaseStructure
67 mutable bool myIsDone; //!< Say, is the corresponding MED entity already loaded into intermediate data structure
68 mutable bool myIsVTKDone; //!< Say, is the corresponding intermediate data structure already mapped into VTK representation
74 //---------------------------------------------------------------
75 typedef std::map<TEntity, PMeshOnEntity> TMeshOnEntityMap;
76 typedef std::map<TName, PGroup> TGroupMap;
78 //! Define a basic class which corresponds to MED MESH entity
80 This class in its turn contains map of TMeshOnEntity and TGroup substructures,
81 also it keeps name and dimention of corresponding MED MESH entity.
83 struct VISU_CONVERTOR_EXPORT TMesh: virtual TBaseStructure
85 TMeshOnEntityMap myMeshOnEntityMap; //!< Contains corresponding meshes for MED ENTITIES
86 TGroupMap myGroupMap; //!< Contains map of bounded MED GROUPS
87 TName myName; //! Name of the corresponding MED MESH
88 vtkIdType myDim; //! Dimension of the corresponding MED MESH
90 std::string myGroupsEntry; //!< To simplify publication of the groups in a data tree
91 std::string myFieldsEntry; //!< To simplify publication of the fiels in a data tree
92 std::string myPartsEntry; //!< To simplify publication of the parts in a data tree
96 typedef std::map<std::string, PMesh> TMeshMap;
99 //---------------------------------------------------------------
100 //! Define a basic class which corresponds to MED PROFILE entity
101 struct VISU_CONVERTOR_EXPORT TSubProfile: virtual TBaseStructure
103 //! Get object number of mesh cell by its VTK one
106 GetElemObjID(vtkIdType theID) const = 0;
108 //! Get cell VTK ID for corresponding object ID
111 GetElemVTKID(vtkIdType theID) const = 0;
115 //---------------------------------------------------------------
116 //! Define a containerfor MED PROFILE entities which belongs to the same MED ENTITY
117 struct VISU_CONVERTOR_EXPORT TProfile: virtual TNamedIDMapper
121 //---------------------------------------------------------------
122 bool VISU_CONVERTOR_EXPORT
123 operator<(const PSubProfile& theLeft, const PSubProfile& theRight);
125 typedef std::set<PSubProfile> TProfileKey;
126 typedef std::map<TProfileKey, PProfile> TProfileMap;
129 //---------------------------------------------------------------
130 //! Define a basic class for MED GAUSS entity
131 struct VISU_CONVERTOR_EXPORT TGauss: virtual TBaseStructure
135 //---------------------------------------------------------------
136 //! Define a container for mesh generated from MED GAUSS and corresponding MED PROFILE
137 struct VISU_CONVERTOR_EXPORT TGaussSubMesh: virtual TBaseStructure
139 PSubProfile mySubProfile; //!< Keeps reference on what submesh the Gauss Points are located
143 //---------------------------------------------------------------
144 //! Define a container for all TGaussSubMesh that belongs to the same MED ENTITY
145 struct VISU_CONVERTOR_EXPORT TGaussMesh: virtual TGaussPtsIDMapper
149 //---------------------------------------------------------------
150 bool VISU_CONVERTOR_EXPORT
151 operator<(const PGaussSubMesh& theLeft, const PGaussSubMesh& theRight);
153 typedef std::set<PGaussSubMesh> TGaussKey;
154 typedef std::map<TGaussKey, PGaussMesh> TGaussMeshMap;
157 //---------------------------------------------------------------
159 typedef std::map<TName, PFamily> TFamilyMap;
160 typedef std::map<TName, PField> TFieldMap;
162 //! Define a basic class which corresponds to MED ENTITY
164 This class in its turn contains map of TGaussMesh and TProfile substructures,
165 also it keeps corresponding map of MED FAMILIES and FIELDS.
167 struct VISU_CONVERTOR_EXPORT TMeshOnEntity: virtual TNamedIDMapper
169 TGaussMeshMap myGaussMeshMap; //!< Contains map of Gauss mesh which exist on it
170 TProfileMap myProfileMap; //!< Contains map of Profile mesh which exist on it
172 TFamilyMap myFamilyMap; //!< Contains map of MED FAMILIES which belongs to it
173 TFieldMap myFieldMap; //!< Contains map of MED FIELDS which belongs to it
175 TName myMeshName; //!< Contains name of the MED MESH where the it belongs to.
176 TEntity myEntity; //!< Referes to MED ENTITY where the it belongs to.
182 //---------------------------------------------------------------
183 //! Define a basic class for MED FAMILY entity
184 struct VISU_CONVERTOR_EXPORT TFamily: virtual TIntId,
185 virtual TUnstructuredGridIDMapper
187 TEntity myEntity; //!< Referes to MED ENTITY where the TFamily belongs to.
188 TName myName; //!< Contains name of the corresponding MED FAMILY
194 //---------------------------------------------------------------
195 bool VISU_CONVERTOR_EXPORT
196 operator<(const PFamily& theLeft, const PFamily& theRight);
198 typedef std::set<PFamily> TFamilySet;
200 //! Define a basic class for MED GROUP entity
201 struct VISU_CONVERTOR_EXPORT TGroup: virtual TUnstructuredGridIDMapper
203 TFamilySet myFamilySet;
207 //---------------------------------------------------------------
208 typedef std::map<vtkIdType, PValForTime> TValField;
209 typedef std::pair<vtkFloatingPointType, vtkFloatingPointType> TMinMax;
211 //! Define a basic class for MED FIELD entity
212 struct VISU_CONVERTOR_EXPORT TField: virtual TIntId
214 TEntity myEntity; //!< Referes to MED ENTITY where it belongs to.
215 TName myName; //!< Contains name of the corresponding MED FIELD
216 TName myMeshName; //!< Contains name of the MED MESH where it belongs to.
217 TValField myValField; //!< Contains sequence of values for corresponding MED TIMESTAMPS
218 TNames myCompNames; //!< Contains names of components of the MED FIELD
219 TNames myUnitNames; //!< Contains names of units of the MED FIELD
220 vtkIdType myNbComp; //!< Keeps number of components for the MED FIELD
221 bool myIsELNO; //!< Defines whether this field contains specific "ELNO" data or not
223 //! Calculate min/max values for each of the MED FIELD components among all its timestamps
225 Numeration of the components starts from 1.
226 Zero component contains min/max value for modulus of corresponding vector
230 GetMinMax(vtkIdType theCompID) = 0;
232 //! Calculate average min/max values for each of the MED FIELD components among all its timestamps
235 GetAverageMinMax(vtkIdType theCompID) = 0;
237 bool myIsMinMaxInitilized; //!< Is the min / max values are calculated
243 struct VISU_CONVERTOR_EXPORT TPart: virtual TIntId
245 vtkIdType myCurrentRes; //!< Keeps current resolution fot this part
251 //---------------------------------------------------------------
252 typedef std::pair<double, std::string> TTime;
254 //! Define a basic class for MED TIMESTAMP entity
255 struct VISU_CONVERTOR_EXPORT TValForTime: virtual TIntId
257 TEntity myEntity; //!< Referes to MED ENTITY where it belongs to.
258 TName myMeshName; //!< Contains name of the MED MESH where it belongs to.
259 TName myFieldName; //!< Contains name of the MED FIELD where it belongs to.
262 PProfile myProfile; //!< Contains corresponding MED PROFILE where the MED TIEMSTMAP attached to
263 PGaussMesh myGaussMesh;
267 //---------------------------------------------------------------