42 #ifndef OPENMESH_MESH_ITEMS_HH
43 #define OPENMESH_MESH_ITEMS_HH
49 #include <OpenMesh/Core/System/config.h>
50 #include <OpenMesh/Core/Utils/GenProg.hh>
51 #include <OpenMesh/Core/Utils/vector_traits.hh>
52 #include <OpenMesh/Core/Mesh/Handles.hh>
64 template <
class Traits,
bool IsTriMesh>
68 #ifndef DOXY_IGNORE_THIS
71 typedef typename Traits::Point Point;
87 typedef typename Refs::Point Point;
88 typedef typename Refs::Scalar Scalar;
120 typedef typename Traits::template VertexT<ITraits, Refs> VertexData;
121 typedef typename Traits::template HalfedgeT<ITraits, Refs> HalfedgeData;
122 typedef typename Traits::template EdgeT<ITraits, Refs> EdgeData;
123 typedef typename Traits::template FaceT<ITraits, Refs> FaceData;
127 #ifndef DOXY_IGNORE_THIS
130 template<
typename Lhs,
typename Rhs>
struct TypeEquality;
131 template<
typename Lhs>
struct TypeEquality<Lhs, Lhs> {};
133 template<
typename LhsTraits,
typename RhsTraits>
struct ItemsEquality {
134 TypeEquality<typename LhsTraits::Point, typename RhsTraits::Point> te1;
135 TypeEquality<typename LhsTraits::Scalar, typename RhsTraits::Scalar> te2;
136 TypeEquality<typename LhsTraits::Normal, typename RhsTraits::Normal> te3;
137 TypeEquality<typename LhsTraits::Color, typename RhsTraits::Color> te4;
138 TypeEquality<typename LhsTraits::TexCoord1D, typename RhsTraits::TexCoord1D> te5;
139 TypeEquality<typename LhsTraits::TexCoord2D, typename RhsTraits::TexCoord2D> te6;
140 TypeEquality<typename LhsTraits::TexCoord3D, typename RhsTraits::TexCoord3D> te7;
141 TypeEquality<typename LhsTraits::TextureIndex, typename RhsTraits::TextureIndex> te8;
176 template<
typename LhsMeshT,
typename RhsMeshT>
struct MeshCast;
178 template<
typename LhsMeshT,
typename RhsMeshT>
180 static LhsMeshT &cast(RhsMeshT &rhs) {
181 (void)
sizeof(TM::ItemsEquality<typename LhsMeshT::MeshItemsT, typename RhsMeshT::MeshItemsT>);
182 (void)
sizeof(TM::TypeEquality<typename LhsMeshT::ConnectivityT, typename RhsMeshT::ConnectivityT>);
183 return reinterpret_cast<LhsMeshT&
>(rhs);
187 template<
typename LhsMeshT,
typename RhsMeshT>
188 struct MeshCast<const LhsMeshT&,
const RhsMeshT&> {
189 static const LhsMeshT &cast(
const RhsMeshT &rhs) {
190 (void)
sizeof(TM::ItemsEquality<typename LhsMeshT::MeshItemsT, typename RhsMeshT::MeshItemsT>);
191 (void)
sizeof(TM::TypeEquality<typename LhsMeshT::ConnectivityT, typename RhsMeshT::ConnectivityT>);
192 return reinterpret_cast<const LhsMeshT&
>(rhs);
196 template<
typename LhsMeshT,
typename RhsMeshT>
198 static LhsMeshT *cast(RhsMeshT *rhs) {
199 (void)
sizeof(TM::ItemsEquality<typename LhsMeshT::MeshItemsT, typename RhsMeshT::MeshItemsT>);
200 (void)
sizeof(TM::TypeEquality<typename LhsMeshT::ConnectivityT, typename RhsMeshT::ConnectivityT>);
201 return reinterpret_cast<LhsMeshT*
>(rhs);
205 template<
typename LhsMeshT,
typename RhsMeshT>
206 struct MeshCast<const LhsMeshT*,
const RhsMeshT*> {
207 static const LhsMeshT *cast(
const RhsMeshT *rhs) {
208 (void)
sizeof(TM::ItemsEquality<typename LhsMeshT::MeshItemsT, typename RhsMeshT::MeshItemsT>);
209 (void)
sizeof(TM::TypeEquality<typename LhsMeshT::ConnectivityT, typename RhsMeshT::ConnectivityT>);
210 return reinterpret_cast<const LhsMeshT*
>(rhs);
218 #endif // OPENMESH_MESH_ITEMS_HH defined
Add normals to mesh item (vertices/faces)
Definition: Attributes.hh:80
Add colors to mesh item (vertices/faces/edges)
Definition: Attributes.hh:81
#define FaceAttributes(_i)
Macro for defining the face attributes. See Specifying your MyMesh.
Definition: Traits.hh:86
Add 1D texture coordinates (vertices, halfedges)
Definition: Attributes.hh:84
Helper class providing information about a vector type.
Definition: vector_traits.hh:86
#define VertexAttributes(_i)
Macro for defining the vertex attributes. See Specifying your MyMesh.
Definition: Traits.hh:77
Add 2D texture coordinates (vertices, halfedges)
Definition: Attributes.hh:85
Handle for a vertex entity.
Definition: Handles.hh:114
Handle for a face entity.
Definition: Handles.hh:135
Add 3D texture coordinates (vertices, halfedges)
Definition: Attributes.hh:86
Handle for a halfedge entity.
Definition: Handles.hh:121
Handle for a edge entity.
Definition: Handles.hh:128
#define HalfedgeAttributes(_i)
Macro for defining the halfedge attributes. See Specifying your MyMesh.
Definition: Traits.hh:80
Cast a mesh with different but identical traits into each other.
Definition: FinalMeshItemsT.hh:176
Definition of the mesh entities (items).
Definition: FinalMeshItemsT.hh:65
Add texture index (faces)
Definition: Attributes.hh:87
Contains all the mesh ingredients like the polygonal mesh, the triangle mesh, different mesh kernels ...
Definition: MeshItems.hh:56
Definition: FinalMeshItemsT.hh:117
#define EdgeAttributes(_i)
Macro for defining the edge attributes. See Specifying your MyMesh.
Definition: Traits.hh:83