1 // Copyright (C) 2007-2013 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"
47 class vtkUnstructuredGrid;
51 class vtkAlgorithmOutput;
59 //---------------------------------------------------------------
60 class VISU_CONVERTOR_EXPORT TStructuredId
68 operator [] ( size_t theId );
71 operator [] ( size_t theId ) const;
74 operator == ( const TStructuredId& theId ) const;
77 typedef std::map<vtkIdType, TStructuredId> TObj2StructuredId;
78 typedef MED::SharedPtr<TObj2StructuredId> PObj2StructuredId;
81 typedef MED::SharedPtr<TStructured> PStructured;
83 struct VISU_CONVERTOR_EXPORT TStructured
86 myIsStructured(false),
90 //! Copys all information which should be sinchronized between two instances
93 CopyStructure(PStructured theStructured);
99 * Get structure of grille
100 * see also MED::TGrilleInfo::GetGrilleStructure
101 * see also MED::TGrilleInfo::GetNbIndexes
110 * Gets i,j,k by object id
111 * return -1, if not found
114 GetIndexesOfNode(vtkIdType theNodeId);
117 * Gets object id by i,j,k
118 * return -1, if not found
121 GetObjectIDByIndexes(TStructuredId theVec);
123 bool myIsStructured; //!< To define mesh type (structured - true, non structured - false)
124 bool myIsPolarType; //!< To define structured mesh is polair
126 /*!provides grille structure for structured grid.
127 * Example: {3,4,5}, 3 nodes in X axe, 4 nodes in Y axe, ...
129 TStructuredId myGrilleStructure;
131 TObj2StructuredId myObj2StructuredId;//!< map of object id to i,j,k ids of structured grid nodes
134 //---------------------------------------------------------------
135 //! Defines a basic class for intemediate data structures
136 struct VISU_CONVERTOR_EXPORT TBaseStructure: virtual TStructured
138 //! Just to provide possibility of dynamic navigation through the class hierarchy
139 virtual ~TBaseStructure()
142 std::string myEntry; //!< To simplify publication of the object tree
144 typedef MED::SharedPtr<TBaseStructure> PBaseStructure;
146 //---------------------------------------------------------------
147 //! Defines a basic abstract interface for VTK to object ID's and backward mapping
149 Where object ID means ID which attached to corresponding MED entity.
150 For example, each MED node can have its own ID as well as any other mesh cell
152 struct VISU_CONVERTOR_EXPORT TIDMapper: virtual TBaseStructure
154 //! Get node object ID for corresponding VTK ID
157 GetNodeObjID(vtkIdType theID) const;
159 //! Get node VTK ID for corresponding object ID
162 GetNodeVTKID(vtkIdType theID) const;
164 //! Get coordinates of node for corresponding object ID
167 GetNodeCoord(vtkIdType theObjID);
169 //! Get cell object ID for corresponding VTK ID
172 GetElemObjID(vtkIdType theID) const;
174 //! Get cell VTK ID for corresponding object ID
177 GetElemVTKID(vtkIdType theID) const;
179 //! Get VTK representation of mesh cell for corresponding object ID
182 GetElemCell(vtkIdType theObjID);
184 //! Get VTK representation of mesh for corresponding MED entity
189 //! Gets memory size used by the instance (bytes).
194 typedef MED::SharedPtr<TIDMapper> PIDMapper;
197 //---------------------------------------------------------------
198 struct VISU_CONVERTOR_EXPORT TUnstructuredGridIDMapper: virtual TIDMapper
200 //! Get VTK representation of mesh for corresponding MED entity
203 GetUnstructuredGridOutput() = 0;
205 //! Reimplement the TIDMapper::GetOutput
210 //! Get VTK representation of mesh for corresponding MED entity as algorithm output
215 typedef MED::SharedPtr<TUnstructuredGridIDMapper> PUnstructuredGridIDMapper;
218 //---------------------------------------------------------------
219 //! Defines an abstract interface for VTK to object ID's and backward mapping
221 This class defines some additional methods that allow get names for corresponding mesh elements
223 struct TNamedIDMapper: virtual TUnstructuredGridIDMapper
225 //! Get name of mesh node for corresponding object ID
228 GetNodeName(vtkIdType theObjID) const = 0;
230 //! Get name of mesh cell for corresponding object ID
233 GetElemName(vtkIdType theObjID) const = 0;
235 typedef MED::SharedPtr<TNamedIDMapper> PNamedIDMapper;
238 //---------------------------------------------------------------
239 struct TPolyDataIDMapper: virtual TIDMapper
241 //! Get VTK representation of mesh for corresponding MED entity
244 GetPolyDataOutput() = 0;
246 //! Reimplement the TIDMapper::GetOutput
251 //! Get VTK representation of mesh for corresponding MED entity as algorithm output
256 typedef MED::SharedPtr<TPolyDataIDMapper> PPolyDataIDMapper;
259 //---------------------------------------------------------------
260 typedef vtkIdType TCellID;
261 typedef vtkIdType TLocalPntID;
262 //! Defines a type that represent complex ID for defined Gauss Point
263 typedef std::pair<TCellID,TLocalPntID> TGaussPointID;
265 struct TGaussPtsIDMapper: virtual TPolyDataIDMapper
267 //! Gets complex Gauss Point ID by its VTK ID
270 GetObjID(vtkIdType theID) const = 0;
272 //! Gets VTK ID by its complex Gauss Point ID
275 GetVTKID(const TGaussPointID& theID) const = 0;
277 //! Gets parent TNamedIDMapper, which contains reference mesh cells
280 GetParent() const = 0;
282 typedef MED::SharedPtr<TGaussPtsIDMapper> PGaussPtsIDMapper;
284 //---------------------------------------------------------------