OpenMEEG
Toggle main menu visibility
Loading...
Searching...
No Matches
OpenMEEG
include
triangle.h
Go to the documentation of this file.
1
// Project Name: OpenMEEG (http://openmeeg.github.io)
2
// © INRIA and ENPC under the French open source license CeCILL-B.
3
// See full copyright notice in the file LICENSE.txt
4
// If you make a copy of this file, you must either:
5
// - provide also LICENSE.txt and modify this header to refer to it.
6
// - replace this header by the LICENSE.txt content.
7
8
#pragma once
9
10
#include <vector>
11
#include <map>
12
13
#include <
vect3.h
>
14
#include <
vertex.h
>
15
#include <
edge.h
>
16
#include <OMExceptions.H>
17
18
namespace
OpenMEEG
{
19
20
struct
TriangleIndices
{
21
22
TriangleIndices
() { }
23
24
TriangleIndices
(
const
unsigned
i,
const
unsigned
j,
const
unsigned
k) {
25
indices
[0] = i;
26
indices
[1] = j;
27
indices
[2] = k;
28
}
29
30
TriangleIndices
(
const
unsigned
ind[3]):
TriangleIndices
(ind[0],ind[1],ind[2]) { }
31
32
TriangleIndices
(
const
TriangleIndices
& ind) { std::copy(&ind[0],&ind[3],&
indices
[0]); }
33
34
TriangleIndices
&
operator=
(
const
TriangleIndices
&) =
default
;
35
36
unsigned
&
operator[]
(
const
unsigned
i) {
return
indices
[i]; }
37
const
unsigned
&
operator[]
(
const
unsigned
i)
const
{
return
indices
[i]; }
38
39
unsigned
indices
[3];
40
};
41
44
45
class
OPENMEEG_EXPORT
Triangle
{
46
public
:
47
48
typedef
Vertex
**
iterator
;
49
typedef
const
Vertex
**
const_iterator
;
50
52
53
Triangle
() { }
// Is this needed besides for SWIG ?
54
56
57
Triangle
(
Vertex
* pts[3],
const
unsigned
index
=-1): ind(
index
) {
58
for
(
unsigned
i=0;i<3;++i)
59
vertices_[i] = pts[i];
60
}
61
63
64
Triangle
(
Vertex
* p1,
Vertex
* p2,
Vertex
* p3,
const
unsigned
index
=-1): vertices_{p1,p2,p3},ind(
index
) { }
65
67
68
Triangle
(
Vertex
& p1,
Vertex
& p2,
Vertex
& p3,
const
unsigned
index
=-1):
Triangle
(&p1,&p2,&p3,
index
) { }
69
71
72
const_iterator
begin
()
const
{
return
const_iterator
(vertices_); }
73
const_iterator
end
()
const
{
return
const_iterator
(vertices_+3); }
74
iterator
begin
() {
return
iterator
(vertices_); }
75
iterator
end
() {
return
iterator
(vertices_+3); }
76
78
79
bool
operator==
(
const
Triangle
& T)
const
{
80
return
(&T.
vertex
(0)==&
vertex
(0)) && (&T.
vertex
(1)==&
vertex
(1)) && (&T.
vertex
(2)==&
vertex
(2));
81
}
82
83
Vertex
&
vertex
(
const
unsigned
& vindex) {
return
*vertices_[vindex]; }
84
const
Vertex
&
vertex
(
const
unsigned
& vindex)
const
{
return
*vertices_[vindex]; }
85
86
Edge
edge
(
const
Vertex
& V)
const
{
87
const
unsigned
indx = vertex_index(V);
88
return
Edge
(
vertex
(indices[indx][0]),
vertex
(indices[indx][1]));
89
}
90
91
Edges
edges
()
const
{
92
return
{
Edge
(
vertex
(1),
vertex
(2)),
Edge
(
vertex
(2),
vertex
(0)),
Edge
(
vertex
(0),
vertex
(1)) };
93
}
94
95
Normal
&
normal
() {
return
normal_; }
96
const
Normal
&
normal
()
const
{
return
normal_; }
97
98
double
area
()
const
{
return
area_; }
99
double
&
area
() {
return
area_; }
100
101
unsigned
&
index
() {
return
ind; }
102
unsigned
index
()
const
{
return
ind; }
103
104
Vect3
center
()
const
{
return
(
vertex
(0)+
vertex
(1)+
vertex
(2))/3; }
105
106
bool
contains
(
const
Vertex
& p)
const
{
107
for
(
unsigned
i=0;i<3;++i)
108
if
(&
vertex
(i)==&p )
109
return
true
;
110
return
false
;
111
}
112
114
115
void
change_orientation
() { std::swap(vertices_[0],vertices_[1]); }
116
118
119
bool
intersects
(
const
Triangle
& triangle)
const
;
120
121
private
:
122
123
unsigned
vertex_index(
const
Vertex
& V)
const
{
124
for
(
unsigned
i=0;i<3;++i)
125
if
(&
vertex
(i)==&V)
126
return
i;
127
std::ostringstream oss;
128
oss <<
"The vertex with address "
<<
static_cast<
const
void
*
>
(&V) <<
" with coordinates "
<< V
129
<<
" does not belong to the triangle "
;
130
if
(ind!=
static_cast<
unsigned
>
(-1))
131
oss << ind;
132
else
133
oss << static_cast<const void*>(
this
);
134
throw
UnknownVertex(oss.str());
135
}
136
137
static
constexpr
unsigned
indices[3][2] = {{1,2},{2,0},{0,1}};
138
139
Vertex* vertices_[3];
140
double
area_ = 0.0;
141
Normal
normal_;
142
unsigned
ind;
143
};
144
145
typedef
std::vector<Triangle>
Triangles
;
146
typedef
std::vector<Triangle*>
TrianglesRefs
;
147
148
typedef
std::map<unsigned,unsigned>
IndexMap
;
149
}
OpenMEEG::Edge
Edge Edge class.
Definition
edge.h:18
OpenMEEG::Triangle::area
double & area()
Definition
triangle.h:99
OpenMEEG::Triangle::edges
Edges edges() const
Definition
triangle.h:91
OpenMEEG::Triangle::change_orientation
void change_orientation()
Change triangle orientation by flipping two of the vertices.
Definition
triangle.h:115
OpenMEEG::Triangle::edge
Edge edge(const Vertex &V) const
Definition
triangle.h:86
OpenMEEG::Triangle::intersects
bool intersects(const Triangle &triangle) const
Check for intersection with another triangle.
OpenMEEG::Triangle::end
const_iterator end() const
Definition
triangle.h:73
OpenMEEG::Triangle::contains
bool contains(const Vertex &p) const
Definition
triangle.h:106
OpenMEEG::Triangle::center
Vect3 center() const
Definition
triangle.h:104
OpenMEEG::Triangle::index
unsigned index() const
Definition
triangle.h:102
OpenMEEG::Triangle::Triangle
Triangle(Vertex *pts[3], const unsigned index=-1)
Create a new triangle from a set of vertices.
Definition
triangle.h:57
OpenMEEG::Triangle::index
unsigned & index()
Definition
triangle.h:101
OpenMEEG::Triangle::area
double area() const
Definition
triangle.h:98
OpenMEEG::Triangle::const_iterator
const Vertex ** const_iterator
Definition
triangle.h:49
OpenMEEG::Triangle::operator==
bool operator==(const Triangle &T) const
Operators.
Definition
triangle.h:79
OpenMEEG::Triangle::Triangle
Triangle(Vertex *p1, Vertex *p2, Vertex *p3, const unsigned index=-1)
Create a new triangle from a 3 vertex adresses.
Definition
triangle.h:64
OpenMEEG::Triangle::Triangle
Triangle(Vertex &p1, Vertex &p2, Vertex &p3, const unsigned index=-1)
Create a new triangle from a 3 vertices.
Definition
triangle.h:68
OpenMEEG::Triangle::normal
const Normal & normal() const
Definition
triangle.h:96
OpenMEEG::Triangle::begin
iterator begin()
Definition
triangle.h:74
OpenMEEG::Triangle::end
iterator end()
Definition
triangle.h:75
OpenMEEG::Triangle::vertex
const Vertex & vertex(const unsigned &vindex) const
Definition
triangle.h:84
OpenMEEG::Triangle::iterator
Vertex ** iterator
Definition
triangle.h:48
OpenMEEG::Triangle::normal
Normal & normal()
Definition
triangle.h:95
OpenMEEG::Triangle::Triangle
Triangle()
Constructors.
Definition
triangle.h:53
OpenMEEG::Triangle::begin
const_iterator begin() const
Iterators.
Definition
triangle.h:72
OpenMEEG::Triangle::vertex
Vertex & vertex(const unsigned &vindex)
Definition
triangle.h:83
OpenMEEG::Vect3
Vect3.
Definition
vect3.h:28
OpenMEEG::Vertex
Vertex.
Definition
vertex.h:20
edge.h
OpenMEEG
Definition
analytics.h:14
OpenMEEG::Triangles
std::vector< Triangle > Triangles
Definition
triangle.h:145
OpenMEEG::TrianglesRefs
std::vector< Triangle * > TrianglesRefs
Definition
triangle.h:146
OpenMEEG::Normal
Vect3 Normal
Definition
vect3.h:131
OpenMEEG::Edges
std::vector< Edge > Edges
Definition
edge.h:41
OpenMEEG::IndexMap
std::map< unsigned, unsigned > IndexMap
Definition
triangle.h:148
OpenMEEG::TriangleIndices::TriangleIndices
TriangleIndices(const unsigned ind[3])
Definition
triangle.h:30
OpenMEEG::TriangleIndices::operator=
TriangleIndices & operator=(const TriangleIndices &)=default
OpenMEEG::TriangleIndices::indices
unsigned indices[3]
Definition
triangle.h:39
OpenMEEG::TriangleIndices::operator[]
const unsigned & operator[](const unsigned i) const
Definition
triangle.h:37
OpenMEEG::TriangleIndices::TriangleIndices
TriangleIndices()
Definition
triangle.h:22
OpenMEEG::TriangleIndices::TriangleIndices
TriangleIndices(const unsigned i, const unsigned j, const unsigned k)
Definition
triangle.h:24
OpenMEEG::TriangleIndices::operator[]
unsigned & operator[](const unsigned i)
Definition
triangle.h:36
OpenMEEG::TriangleIndices::TriangleIndices
TriangleIndices(const TriangleIndices &ind)
Definition
triangle.h:32
vect3.h
vertex.h
Generated by
1.17.0