Go to the documentation of this file.00001
00063 #ifndef COB_MESH_PROPERTY_TYPES_H
00064 #define COB_MESH_PROPERTY_TYPES_H
00065
00066 #include <OpenMesh/Core/IO/MeshIO.hh>
00067 #include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
00068
00069 namespace cob_3d_meshing
00070 {
00071 class DefaultMeshTraits
00072 {
00073 public:
00074 typedef OpenMesh::TriMesh_ArrayKernelT<> MeshT;
00075 typedef MeshT::VertexHandle VertexHandle;
00076 typedef MeshT::FaceHandle FaceHandle;
00077 };
00078
00079
00080 namespace MeshProperties
00081 {
00082
00083 template<typename PointNormalT,
00084 typename MeshTraits = DefaultMeshTraits>
00085 class Normals
00086 {
00087 public:
00088 typedef PointNormalT T1;
00089 typedef typename MeshTraits::MeshT MeshT;
00090 typedef typename MeshTraits::VertexHandle VertexHandle;
00091 typedef typename pcl::PointCloud<T1>::ConstPtr DataPtrT;
00092 typedef OpenMesh::Vec3f PropT;
00093 typedef OpenMesh::VPropHandleT<PropT> PropHandle;
00094
00095 Normals(const DataPtrT& data) { data_ = data; }
00096
00097 inline static std::string name() { return "Normals"; }
00098
00099 inline void init(MeshT* mesh_hdl)
00100 {
00101 mesh_ = mesh_hdl;
00102 mesh_->add_property(prop_hdl_, name());
00103 }
00104
00105 inline void setVertex(const VertexHandle& vertex_hdl, int idx)
00106 {
00107 Eigen::Vector3f n = (*data_)[idx].getNormalVector3fMap();
00108 mesh_->property(prop_hdl_, vertex_hdl) = PropT(n(0), n(1), n(2));
00109 }
00110
00111 private:
00112 MeshT* mesh_;
00113 DataPtrT data_;
00114 PropHandle prop_hdl_;
00115 };
00116
00117
00118 template<typename PointLabelT,
00119 typename MeshTraits = DefaultMeshTraits>
00120 class Labels
00121 {
00122 public:
00123 typedef PointLabelT T1;
00124 typedef typename MeshTraits::MeshT MeshT;
00125 typedef typename MeshTraits::VertexHandle VertexHandle;
00126 typedef typename pcl::PointCloud<T1>::ConstPtr DataPtrT;
00127 typedef int PropT;
00128 typedef OpenMesh::VPropHandleT<PropT> PropHandle;
00129
00130 Labels(const DataPtrT& data) { data_ = data; }
00131
00132 static std::string name() { return "Labels"; }
00133
00134 inline void init(MeshT* mesh_hdl)
00135 {
00136 mesh_ = mesh_hdl;
00137 mesh_->add_property( prop_hdl_, name() );
00138 }
00139
00140 inline void setVertex(const VertexHandle& vertex_hdl, int idx)
00141 {
00142 mesh_->property( prop_hdl_, vertex_hdl ) = (*data_)[idx].label;
00143 }
00144
00145 private:
00146 MeshT* mesh_;
00147 DataPtrT data_;
00148 PropHandle prop_hdl_;
00149 };
00150
00151
00152
00153
00154 }
00155 }
00156
00157 #endif