TAPs 0.7.7.3
TAPsShape.cpp
Go to the documentation of this file.
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----+----
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines