00001 #ifndef _MY_OrthoFaceAccessor 00002 #define _MY_OrthoFaceAccessor 00003 00004 00005 //class InnerIteratorAccessor<OrthoFaceAccessor>; 00006 00007 00011 class OrthoFaceAccessor 00012 { 00013 private: 00014 friend class InnerIteratorAccessor<OrthoFaceAccessor>; 00015 00016 void inc_normal(); 00017 protected: 00018 unsigned m_i,m_j,m_k; 00019 OrthoMesh::NORMAL_AXIS m_normal; 00020 const OrthoMesh *m_mesh; 00021 unsigned m_index; 00022 00023 void advance_inner(); 00024 public: 00025 OrthoFaceAccessor(); 00026 OrthoFaceAccessor(const OrthoMesh &mesh,unsigned index); 00027 OrthoFaceAccessor(const OrthoCellAccessor &cell,FaceDirection3D dirEnum); 00028 ~OrthoFaceAccessor(); 00029 bool at_boundary(); 00030 bool isValid() const; 00031 void barycenter(Point3D &p); 00032 Point3D barycenter(); 00033 void getAdjCellIndices(unsigned &index1,unsigned &index2) const; 00034 void ghostAdjCellIndices(unsigned &index1,unsigned &index2); 00035 double normal_multiply(double *v) const; 00036 void operator++ (int); 00037 bool operator!= (const OrthoFaceAccessor& face) const; 00038 unsigned getI() const {return m_i;} 00039 unsigned getJ() const {return m_j;} 00040 unsigned getK() const {return m_k;} 00041 unsigned index() const {return m_index;} 00042 OrthoMesh::NORMAL_AXIS getNormalOrientation() const{assert(this->isValid());return m_normal;} 00043 unsigned getNormalNonZeroComponent(){assert(this->isValid());return m_normal;} 00044 double area(); 00045 double areaPerCellVol(); 00046 bool hasPosCell() const ; 00047 bool hasNegCell() const; 00048 FaceDirection3D getFaceDir(); 00049 const OrthoMesh& getMesh() const {return *m_mesh;} 00050 00051 bool isInner(); 00052 Index vertex_index_00(); 00053 Index vertex_index_01(); 00054 Index vertex_index_10(); 00055 Index vertex_index_11(); 00056 00057 }; 00058 00059 #endif