![]() |
TAPs 0.7.7.3
|
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----+----