![]() |
TAPs 0.7.7.3
|
00001 /****************************************************************************** 00002 TAPsShape.cpp 00003 ******************************************************************************/ 00007 /****************************************************************************** 00008 SUKITTI PUNAK (03/25/2010) 00009 UPDATE (05/01/2010) 00010 ******************************************************************************/ 00011 #include "TAPsShape.hpp" 00012 // Using Inclusion Model (i.e. definitions are included in declarations) 00013 // (this name.cpp is included in name.hpp) 00014 // Each friend is defined directly inside its declaration. 00015 00016 BEGIN_NAMESPACE_TAPs 00017 //============================================================================= 00018 //----------------------------------------------------------------------------- 00019 template <typename T> 00020 Shape<T>::Shape () 00021 : m_ShapeType( Enum::UNDEFINED_SHAPE ) 00022 #if defined(__gl_h_) || defined(__GL_H__) 00023 , m_pModel( NULL ) 00024 #endif 00025 { 00026 #ifdef TAPs_ENABLE_DEBUG 00027 std::cout << "Shape<T> Default Constructor.\n"; 00028 #endif 00029 } 00030 //----------------------------------------------------------------------------- 00031 //template <typename T> 00032 //Shape<T>::Shape ( Shape<T> const &orig ) 00033 // : m_ShapeType( orig.m_ShapeType ) 00034 #if defined(__gl_h_) || defined(__GL_H__) 00035 // , m_pModel( NULL ) 00036 #endif 00037 //{ 00038 // #ifdef TAPs_ENABLE_DEBUG 00039 // std::cout << "Shape<T> Copy Constructor.\n"; 00040 // #endif 00041 #if defined(__gl_h_) || defined(__GL_H__) 00042 // if ( *orig.m_pModel != NULL ) { 00043 // m_pModel = new OpenGL::OpenGLModel<T>( *orig.m_pModel ); 00044 // } 00045 // else { 00046 // m_pModel = NULL; 00047 // } 00048 #endif 00049 //} 00050 //----------------------------------------------------------------------------- 00051 template <typename T> 00052 Shape<T>::~Shape () 00053 { 00054 #ifdef TAPs_ENABLE_DEBUG 00055 std::cout << "Shape<T> Destructor.\n"; 00056 #endif 00057 #if defined(__gl_h_) || defined(__GL_H__) 00058 if ( m_pModel ) delete m_pModel; 00059 #endif 00060 } 00061 //----------------------------------------------------------------------------- 00062 template <typename T> 00063 std::string Shape<T>::StrInfo () const 00064 { 00065 std::ostringstream ss; 00066 ss << "Shape<" << typeid(T).name() << ">"; 00067 ss << "is type " << Enum::StrEnumShape( m_ShapeType ); 00068 #if defined(__gl_h_) || defined(__GL_H__) 00069 ss << " with model " << m_pModel; 00070 #endif 00071 ss << ".\n"; 00072 return ss.str(); 00073 } 00074 //----------------------------------------------------------------------------- 00075 //template <typename T> 00076 //Shape<T> & Shape<T>::operator= ( Shape<T> const &orig ) 00077 //{ 00078 // if ( &orig != this ) { 00079 // m_ShapeType = orig.m_ShapeType; 00080 // #if defined(__gl_h_) || defined(__GL_H__) 00081 // if ( *orig.m_pModel != NULL ) { 00082 // if ( m_pModel ) delete m_pModel; 00083 // OpenGL::OpenGLHalfEdgeModel<T> * pHalfEdge = dynamic_cast< OpenGL::OpenGLHalfEdgeModel<T> >( orig.m_pModel ); 00084 // if ( pHalfEdge ) { 00085 // m_pModel = new OpenGL::OpenGLHalfEdgeModel<T>( *(orig.m_pModel) ); 00086 // return *this; 00087 // } 00088 // OpenGL::OpenGLXPolygonalModel<T> * pXPoly = dynamic_cast< OpenGL::OpenGLXPolygonalModel<T> >( orig.m_pModel ); 00089 // if ( pXPoly ) { 00090 // m_pModel = new OpenGL::OpenGLXPolygonalModel<T>( *(orig.m_pModel) ); 00091 // return *this; 00092 // } 00093 // OpenGL::OpenGLPolygonalModel<T> * pPoly = dynamic_cast< OpenGL::OpenGLPolygonalModel<T> >( orig.m_pModel ); 00094 // if ( pPoly ) { 00095 // m_pModel = new OpenGL::OpenGLPolygonalModel<T>( *(orig.m_pModel) ); 00096 // return *this; 00097 // } 00098 // } 00099 // else { 00100 // m_pModel = NULL; 00101 // } 00102 // #endif 00103 // } 00104 // return *this; 00105 //} 00106 //----------------------------------------------------------------------------- 00107 template <typename T> 00108 void Shape<T>::SetShapeType ( Enum::Shape type ) 00109 { 00110 m_ShapeType = type; 00111 } 00112 //----------------------------------------------------------------------------- 00113 template <typename T> 00114 void Shape<T>::GetShapeType ( Enum::Shape & type ) const 00115 { 00116 type = m_ShapeType; 00117 } 00118 //----------------------------------------------------------------------------- 00119 template <typename T> 00120 bool Shape<T>::SetModelFromFile ( std::string modelFile, Enum::ModelType modelType ) 00121 { 00122 OpenGL::OpenGLModel<T> * pModel = NULL; 00123 if ( modelType == Enum::MODEL_TYPE_HALFEDGE ) { 00124 #ifdef TAPs_ENABLE_DEBUG 00125 std::cout << "START: Shape<T>::SetModelFromFile(...) - Try to create model as HalfEdgeModel\n"; 00126 #endif 00127 pModel = new OpenGL::OpenGLHalfEdgeModel<T>(); 00128 //std::cout << pModel << "\n"; 00129 } 00130 else if ( modelType == Enum::MODEL_TYPE_XPOLYGONAL ) { 00131 #ifdef TAPs_ENABLE_DEBUG 00132 std::cout << "START: Shape<T>::SetModelFromFile(...) - Try to create model as XPolygonalModel\n"; 00133 #endif 00134 pModel = new OpenGL::OpenGLXPolygonalModel<T>(); 00135 //std::cout << pModel << "\n"; 00136 } 00137 else if ( modelType == Enum::MODEL_TYPE_POLYGONAL ) { 00138 #ifdef TAPs_ENABLE_DEBUG 00139 std::cout << "START: Shape<T>::SetModelFromFile(...) - Try to create model as PolygonalModel\n"; 00140 #endif 00141 pModel = new OpenGL::OpenGLPolygonalModel<T>(); 00142 //std::cout << pModel << "\n"; 00143 } 00144 else { 00145 std::cout << "Shape<T>::SetModelFromFile(...) - Failed to create the Model -- UNSUPPORTED MODEL TYPE (" << modelType << ")!\n"; 00146 return false; 00147 } 00148 00149 if ( pModel ) { 00150 if ( ReadModels<T>::ReadFile( modelFile, pModel ) ) { 00151 if ( m_pModel ) delete m_pModel; 00152 m_pModel = pModel; 00153 #ifdef TAPs_ENABLE_DEBUG 00154 std::cout << "END: Shape<T>::SetModelFromFile(...) - Model is created successfully.\n"; 00155 #endif 00156 return true; 00157 } 00158 #ifdef TAPs_ENABLE_DEBUG 00159 std::cout << "END: Shape<T>::SetModelFromFile(...) - Failed to create the Model!\n"; 00160 #endif 00161 return false; 00162 } 00163 #ifdef TAPs_ENABLE_DEBUG 00164 std::cout << "END: Shape<T>::SetModelFromFile(...) - Failed to create the Model!\n"; 00165 #endif 00166 return false; 00167 } 00168 //----------------------------------------------------------------------------- 00169 00170 00171 //============================================================================= 00172 // OpenGL 00173 #if defined(__gl_h_) || defined(__GL_H__) 00174 //----------------------------------------------------------------------------- 00175 template <typename T> 00176 void Shape<T>::Draw () const 00177 { 00178 if ( m_pModel ) { 00179 m_pModel->Draw(); 00180 } 00181 else { 00182 glPushAttrib( GL_ALL_ATTRIB_BITS ); 00183 glPointSize( 5 ); 00184 glBegin( GL_POINTS ); 00185 glVertex3f( 0, 0, 0 ); 00186 glPopAttrib(); 00187 glEnd(); 00188 } 00189 } 00190 //----------------------------------------------------------------------------- 00191 #endif // OpenGL 00192 //============================================================================= 00193 00194 00195 //============================================================================= 00196 END_NAMESPACE_TAPs 00197 //34567890123456789012345678901234567890123456789012345678901234567890123456789 00198 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----