00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _MBWEDGECELL_H
00024 #define _MBWEDGECELL_H
00025
00026 #ifdef _WIN32
00027 #pragma warning(push)
00028 #pragma warning(disable:4250)
00029 #endif
00030
00031 #include <MeshVizXLM/extractors/MxWedgeCellExtract.h>
00032 #include <MeshVizXLM/mesh/cell/MiVolumeCell.h>
00033 #include <MbMeshVizImpl.h>
00034
00035 class PiMarchingCase;
00036
00078 class MbWedgeCell : virtual public MiVolumeCell
00079 {
00080 public:
00081
00085 MbWedgeCell(size_t n0, size_t n1, size_t n2, size_t n3, size_t n4, size_t n5);
00086
00090 double getVolume(const MiGeometryI* meshGeometry) const
00091 {
00092 return MxWedgeCellExtract::getVolume(*meshGeometry,this);
00093 }
00094
00098 virtual size_t getNumFacets() const { return 5; }
00099
00103 virtual size_t getNumEdges() const { return 9; }
00104
00108 virtual size_t getNumNodes() const { return 6; }
00109
00115 virtual size_t getNodeIndex(size_t nod) const
00116 {
00117 return m_nodeIds[nod];
00118 }
00119
00129 virtual size_t appendNodesIndexOfFacet (size_t facet, std::vector<size_t>& facetNodes) const;
00130
00131 virtual void getIsosurfTopology(unsigned char caseId, std::vector< std::pair<size_t,size_t> >& edgeList ) const
00132 {
00133 MxWedgeCellExtract::getIsosurfTopology(caseId, edgeList);
00134 }
00135
00136 virtual unsigned char getMarchingCaseId(std::vector<bool> &nodesSign, size_t beginNodeId=0) const;
00137
00138
00139 virtual double getRelativeSize(const MiGeometryI* meshGeometry) const
00140 {
00141 return MxWedgeCellExtract::getLongestEdgeLength(*meshGeometry,this);
00142 }
00143
00144
00145 virtual bool isPointInsideCell(const MiGeometryI& meshGeometry, const MbVec3d &point, std::vector<double>& weights) const
00146 {
00147 return MxWedgeCellExtract::isPointInsideCell(meshGeometry,this,point,weights);
00148 }
00149
00150 private:
00154 virtual std::ostream& toStream(std::ostream& s) const;
00155
00156 size_t m_nodeIds[6];
00157 static size_t s_facetNode[5][4];
00158 };
00159
00160
00161 inline
00162 MbWedgeCell::MbWedgeCell(size_t n0, size_t n1, size_t n2, size_t n3,
00163 size_t n4, size_t n5)
00164 {
00165 m_nodeIds[0] = n0;
00166 m_nodeIds[1] = n1;
00167 m_nodeIds[2] = n2;
00168 m_nodeIds[3] = n3;
00169 m_nodeIds[4] = n4;
00170 m_nodeIds[5] = n5;
00171 }
00172
00173
00174
00175
00176 inline std::ostream&
00177 MbWedgeCell::toStream(std::ostream& s) const
00178 {
00179 s << "MbWedgeCell (" <<
00180 m_nodeIds[0] << "," <<
00181 m_nodeIds[1] << "," <<
00182 m_nodeIds[2] << "," <<
00183 m_nodeIds[3] << "," <<
00184 m_nodeIds[4] << "," <<
00185 m_nodeIds[5] <<
00186 ")";
00187 return s;
00188 }
00189
00190 #ifdef _WIN32
00191 #pragma warning(pop)
00192 #endif
00193
00194 #endif
00195
00196
00197