HyperspaceExplorer 0.7.1
|
00001 /* 00002 Hyperspace Explorer - visualizing higher-dimensional geometry 00003 Copyright (C) 2009-2010 Lene Preuss <lene.preuss@gmail.com> 00004 00005 This program is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published by 00007 the Free Software Foundation; either version 2 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License along 00016 with this program; if not, write to the Free Software Foundation, Inc., 00017 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 00018 00019 */ 00020 00021 #ifndef TORATE_H 00022 #define TORATE_H 00023 00024 #include "Rotope.h" 00025 00027 00031 template <unsigned D> 00032 class torate_base: public VertexData<D> { 00033 00034 public: 00036 torate_base(const VertexData<D> &v): 00037 VertexData<D>(v) { } 00038 00040 void torate(unsigned d); 00041 00043 virtual void setRotationSegments(unsigned numSegments) { 00044 std::cerr << "torate_base::setRotationSegments(" << numSegments << ")\n"; 00045 _numSegments = numSegments; 00046 } 00047 private: 00049 unsigned _numSegments; 00050 }; 00051 00053 00083 template <unsigned D, unsigned Dmin, unsigned Dmax> 00084 class Torate: public Torate<D, Dmin, Dmax-1> { 00085 public: 00087 00093 Torate(const VertexData<D> &v): Torate<D, Dmin, Dmax-1>(v) { 00094 torate_base<D>::torate(Dmax); 00095 } 00096 }; 00097 00099 00105 template <unsigned D, unsigned Dmin> 00106 class Torate<D, Dmin, Dmin>: public torate_base<D> { 00107 public: 00109 00114 Torate(const VertexData<D> &v): torate_base<D>(v) { 00115 torate_base<D>::torate(Dmin); 00116 } 00117 }; 00118 00119 template <unsigned D> void torate_base<D>::torate(unsigned) { 00120 throw NotYetImplementedException("torate_base<D>::torate()"); 00121 } 00122 00123 #endif