1 // Copyright (C) 2007-2010 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
24 // File : VISU_Convertor.hxx
25 // Author : Alexey PETROV
28 #ifndef VISU_IDMapper_HeaderFile
29 #define VISU_IDMapper_HeaderFile
32 \file VISU_IDMapper.hxx
33 \brief The file contains declarations for basic interfaces that defines mapping of mesh elements
36 #include "VISUConvertor.hxx"
38 #include "MED_SharedPtr.hxx"
39 #include "MED_Vector.hxx"
40 #include "VTKViewer.h"
45 class vtkUnstructuredGrid;
56 //---------------------------------------------------------------
57 class VISU_CONVERTOR_EXPORT TStructuredId
65 operator [] ( size_t theId );
68 operator [] ( size_t theId ) const;
71 operator == ( const TStructuredId& theId ) const;
74 typedef std::map<vtkIdType, TStructuredId> TObj2StructuredId;
75 typedef MED::SharedPtr<TObj2StructuredId> PObj2StructuredId;
78 typedef MED::SharedPtr<TStructured> PStructured;
80 struct VISU_CONVERTOR_EXPORT TStructured
83 myIsStructured(false),
87 //! Copys all information which should be sinchronized between two instances
90 CopyStructure(PStructured theStructured);
96 * Get structure of grille
97 * see also MED::TGrilleInfo::GetGrilleStructure
98 * see also MED::TGrilleInfo::GetNbIndexes
107 * Gets i,j,k by object id
108 * return -1, if not found
111 GetIndexesOfNode(vtkIdType theNodeId);
114 * Gets object id by i,j,k
115 * return -1, if not found
118 GetObjectIDByIndexes(TStructuredId theVec);
120 bool myIsStructured; //!< To define mesh type (structured - true, non structured - false)
121 bool myIsPolarType; //!< To define structured mesh is polair
123 /*!provides grille structure for structured grid.
124 * Example: {3,4,5}, 3 nodes in X axe, 4 nodes in Y axe, ...
126 TStructuredId myGrilleStructure;
128 TObj2StructuredId myObj2StructuredId;//!< map of object id to i,j,k ids of structured grid nodes
131 //---------------------------------------------------------------
132 //! Defines a basic class for intemediate data structures
133 struct VISU_CONVERTOR_EXPORT TBaseStructure: virtual TStructured
135 //! Just to provide possibility of dynamic navigation through the class hierarchy
136 virtual ~TBaseStructure()
139 std::string myEntry; //!< To simplify publication of the object tree
141 typedef MED::SharedPtr<TBaseStructure> PBaseStructure;
143 //---------------------------------------------------------------
144 //! Defines a basic abstract interface for VTK to object ID's and backward mapping
146 Where object ID means ID which attached to corresponding MED entity.
147 For example, each MED node can have its own ID as well as any other mesh cell
149 struct VISU_CONVERTOR_EXPORT TIDMapper: virtual TBaseStructure
151 //! Get node object ID for corresponding VTK ID
154 GetNodeObjID(vtkIdType theID) const;
156 //! Get node VTK ID for corresponding object ID
159 GetNodeVTKID(vtkIdType theID) const;
161 //! Get coordinates of node for corresponding object ID
163 vtkFloatingPointType*
164 GetNodeCoord(vtkIdType theObjID);
166 //! Get cell object ID for corresponding VTK ID
169 GetElemObjID(vtkIdType theID) const;
171 //! Get cell VTK ID for corresponding object ID
174 GetElemVTKID(vtkIdType theID) const;
176 //! Get VTK representation of mesh cell for corresponding object ID
179 GetElemCell(vtkIdType theObjID);
181 //! Get VTK representation of mesh for corresponding MED entity
186 //! Gets memory size used by the instance (bytes).
191 typedef MED::SharedPtr<TIDMapper> PIDMapper;
194 //---------------------------------------------------------------
195 struct VISU_CONVERTOR_EXPORT TUnstructuredGridIDMapper: virtual TIDMapper
197 //! Get VTK representation of mesh for corresponding MED entity
200 GetUnstructuredGridOutput() = 0;
202 //! Reimplement the TIDMapper::GetOutput
207 typedef MED::SharedPtr<TUnstructuredGridIDMapper> PUnstructuredGridIDMapper;
210 //---------------------------------------------------------------
211 //! Defines an abstract interface for VTK to object ID's and backward mapping
213 This class defines some additional methods that allow get names for corresponding mesh elements
215 struct TNamedIDMapper: virtual TUnstructuredGridIDMapper
217 //! Get name of mesh node for corresponding object ID
220 GetNodeName(vtkIdType theObjID) const = 0;
222 //! Get name of mesh cell for corresponding object ID
225 GetElemName(vtkIdType theObjID) const = 0;
227 typedef MED::SharedPtr<TNamedIDMapper> PNamedIDMapper;
230 //---------------------------------------------------------------
231 struct TPolyDataIDMapper: virtual TIDMapper
233 //! Get VTK representation of mesh for corresponding MED entity
236 GetPolyDataOutput() = 0;
238 //! Reimplement the TIDMapper::GetOutput
243 typedef MED::SharedPtr<TPolyDataIDMapper> PPolyDataIDMapper;
246 //---------------------------------------------------------------
247 typedef vtkIdType TCellID;
248 typedef vtkIdType TLocalPntID;
249 //! Defines a type that represent complex ID for defined Gauss Point
250 typedef std::pair<TCellID,TLocalPntID> TGaussPointID;
252 struct TGaussPtsIDMapper: virtual TPolyDataIDMapper
254 //! Gets complex Gauss Point ID by its VTK ID
257 GetObjID(vtkIdType theID) const = 0;
259 //! Gets VTK ID by its complex Gauss Point ID
262 GetVTKID(const TGaussPointID& theID) const = 0;
264 //! Gets parent TNamedIDMapper, which contains reference mesh cells
267 GetParent() const = 0;
269 typedef MED::SharedPtr<TGaussPtsIDMapper> PGaussPtsIDMapper;
271 //---------------------------------------------------------------