00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _PB_QUADRANGLECELL_
00026 #define _PB_QUADRANGLECELL_
00027
00028 #include <MeshViz/3Ddata/PbCell.h>
00029
00030 class PbMesh;
00031
00053 class PbQuadrangleCell : public PbCell {
00054
00055
00056 public:
00057
00061 PbQuadrangleCell(const PbMesh *owner_mesh) ;
00062
00066 PbQuadrangleCell(const PbQuadrangleCell &cell);
00067
00071 ~PbQuadrangleCell() ;
00072
00076 PbQuadrangleCell& operator=(const PbQuadrangleCell &cell) ;
00077
00081 virtual float getLongestEdgeLength() const;
00082
00086 virtual float getVolume() const { return 0.0; }
00087
00091 virtual float getArea() const;
00092
00097 virtual void getNodesIndexOfEdge (int edge, PbArrayOfInt &nodes_index) const;
00098
00103 virtual void getNodesIndexOfFacet (int facet, PbArrayOfInt &nodes_index) const;
00104
00110 virtual void getNodesLocalIndexOfEdge (int edge, PbArrayOfInt &nodes_index) const;
00111
00117 virtual void getNodesLocalIndexOfFacet (int facet, PbArrayOfInt &nodes_index) const;
00118
00123 virtual int locatePoint(const SbVec3f &coord, float tolerance, SbVec3f &pcoord) const;
00124
00128 virtual void getWeight(const SbVec3f &pcoord, float *weight) const;
00129
00134 void getDerivs(const SbVec3f &pcoord, float *derivs) const;
00135
00136
00137 private:
00143 SbBool set(int index, int *node_ids, const float *x, const float *y);
00144
00150 SbBool set(int index, int *node_ids, const float *x, const float *y, const float *z);
00151
00157 SbBool set(int index, int *node_ids, float x_min, float y_min, float x_max, float y_max, const float *z);
00158
00159 virtual const int* getNodesLocalIndexOfEdge(int edge) const {
00160 return c_edgeNodes[edge];
00161 }
00162
00163
00164 void print(FILE *fp) const;
00165
00166
00167
00168 private:
00169 virtual unsigned char getIsosurfCaseId(SbBoolVector &nodes_sign) const;
00170
00171 private:
00172
00173 void copy(const PbQuadrangleCell &cell) ;
00174 void destroy();
00175 int locatePointOnXY(const SbVec3f &coord, const SbVec3f &proj_coord, float tolerance, SbVec3f &pcoord, int indx, int indy) const;
00176 SbVec3f m_normal;
00177 SbBool m_2DCell;
00178 static int c_edgeNodes[4][2];
00179 };
00180
00181
00182 inline unsigned char
00183 PbQuadrangleCell::getIsosurfCaseId(SbBoolVector &) const
00184 {
00185 return 0;
00186 }
00187
00188
00189
00190 #endif
00191
00192
00193
00194
00195
00196
00197
00198