MeVisLabToolboxReference
MeVisLab/Standard/Sources/ML/MLWEM/WEMBase/WEMQuad.h
Go to the documentation of this file.
00001 // **InsertLicense** code
00002 //----------------------------------------------------------------------------------
00004 
00011 #ifndef __WEMQuad_H
00012 #define __WEMQuad_H
00013 
00014 #include "WEMFace.h"
00015 #include "WEMNode.h"
00016 #include "WEMEdge.h"
00017 
00018 ML_START_NAMESPACE
00019 
00021 class MLWEM_EXPORT WEMQuad : public WEMFace
00022 {
00023 
00024 public:
00025 
00027   WEMQuad();
00029   WEMQuad(const WEMQuad& q);
00031   virtual ~WEMQuad();
00033   void clone(WEMQuad* quad);
00034 
00036   virtual void computeNormal();
00038   virtual inline unsigned int getNumNodes() const { return 4; }
00040   virtual int getIndex(WEMNode* node) const;
00042   virtual inline WEMNode* getNodeAt(unsigned int index) { return _nodes[index]; }
00044   virtual inline const WEMNode* getNodeAt(unsigned int index) const { return const_cast<WEMQuad*>(this)->getNodeAt(index); }
00046   virtual inline void setNode(unsigned int index, WEMNode* node) { _nodes[index] = node; }
00048   virtual inline void setNodes(WEMNode* node1, WEMNode* node2, WEMNode* node3, WEMNode* node4) {
00049     _nodes[0] = node1; _nodes[1] = node2; _nodes[2] = node3; _nodes[3] = node4;
00050   }
00052   virtual void replace(WEMNode* orig, WEMNode* replacement);
00054   virtual bool contains(WEMNode* node) const;
00056   virtual Vector3 getNodePositionAt(unsigned int index) const { return _nodes[index]->getPosition(); }
00057 
00059   virtual int getIndex(WEMEdge* edge) const;
00061   virtual inline WEMEdge* getEdgeAt(unsigned int index) { return _edges[index]; }
00063   virtual inline const WEMEdge* getEdgeAt(unsigned int index) const { return const_cast<WEMQuad*>(this)->getEdgeAt(index); }
00065   virtual inline void setEdge(unsigned int index, WEMEdge* edge) { _edges[index] = edge; }
00067   virtual inline void setEdges(WEMEdge* edge1, WEMEdge* edge2, WEMEdge* edge3, WEMEdge* edge4) {
00068     _edges[0] = edge1; _edges[1] = edge2; _edges[2] = edge3; _edges[3] = edge4;
00069   }
00071   virtual void replace(WEMEdge* orig, WEMEdge* replacement);
00073   virtual bool contains(WEMEdge* edge) const;
00074 
00076   virtual Vector3 getCentroid() const;
00078   virtual double getPerimeter() const;
00080   virtual double getArea() const;
00082   virtual inline WEMNode* getOther(WEMNode* , WEMNode* ) { return NULL; }
00084   virtual inline const WEMNode* getOther(WEMNode* , WEMNode* ) const { return NULL; }
00086   virtual inline WEMEdge* getOther(WEMEdge* , WEMEdge* ) { return NULL; }
00088   virtual inline const WEMEdge* getOther(WEMEdge* , WEMEdge* ) const { return NULL; }
00090   virtual inline WEMEdge* getEdgeNotContaining(WEMNode* ) { return NULL; }
00092   virtual inline const WEMEdge* getEdgeNotContaining(WEMNode* ) const { return NULL; }
00099   virtual double getQuality() const;
00102   virtual int isConcave() const;
00104   virtual void mirror();
00105 
00106 private:
00107 
00109   WEMNode* _nodes[4];
00111   WEMEdge* _edges[4];
00112 };
00113 
00114 ML_END_NAMESPACE
00115 
00116 #endif // __WEMQuad_H