00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef CONNECTED_TRIANGLE_HPP
00021 #define CONNECTED_TRIANGLE_HPP
00022
00023 #include <Triangle.hpp>
00024
00025 class ConnectedTriangle;
00026
00027 typedef Vertex* PointIndex;
00028 typedef ConnectedTriangle * TriangleIndex;
00029
00030 class ConnectedTriangle : public Triangle {
00031 private:
00032 TriangleIndex __neighs[3];
00033
00034 inline void __initNeighs() {
00035 __neighs[0] = NULL;
00036 __neighs[1] = NULL;
00037 __neighs[2] = NULL;
00038 }
00039
00040 public:
00041 int tag;
00042 ConnectedTriangle() { __initNeighs(); tag=0; }
00043
00044 ConnectedTriangle(const PointIndex & s1,const PointIndex & s2,const PointIndex & s3) : Triangle(*s1,*s2,*s3) {
00045 __initNeighs();
00046 tag=0;
00047 }
00048
00049 ConnectedTriangle(const PointIndex & s1,const PointIndex & s2,const PointIndex & s3,
00050 const TriangleIndex & v1,const TriangleIndex & v2,const TriangleIndex & v3) : Triangle(*s1,*s2,*s3) {
00051 __neighs[0] = v1;
00052 __neighs[1] = v2;
00053 __neighs[2] = v3;
00054 tag = 0;
00055 }
00056
00057 ConnectedTriangle(const ConnectedTriangle & t) : Triangle(t) {
00058 __neighs[0] = t.__neighs[0];
00059 __neighs[1] = t.__neighs[1];
00060 __neighs[2] = t.__neighs[2];
00061 tag = t.tag;
00062 }
00063
00065 ~ConnectedTriangle() { }
00066
00067
00068 Vertex** base() {
00069 return __vertices;
00070 }
00071
00072 const TriangleIndex & neigh(const unsigned k) const { ASSERT(k < 3); return __neighs[k]; }
00073 TriangleIndex & neigh(const unsigned k) { ASSERT(k < 3); return __neighs[k]; }
00074
00076 void setVertices(const PointIndex &s1,const PointIndex &s2,const PointIndex &s3) {
00077 ASSERT(s1 != s2 & s2 != s3 & s3 !=s1);
00078 __vertices[0]=s1; __vertices[1]=s2; __vertices[2]=s3;
00079 }
00080
00082 void setNeighs(const TriangleIndex &v1,const TriangleIndex &v2,const TriangleIndex &v3) {
00083 __neighs[0]=v1; __neighs[1]=v2; __neighs[2]=v3;
00084 }
00085
00087 unsigned localizeVertex(const PointIndex & P) {
00088 unsigned local = 0;
00089 while(base()[local] != P) {
00090 ++local;
00091 ASSERT(local < 3);
00092 }
00093 return local;
00094 }
00095
00097 unsigned localizeNeigh(const ConnectedTriangle * const N) const {
00098 unsigned local = 0;
00099 while(__neighs[local] != N) {
00100 ++local;
00101 ASSERT(local < 3);
00102 }
00103 return local;
00104 }
00105 };
00106
00107 #endif