1 | #ifndef _TRIANGLE_H_
|
---|
2 | #define _TRIANGLE_H_
|
---|
3 |
|
---|
4 | #include "./include.h"
|
---|
5 | #include "AdjacentTriangle.h"
|
---|
6 |
|
---|
7 | namespace bamg {
|
---|
8 |
|
---|
9 | class Mesh;
|
---|
10 | class BamgVertex;
|
---|
11 | class Triangle;
|
---|
12 |
|
---|
13 | class Triangle {
|
---|
14 |
|
---|
15 | friend class AdjacentTriangle;
|
---|
16 |
|
---|
17 | private:
|
---|
18 | BamgVertex *vertices[3]; // 3 vertices if t is triangle, t[i] allowed by access function, (*t)[i] if pointer
|
---|
19 | Triangle *adj[3]; // 3 pointers toward the adjacent triangles
|
---|
20 | short AdjEdgeIndex[3]; // edge id in the adjacent triangles. The edge number 1 is the edge number AdjEdgeIndex[1] in the Adjacent triangle 1
|
---|
21 |
|
---|
22 | public:
|
---|
23 | long long det; //Integer determinant (twice its area)
|
---|
24 | union {
|
---|
25 | Triangle *link;
|
---|
26 | long color;
|
---|
27 | };
|
---|
28 |
|
---|
29 | //Constructors/Destructors
|
---|
30 | Triangle();
|
---|
31 | Triangle(Mesh *Th,long i,long j,long k);
|
---|
32 | Triangle(BamgVertex *v0,BamgVertex *v1,BamgVertex *v2);
|
---|
33 |
|
---|
34 | //Operators
|
---|
35 | const BamgVertex & operator[](int i) const {return *vertices[i];};
|
---|
36 | BamgVertex & operator[](int i) {return *vertices[i];};
|
---|
37 | const BamgVertex * operator()(int i) const {return vertices[i];};
|
---|
38 | BamgVertex * & operator()(int i) {return vertices[i];};
|
---|
39 |
|
---|
40 | //Methods
|
---|
41 | void Echo();
|
---|
42 | double Length() const;
|
---|
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 | short NuEdgeTriangleAdj(int i) const;
|
---|
49 | AdjacentTriangle Adj(int i) const;
|
---|
50 | Triangle *TriangleAdj(int i) const;
|
---|
51 | void Renumbering(Triangle *tb,Triangle *te, long *renu);
|
---|
52 | void Renumbering(BamgVertex *vb,BamgVertex *ve, long *renu);
|
---|
53 | void SetAdjAdj(short a);
|
---|
54 | void SetAdj2(short a,Triangle *t,short aat);
|
---|
55 | void SetSingleVertexToTriangleConnectivity();
|
---|
56 | void SetHidden(int a);
|
---|
57 | void SetLocked(int a);
|
---|
58 | void SetMarkUnSwap(int a);
|
---|
59 | void SetUnMarkUnSwap(int a);
|
---|
60 |
|
---|
61 | //Inline methods
|
---|
62 | void Set(const Triangle &,const Mesh &,Mesh &);
|
---|
63 | int In(BamgVertex *v) const { return vertices[0]==v || vertices[1]==v || vertices[2]==v ;}
|
---|
64 | BamgVertex* GetVertex(int i){return vertices[i];}; // FIXME: this is used to avoid BamgVertex * operator()
|
---|
65 |
|
---|
66 | };
|
---|
67 |
|
---|
68 | }
|
---|
69 | #endif
|
---|