⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 attribkernelt.hh

📁 penMesh is a generic and efficient data structure for representing and manipulating polygonal meshes
💻 HH
📖 第 1 页 / 共 2 页
字号:
/*===========================================================================*\ *                                                                           * *                               OpenMesh                                    * *      Copyright (C) 2001-2005 by Computer Graphics Group, RWTH Aachen      * *                           www.openmesh.org                                * *                                                                           * *---------------------------------------------------------------------------*  *                                                                           * *                                License                                    * *                                                                           * *  This library is free software; you can redistribute it and/or modify it  * *  under the terms of the GNU Library General Public License as published   * *  by the Free Software Foundation, version 2.                              * *                                                                           * *  This library is distributed in the hope that it will be useful, but      * *  WITHOUT ANY WARRANTY; without even the implied warranty of               * *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU        * *  Library General Public License for more details.                         * *                                                                           * *  You should have received a copy of the GNU Library General Public        * *  License along with this library; if not, write to the Free Software      * *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                * *                                                                           *\*===========================================================================*/#ifndef OPENMESH_KERNEL_OSG_ATTRIBKERNEL_HH#define OPENMESH_KENREL_OSG_ATTRIBKERNEL_HH//== INCLUDES =================================================================#include <OpenMesh/Core/Utils/GenProg.hh>#include <OpenMesh/Core/Attributes/Attributes.hh>// --------------------#include <OpenMesh/Tools/Kernel_OSG/PropertyT.hh>#include <OpenMesh/Tools/Kernel_OSG/PropertyKernel.hh>// --------------------#include <OpenSG/OSGGeometry.h>//== NAMESPACES ===============================================================namespace OpenMesh {namespace Kernel_OSG {//== CLASS DEFINITION =========================================================/// This class adds the standard properties to the mesh type.template <class MeshItems>class AttribKernelT   : public PropertyKernel< typename MeshItems::Face::IsTriangle >{protected:  typedef typename MeshItems::Face::IsTriangle IsTriMesh;  typedef PropertyKernel< IsTriMesh > Base;  typedef typename Base::FPTypesHandle         FPTypesHandle;  typedef typename Base::FPLengthsHandle       FPLengthsHandle;  typedef typename Base::FIndicesHandle        FIndicesHandle;public:  //---------------------------------------------------------------- item types  typedef typename MeshItems::Vertex             Vertex;  typedef typename MeshItems::Halfedge           Halfedge;  typedef typename MeshItems::Edge               Edge;  typedef typename MeshItems::Face               Face;  typedef typename MeshItems::Point              Point;  typedef typename MeshItems::Normal             Normal;  typedef typename MeshItems::Color              Color;  typedef typename MeshItems::TexCoord1D         TexCoord1D;  typedef typename MeshItems::TexCoord2D         TexCoord2D;  typedef typename MeshItems::TexCoord3D         TexCoord3D;  typedef typename MeshItems::Scalar             Scalar;  typedef Attributes::StatusInfo                 StatusInfo;  enum Attribs {    VAttribs = MeshItems::VAttribs,    HAttribs = MeshItems::HAttribs,    EAttribs = MeshItems::EAttribs,    FAttribs = MeshItems::FAttribs,  };  typedef GenProg::Bool2Type<(bool)(HAttribs & Attributes::PrevHalfedge)>     HasPrevHalfedge;  //  typedef typename _t2vp< Point >::prop                 GeoPositions;  typedef typename _t2vn< Normal >::prop                GeoNormals;  typedef typename _t2vc< Color  >::prop                GeoColors;  typedef typename _t2vtc< TexCoord2D >::prop           GeoTexCoords;//   typedef typename Base::GeoPTypes                      GeoPTypes;//   typedef typename Base::GeoPLengths                    GeoPLengths;//   typedef typename Base::GeoIndices                     GeoIndices;    //-------------------------------------------------- constructor / destructor  AttribKernelT() :    refcount_vnormals_(0),    refcount_vcolors_(0),    refcount_vtexcoords2D_(0),    refcount_vstatus_(0),    refcount_estatus_(0),    refcount_hstatus_(0),    refcount_fnormals_(0),    refcount_fcolors_(0),    refcount_fstatus_(0)  {    points_       = add_vpositions( Point(), "v:points" );    face_types_   = add_fptypes();    face_lengths_ = add_fplengths();    face_indices_ = add_findices( face_types_, face_lengths_);    if (VAttribs & Attributes::Normal)      request_vertex_normals();    if (VAttribs & Attributes::Color)      request_vertex_colors();    if (VAttribs & Attributes::TexCoord2D)      request_vertex_texcoords2D();    if (VAttribs & Attributes::Status)      request_vertex_status();    if (EAttribs & Attributes::Status)      request_edge_status();    if (FAttribs & Attributes::Normal)      request_face_normals();    if (FAttribs & Attributes::Color)      request_face_colors();    if (FAttribs & Attributes::Status)      request_face_status();  }  ~AttribKernelT()   {    // should remove properties, but this will be done in    // BaseKernel's destructor anyway...  }  // ------------------------------------------------------- copy & assignement  AttribKernelT( const AttribKernelT& _rhs )    : Base( _rhs )  {    operator=(_rhs);  }  AttribKernelT& operator = ( const AttribKernelT& _rhs )  {    // remove old properties    remove_property(points_);    remove_property(vertex_normals_);    remove_property(vertex_colors_);    remove_property(vertex_texcoords2D_);    remove_property(vertex_status_);    remove_property(halfedge_status_);    remove_property(edge_status_);    remove_property(face_normals_);    remove_property(face_colors_);    remove_property(face_status_);    // parent deep-copies properties    BaseKernel::operator=(_rhs);    // copy property handles    points_            = _rhs.points_;    vertex_normals_    = _rhs.vertex_normals_;    vertex_colors_     = _rhs.vertex_colors_;    vertex_texcoords2D_  = _rhs.vertex_texcoords2D_;    vertex_status_     = _rhs.vertex_status_;    halfedge_status_   = _rhs.halfedge_status_;    edge_status_       = _rhs.edge_status_;    face_normals_      = _rhs.face_normals_;    face_colors_       = _rhs.face_colors_;    face_status_       = _rhs.face_status_;    // copy ref-counts    refcount_vnormals_   = _rhs.refcount_vnormals_;    refcount_vcolors_    = _rhs.refcount_vcolors_;    refcount_vtexcoords2D_ = _rhs.refcount_vtexcoords2D_;    refcount_vstatus_    = _rhs.refcount_vstatus_;    refcount_hstatus_    = _rhs.refcount_hstatus_;    refcount_estatus_    = _rhs.refcount_estatus_;    refcount_fnormals_   = _rhs.refcount_fnormals_;    refcount_fcolors_    = _rhs.refcount_fcolors_;    refcount_fstatus_    = _rhs.refcount_fstatus_;    return *this;  }  //------------------------------------------------------------ osg properties  //------------------------------ vertex property  typename GeoPositions::property_ptr_t osg_vpositions()  { return vpositions(points_).osg_ptr(); }  typename GeoNormals::property_ptr_t osg_vnormals()   { return vnormals(vertex_normals_).osg_ptr(); }  typename GeoColors::property_ptr_t osg_vcolors()   { return vcolors(vertex_colors_).osg_ptr(); }  typename GeoTexCoords::property_ptr_t osg_vtexcoords()   { return vtexcoords(vertex_texcoords2D_).osg_ptr(); }  //------------------------------ face property  GeoPTypes::property_ptr_t osg_ptypes()   { return fptypes( face_types_ ).osg_ptr(); }  GeoPLengths::property_ptr_t osg_plengths()   { return fplengths( face_lengths_ ).osg_ptr(); }  typename GeoIndices::property_ptr_t osg_indices()   { return findices( face_indices_ ).osg_ptr(); }  //---------------------------------------- set osg geo property    //------------------------------ face property  void set_face_types( FaceHandle _fh, GeoPTypes::value_type _t)  { fptypes( face_types_, _fh ) = _t; }  void set_face_lengths( FaceHandle _fh, GeoPLengths::value_type _l)   { fplengths( face_lengths_, _fh ) = _l; }  void set_face_indices( FaceHandle _fh, 			 typename GeoIndices::value_type _i)   { findices( face_indices_, _fh ) = _i; }  //--------------------------------------------------------- set/get properties  //---------------------------------------- points  const Point* points() const   { return vpositions( points_ ).data(); }  const Point& point(VertexHandle _vh) const   { return vpositions( points_, _vh); }  void set_point(VertexHandle _vh, const Point& _p)   { vpositions( points_, _vh ) = _p; }  //---------------------------------------- vertex normals  const Normal* vertex_normals() const {    return vnormals(vertex_normals_).data();   }  const Normal& normal(VertexHandle _vh) const {    return vnormals(vertex_normals_, _vh);  }  void set_normal(VertexHandle _vh, const Normal& _n) {    vnormals(vertex_normals_, _vh) = _n;  }  //---------------------------------------- vertex colors  const Color* vertex_colors() const {    return vcolors(vertex_colors_).data();   }  const Color& color(VertexHandle _vh) const {    return vcolors(vertex_colors_, _vh);  }  void set_color(VertexHandle _vh, const Color& _c) {    vcolors(vertex_colors_, _vh) = _c;  }  //---------------------------------------- vertex texcoords  const TexCoord2D* texcoords2D() const {    return vtexcoords(vertex_texcoords2D_).data();   }  const TexCoord2D& texcoord2D(VertexHandle _vh) const {    return vtexcoords(vertex_texcoords2D_, _vh);  }  void set_texcoord2D(VertexHandle _vh, const TexCoord2D& _t) {    vtexcoords(vertex_texcoords2D_, _vh) = _t;  }  //---------------------------------------- vertex status  const StatusInfo& status(VertexHandle _vh) const {    return property(vertex_status_, _vh);  }  StatusInfo& status(VertexHandle _vh) {    return property(vertex_status_, _vh);  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -