/**************************************************************************** * VCGLib o o * * Visual and Computer Graphics Library o o * * _ O _ * * Copyright(C) 2004 \/)\/ * * Visual Computing Lab /\/| * * ISTI - Italian National Research Council | * * \ * * All rights reserved. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program 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 General Public License (http://www.gnu.org/licenses/gpl.txt) * * for more details. * * * ****************************************************************************/ /**************************************************************************** History $Log: not supported by cvs2svn $ Revision 1.3 2004/03/31 14:16:40 ganovelli Data structure to handle temporary attributes. First version Revision 1.2 2004/03/31 13:15:28 cignoni Added optional cpmponent Revision 1.1 2004/03/31 12:46:53 cignoni First working version! ****************************************************************************/ #ifndef __VCG_VERTEX_PLUS_COMPONENT_OPT #define __VCG_VERTEX_PLUS_COMPONENT_OPT #include #include namespace vcg { namespace vert { /* Some naming Rules All the Components that can be added to a vertex should be defined in the namespace vert: */ /*------------------------- COORD -----------------------------------------*/ template class CoordOpt: public T { public: typedef A CoordType; typedef typename CoordType::ScalarType ScalarType; CoordType &P() { return CAT< TVector,CoordType>::Get((VertType*)this); } CoordType &UberP() { return CAT< TVector,CoordType>::Get((VertType*)this); } }; template class Coord3fOpt: public CoordOpt {}; template class Coord3dOpt: public CoordOpt {}; /*-------------------------- NORMAL ----------------------------------------*/ template class NormalOpt: public T { public: typedef A NormalType; NormalType &N() {return CAT< TVector,NormalType>::Get((VertType*)this); } private: NormalType _norm; }; template class Normal3sOpt: public NormalOpt {}; template class Normal3fOpt: public NormalOpt {}; template class Normal3dOpt: public NormalOpt {}; /*-------------------------- TEXTURE ----------------------------------------*/ template class TextureOpt: public T { public: typedef A TextureType; TextureType &T() {return CAT< TVector,TextureType>::Get((VertType*)this); } static bool HasTexture() { return true; } private: TextureType _t; }; template class Texture2sOpt: public TextureOpt, T> {}; template class Texture2fOpt: public TextureOpt, T> {}; template class Texture2dOpt: public TextureOpt, T> {}; ///*------------------------- FLAGS -----------------------------------------*/ template class FlagOpt: public T { public: int &Flags() {return CAT< TVector,int>::Get((VertType*)this); } const int Flags() const {return _flags; } private: int _flags; }; ///*-------------------------- COLOR ----------------------------------*/ template class ColorOpt: public T { public: typedef A ColorType; ColorType &C() { return CAT< TVector,ColorType>::Get((VertType*)this); } static bool HasColor() { return true; } private: ColorType _color; }; template class Color4bOpt: public ColorOpt {}; ///*-------------------------- Quality ----------------------------------*/ template class QualityOpt: public T { public: typedef A QualityType; QualityType &Q() { return CAT< TVector,QualityType>::Get((VertType*)this);} static bool HasQuality() { return true; } private: QualityType _quality; }; template class QualitysOpt: public QualityOpt {}; template class QualityfOpt: public QualityOpt {}; template class QualitydOpt: public QualityOpt {}; // ///*----------------------------- VFADJ ------------------------------*/ template class VFAdjOpt: public T { public: typename T::FacePointer &Fp() {return CAT< TVector,T::FacePointer>::Get((VertType*)this); } int &Zp() {return _zp; } static bool HasVFAdjacency() { return true; } private: typename T::FacePointer _fp ; int _zp ; }; } // end namespace vert }// end namespace vcg #endif