[3913] | 1 | #ifndef _TRIANGLE_H_
|
---|
| 2 | #define _TRIANGLE_H_
|
---|
| 3 |
|
---|
| 4 | #include "./include.h"
|
---|
[5143] | 5 | #include "AdjacentTriangle.h"
|
---|
[3913] | 6 |
|
---|
| 7 | namespace bamg {
|
---|
| 8 |
|
---|
| 9 | //classes
|
---|
[5095] | 10 | class Mesh;
|
---|
[5120] | 11 | class BamgVertex;
|
---|
[3913] | 12 | class Triangle;
|
---|
| 13 |
|
---|
| 14 | class Triangle {
|
---|
| 15 |
|
---|
[5143] | 16 | friend class AdjacentTriangle;
|
---|
[3913] | 17 |
|
---|
| 18 | private:
|
---|
[5148] | 19 | BamgVertex *vertices[3]; // 3 vertices if t is triangle, t[i] allowed by access function, (*t)[i] if pointer
|
---|
[5340] | 20 | Triangle *adj[3]; // 3 pointers toward the adjacent triangles
|
---|
[5401] | 21 | short AdjEdgeIndex[3]; // edge id in the adjacent triangles. The edge number 1 is the edge number AdjEdgeIndex[1] in the Adjacent triangle 1
|
---|
[3913] | 22 |
|
---|
| 23 | public:
|
---|
[5143] | 24 | Icoor2 det; //Integer determinant (twice its area)
|
---|
[3913] | 25 | union {
|
---|
[5143] | 26 | Triangle *link;
|
---|
| 27 | long color;
|
---|
[3913] | 28 | };
|
---|
| 29 |
|
---|
| 30 | //Constructors/Destructors
|
---|
[9320] | 31 | Triangle();
|
---|
[5095] | 32 | Triangle(Mesh *Th,long i,long j,long k);
|
---|
[5120] | 33 | Triangle(BamgVertex *v0,BamgVertex *v1,BamgVertex *v2);
|
---|
[3913] | 34 |
|
---|
| 35 | //Operators
|
---|
[5148] | 36 | const BamgVertex & operator[](int i) const {return *vertices[i];};
|
---|
| 37 | BamgVertex & operator[](int i) {return *vertices[i];};
|
---|
| 38 | const BamgVertex * operator()(int i) const {return vertices[i];};
|
---|
| 39 | BamgVertex * & operator()(int i) {return vertices[i];};
|
---|
[3913] | 40 |
|
---|
| 41 | //Methods
|
---|
[5151] | 42 | void Echo();
|
---|
| 43 | int swap(short a1,int=0);
|
---|
| 44 | long Optim(short a,int =0);
|
---|
| 45 | int Locked(int a)const;
|
---|
| 46 | int Hidden(int a)const;
|
---|
| 47 | int GetAllflag(int a);
|
---|
| 48 | void SetAllFlag(int a,int f);
|
---|
| 49 | double QualityQuad(int a,int option=1) const;
|
---|
| 50 | short NuEdgeTriangleAdj(int i) const;
|
---|
| 51 | AdjacentTriangle FindBoundaryEdge(int i) const;
|
---|
| 52 | AdjacentTriangle Adj(int i) const;
|
---|
| 53 | Triangle *TriangleAdj(int i) const;
|
---|
| 54 | Triangle *Quadrangle(BamgVertex *& v0,BamgVertex *& v1,BamgVertex *& v2,BamgVertex *& v3) const;
|
---|
| 55 | void Renumbering(Triangle *tb,Triangle *te, long *renu);
|
---|
| 56 | void Renumbering(BamgVertex *vb,BamgVertex *ve, long *renu);
|
---|
| 57 | void SetAdjAdj(short a);
|
---|
| 58 | void SetAdj2(short a,Triangle *t,short aat);
|
---|
| 59 | void SetSingleVertexToTriangleConnectivity();
|
---|
| 60 | void SetHidden(int a);
|
---|
| 61 | void SetLocked(int a);
|
---|
| 62 | void SetMarkUnSwap(int a);
|
---|
| 63 | void SetUnMarkUnSwap(int a);
|
---|
| 64 | void SetDet();
|
---|
[3913] | 65 |
|
---|
| 66 | //Inline methods
|
---|
| 67 | double qualite() ;
|
---|
[5095] | 68 | void Set(const Triangle &,const Mesh &,Mesh &);
|
---|
[5148] | 69 | int In(BamgVertex *v) const { return vertices[0]==v || vertices[1]==v || vertices[2]==v ;}
|
---|
[3913] | 70 |
|
---|
| 71 | };
|
---|
| 72 |
|
---|
| 73 | }
|
---|
| 74 | #endif
|
---|