49#ifndef OPENMESH_MESH_ITEMS_HH
50#define OPENMESH_MESH_ITEMS_HH
56#include <OpenMesh/Core/System/config.h>
57#include <OpenMesh/Core/Utils/GenProg.hh>
58#include <OpenMesh/Core/Utils/vector_traits.hh>
59#include <OpenMesh/Core/Mesh/Handles.hh>
71template <
class Traits,
bool IsTriMesh>
75#ifndef DOXY_IGNORE_THIS
78 typedef typename Traits::Point Point;
81 typedef typename Traits::Normal Normal;
82 typedef typename Traits::Color Color;
83 typedef typename Traits::TexCoord1D TexCoord1D;
84 typedef typename Traits::TexCoord2D TexCoord2D;
85 typedef typename Traits::TexCoord3D TexCoord3D;
86 typedef typename Traits::TextureIndex TextureIndex;
94 typedef typename Refs::Point Point;
95 typedef typename Refs::Scalar Scalar;
96 typedef typename Refs::Normal Normal;
97 typedef typename Refs::Color Color;
98 typedef typename Refs::TexCoord1D TexCoord1D;
99 typedef typename Refs::TexCoord2D TexCoord2D;
100 typedef typename Refs::TexCoord3D TexCoord3D;
101 typedef typename Refs::TextureIndex TextureIndex;
106 VAttribs = Traits::VertexAttributes,
107 HAttribs = Traits::HalfedgeAttributes,
108 EAttribs = Traits::EdgeAttributes,
109 FAttribs = Traits::FaceAttributes
127 typedef typename Traits::template VertexT<ITraits, Refs> VertexData;
128 typedef typename Traits::template HalfedgeT<ITraits, Refs> HalfedgeData;
129 typedef typename Traits::template EdgeT<ITraits, Refs> EdgeData;
130 typedef typename Traits::template FaceT<ITraits, Refs> FaceData;
134#ifndef DOXY_IGNORE_THIS
137template<
typename Lhs,
typename Rhs>
struct TypeEquality;
138template<
typename Lhs>
struct TypeEquality<Lhs, Lhs> {};
140template<
typename LhsTraits,
typename RhsTraits>
struct ItemsEquality {
141 TypeEquality<typename LhsTraits::Point, typename RhsTraits::Point> te1;
142 TypeEquality<typename LhsTraits::Scalar, typename RhsTraits::Scalar> te2;
143 TypeEquality<typename LhsTraits::Normal, typename RhsTraits::Normal> te3;
144 TypeEquality<typename LhsTraits::Color, typename RhsTraits::Color> te4;
145 TypeEquality<typename LhsTraits::TexCoord1D, typename RhsTraits::TexCoord1D> te5;
146 TypeEquality<typename LhsTraits::TexCoord2D, typename RhsTraits::TexCoord2D> te6;
147 TypeEquality<typename LhsTraits::TexCoord3D, typename RhsTraits::TexCoord3D> te7;
148 TypeEquality<typename LhsTraits::TextureIndex, typename RhsTraits::TextureIndex> te8;
183template<
typename LhsMeshT,
typename RhsMeshT>
struct MeshCast;
185template<
typename LhsMeshT,
typename RhsMeshT>
187 static LhsMeshT &cast(RhsMeshT &rhs) {
188 (void)
sizeof(TM::ItemsEquality<typename LhsMeshT::MeshItemsT, typename RhsMeshT::MeshItemsT>);
189 (void)
sizeof(TM::TypeEquality<typename LhsMeshT::ConnectivityT, typename RhsMeshT::ConnectivityT>);
190 return reinterpret_cast<LhsMeshT&
>(rhs);
194template<
typename LhsMeshT,
typename RhsMeshT>
196 static const LhsMeshT &cast(
const RhsMeshT &rhs) {
197 (void)
sizeof(TM::ItemsEquality<typename LhsMeshT::MeshItemsT, typename RhsMeshT::MeshItemsT>);
198 (void)
sizeof(TM::TypeEquality<typename LhsMeshT::ConnectivityT, typename RhsMeshT::ConnectivityT>);
199 return reinterpret_cast<const LhsMeshT&
>(rhs);
203template<
typename LhsMeshT,
typename RhsMeshT>
205 static LhsMeshT *cast(RhsMeshT *rhs) {
206 (void)
sizeof(TM::ItemsEquality<typename LhsMeshT::MeshItemsT, typename RhsMeshT::MeshItemsT>);
207 (void)
sizeof(TM::TypeEquality<typename LhsMeshT::ConnectivityT, typename RhsMeshT::ConnectivityT>);
208 return reinterpret_cast<LhsMeshT*
>(rhs);
212template<
typename LhsMeshT,
typename RhsMeshT>
214 static const LhsMeshT *cast(
const RhsMeshT *rhs) {
215 (void)
sizeof(TM::ItemsEquality<typename LhsMeshT::MeshItemsT, typename RhsMeshT::MeshItemsT>);
216 (void)
sizeof(TM::TypeEquality<typename LhsMeshT::ConnectivityT, typename RhsMeshT::ConnectivityT>);
217 return reinterpret_cast<const LhsMeshT*
>(rhs);
Contains all the mesh ingredients like the polygonal mesh, the triangle mesh, different mesh kernels ...
Definition: MeshItems.hh:64
Definition of the mesh entities (items).
Definition: FinalMeshItemsT.hh:73
Definition: FinalMeshItemsT.hh:125
Cast a mesh with different but identical traits into each other.
Definition: FinalMeshItemsT.hh:183
Handle for a vertex entity.
Definition: Handles.hh:126
Handle for a halfedge entity.
Definition: Handles.hh:133
Handle for a edge entity.
Definition: Handles.hh:140
Handle for a face entity.
Definition: Handles.hh:147
T::value_type value_type
Type of the scalar value.
Definition: vector_traits.hh:99