TAPs 0.7.7.3
TAPsModelDefBasedOnFEM.cpp
Go to the documentation of this file.
00001 /******************************************************************************
00002 TAPsModelDefBasedOnFEM.cpp
00003 ******************************************************************************/
00007 /******************************************************************************
00008 SUKITTI PUNAK   (03/31/2010)
00009 UPDATE          (09/30/2010)
00010 ******************************************************************************/
00011 #include "TAPsModelDefBasedOnFEM.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, typename DATA>
00020 ModelDefBasedOnFEM<T,DATA>::ModelDefBasedOnFEM ()
00021     : m_pHEModel( NULL )
00022 {}
00023 //-----------------------------------------------------------------------------
00024 template <typename T, typename DATA>
00025 ModelDefBasedOnFEM<T,DATA>::ModelDefBasedOnFEM ( std::string const & modelFile )
00026     : m_pHEModel( NULL )
00027 {
00028     m_pHEModel = new OpenGL::OpenGLHalfEdgeTrigonalModel<T>();
00029     if ( !ReadModels<T>::ReadFile( modelFile, m_pHEModel ) ) {
00030         std::cout << "FILE:"<<__FILE__<<", LINE:"<<__LINE__<< ": Cannot create model from file \"" << modelFile << "\"\n!";
00031         exit( -1 );
00032     }
00033 }
00034 //-----------------------------------------------------------------------------
00035 //template <typename T, typename DATA>
00036 //ModelDefBasedOnFEM<T,DATA>::ModelDefBasedOnFEM ( ModelDefBasedOnFEM<T,DATA> const &orig )
00037 //  :
00038 //{}
00039 //-----------------------------------------------------------------------------
00040 template <typename T, typename DATA>
00041 ModelDefBasedOnFEM<T,DATA>::~ModelDefBasedOnFEM ()
00042 {
00043     if ( m_pHEModel )   delete m_pHEModel;
00044     ClearAllExtraVertices();
00045 }
00046 //-----------------------------------------------------------------------------
00047 template <typename T, typename DATA>
00048 std::string ModelDefBasedOnFEM<T,DATA>::StrInfo () const
00049 {
00050     std::ostringstream ss;
00051     ss << "ModelDefBasedOnFEM<" << typeid(T).name() << ">";
00052     ss << "\n";
00053     return ss.str();
00054 }
00055 //-----------------------------------------------------------------------------
00056 //=============================================================================
00057 // Assignment Operator
00058 //-----------------------------------------------------------------------------
00059 //template <typename T, typename DATA>
00060 //inline ModelDefBasedOnFEM<T,DATA> & ModelDefBasedOnFEM<T,DATA>::operator= ( ModelDefBasedOnFEM<T,DATA> const &orig )
00061 //{ 
00062 //    return *this;
00063 //}
00064 //-----------------------------------------------------------------------------
00065 //=============================================================================
00066 
00067 //-----------------------------------------------------------------------------
00068 template <typename T, typename DATA>
00069 void ModelDefBasedOnFEM<T,DATA>::UpdateSurfaceMesh ()
00070 {
00071     if ( m_pHEModel->GetBVHTree() ) {
00072         m_pHEModel->GetBVHTree()->Update();
00073     }
00074     //m_pHEModel->CalAndSetNormals();
00075 }
00076 
00077 //-----------------------------------------------------------------------------
00078 template <typename T, typename DATA>
00079 bool ModelDefBasedOnFEM<T,DATA>::InitCD ()
00080 {
00081     if ( m_pHEModel ) {
00082         m_pHEModel->BuildBVHTree( Enum::BVH_TREE_BINARY_SPHERE );
00083         return true;
00084     }
00085     return false;
00086 }
00087 
00088 //-----------------------------------------------------------------------------
00089 template <typename T, typename DATA>
00090 void ModelDefBasedOnFEM<T,DATA>::ClearExtraVertex ( unsigned int i )
00091 {
00092     if ( i >= m_SetOfExtraVertices.size() ) return;
00093 
00094     m_SetOfExtraVertices( m_SetOfExtraVertices.begin() + i );
00095     m_SetOfExtraVertexCoords( m_SetOfExtraVertexCoords.begin() + i );
00096 }
00097 
00098 //-----------------------------------------------------------------------------
00099 template <typename T, typename DATA>
00100 void ModelDefBasedOnFEM<T,DATA>::ClearAllExtraVertices ()
00101 {
00102     for ( unsigned int i = 0; i <  m_SetOfExtraVertices.size(); ++i ) {
00103         delete m_SetOfExtraVertices[i];
00104         delete m_SetOfExtraVertexCoords[i];
00105     }
00106     m_SetOfExtraVertices.clear();
00107     m_SetOfExtraVertexCoords.clear();
00108 }
00109 
00110 
00111 
00112 
00113 //=============================================================================
00114 #if defined(__gl_h_) || defined(__GL_H__)
00115 //-----------------------------------------------------------------------------
00116 template <typename T, typename DATA>
00117 void ModelDefBasedOnFEM<T,DATA>::Draw ( OpenGL::Enum::DrawMode DM )
00118 {
00119     if ( m_pHEModel )   {
00120         m_pHEModel->Draw( DM );
00121     }
00122 }
00123 //-----------------------------------------------------------------------------
00124 template <typename T, typename DATA>
00125 void ModelDefBasedOnFEM<T,DATA>::DrawAllExtraVertices ()
00126 {
00127     glPushAttrib( GL_ALL_ATTRIB_BITS );
00128     //glPushAttrib( GL_ENABLE_BIT | GL_CURRENT_BIT | GL_POINT_BIT );
00129     glEnable( GL_BLEND );
00130     glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
00131     TransformationSupport<T> & trx = RefToTransformationSupport();
00132     for ( unsigned int i = 0; i < m_SetOfExtraVertices.size(); ++i ) {
00133         Vector3<T> pos = m_SetOfExtraVertices[i]->GetPosition();
00134         pos = trx.GetMatrixTransform() * pos;
00135         glPushMatrix();
00136         glTranslatef( pos[0], pos[1], pos[2] );
00137         m_HelpDrawingUsefulObj.SetColor( 0.5, 0.5, 0.5, 0.5 );
00138         m_HelpDrawingUsefulObj.DrawSphere(0.05f);
00139         glPopMatrix();
00140     }
00141     glPopAttrib();
00142 }
00143 //-----------------------------------------------------------------------------
00144 #endif // #if defined(__gl_h_) || defined(__GL_H__)
00145 //=============================================================================
00146 
00147 //=============================================================================
00148 END_NAMESPACE_TAPs
00149 //34567890123456789012345678901234567890123456789012345678901234567890123456789
00150 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines