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 // File : VISU_Convertor.hxx
24 // Author : Alexey PETROV
27 #ifndef VISU_IDMapper_HeaderFile
28 #define VISU_IDMapper_HeaderFile
31 \file VISU_IDMapper.hxx
32 \brief The file contains declarations for basic interfaces that defines mapping of mesh elements
35 #include "VISUConvertor.hxx"
37 #include "MED_SharedPtr.hxx"
38 #include "MED_Vector.hxx"
39 #include "VTKViewer.h"
44 class vtkUnstructuredGrid;
55 //---------------------------------------------------------------
56 class VISU_CONVERTOR_EXPORT TStructuredId
64 operator [] ( size_t theId );
67 operator [] ( size_t theId ) const;
70 operator == ( const TStructuredId& theId ) const;
73 typedef std::map<vtkIdType, TStructuredId> TObj2StructuredId;
74 typedef MED::SharedPtr<TObj2StructuredId> PObj2StructuredId;
77 typedef MED::SharedPtr<TStructured> PStructured;
79 struct VISU_CONVERTOR_EXPORT TStructured
82 myIsStructured(false),
86 //! Copys all information which should be sinchronized between two instances
89 CopyStructure(PStructured theStructured);
95 * Get structure of grille
96 * see also MED::TGrilleInfo::GetGrilleStructure
97 * see also MED::TGrilleInfo::GetNbIndexes
106 * Gets i,j,k by object id
107 * return -1, if not found
110 GetIndexesOfNode(vtkIdType theNodeId);
113 * Gets object id by i,j,k
114 * return -1, if not found
117 GetObjectIDByIndexes(TStructuredId theVec);
119 bool myIsStructured; //!< To define mesh type (structured - true, non structured - false)
120 bool myIsPolarType; //!< To define structured mesh is polair
122 /*!provides grille structure for structured grid.
123 * Example: {3,4,5}, 3 nodes in X axe, 4 nodes in Y axe, ...
125 TStructuredId myGrilleStructure;
127 TObj2StructuredId myObj2StructuredId;//!< map of object id to i,j,k ids of structured grid nodes
130 //---------------------------------------------------------------
131 //! Defines a basic class for intemediate data structures
132 struct VISU_CONVERTOR_EXPORT TBaseStructure: virtual TStructured
134 //! Just to provide possibility of dynamic navigation through the class hierarchy
135 virtual ~TBaseStructure()
138 std::string myEntry; //!< To simplify publication of the object tree
140 typedef MED::SharedPtr<TBaseStructure> PBaseStructure;
142 //---------------------------------------------------------------
143 //! Defines a basic abstract interface for VTK to object ID's and backward mapping
145 Where object ID means ID which attached to corresponding MED entity.
146 For example, each MED node can have its own ID as well as any other mesh cell
148 struct VISU_CONVERTOR_EXPORT TIDMapper: virtual TBaseStructure
150 //! Get node object ID for corresponding VTK ID
153 GetNodeObjID(vtkIdType theID) const;
155 //! Get node VTK ID for corresponding object ID
158 GetNodeVTKID(vtkIdType theID) const;
160 //! Get coordinates of node for corresponding object ID
162 vtkFloatingPointType*
163 GetNodeCoord(vtkIdType theObjID);
165 //! Get cell object ID for corresponding VTK ID
168 GetElemObjID(vtkIdType theID) const;
170 //! Get cell VTK ID for corresponding object ID
173 GetElemVTKID(vtkIdType theID) const;
175 //! Get VTK representation of mesh cell for corresponding object ID
178 GetElemCell(vtkIdType theObjID);
180 //! Get VTK representation of mesh for corresponding MED entity
185 //! Gets memory size used by the instance (bytes).
190 typedef MED::SharedPtr<TIDMapper> PIDMapper;
193 //---------------------------------------------------------------
194 struct VISU_CONVERTOR_EXPORT TUnstructuredGridIDMapper: virtual TIDMapper
196 //! Get VTK representation of mesh for corresponding MED entity
199 GetUnstructuredGridOutput() = 0;
201 //! Reimplement the TIDMapper::GetOutput
206 typedef MED::SharedPtr<TUnstructuredGridIDMapper> PUnstructuredGridIDMapper;
209 //---------------------------------------------------------------
210 //! Defines an abstract interface for VTK to object ID's and backward mapping
212 This class defines some additional methods that allow get names for corresponding mesh elements
214 struct TNamedIDMapper: virtual TUnstructuredGridIDMapper
216 //! Get name of mesh node for corresponding object ID
219 GetNodeName(vtkIdType theObjID) const = 0;
221 //! Get name of mesh cell for corresponding object ID
224 GetElemName(vtkIdType theObjID) const = 0;
226 typedef MED::SharedPtr<TNamedIDMapper> PNamedIDMapper;
229 //---------------------------------------------------------------
230 struct TPolyDataIDMapper: virtual TIDMapper
232 //! Get VTK representation of mesh for corresponding MED entity
235 GetPolyDataOutput() = 0;
237 //! Reimplement the TIDMapper::GetOutput
242 typedef MED::SharedPtr<TPolyDataIDMapper> PPolyDataIDMapper;
245 //---------------------------------------------------------------
246 typedef vtkIdType TCellID;
247 typedef vtkIdType TLocalPntID;
248 //! Defines a type that represent complex ID for defined Gauss Point
249 typedef std::pair<TCellID,TLocalPntID> TGaussPointID;
251 struct TGaussPtsIDMapper: virtual TPolyDataIDMapper
253 //! Gets complex Gauss Point ID by its VTK ID
256 GetObjID(vtkIdType theID) const = 0;
258 //! Gets VTK ID by its complex Gauss Point ID
261 GetVTKID(const TGaussPointID& theID) const = 0;
263 //! Gets parent TNamedIDMapper, which contains reference mesh cells
266 GetParent() const = 0;
268 typedef MED::SharedPtr<TGaussPtsIDMapper> PGaussPtsIDMapper;
270 //---------------------------------------------------------------