Coupure prévue mardi 3 Août au matin pour maintenance du serveur. Nous faisons au mieux pour que celle-ci soit la plus brève possible.

map3MR_PrimalAdapt.h 5.81 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*******************************************************************************
* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps  *
* version 0.1                                                                  *
* Copyright (C) 2009-2012, IGG Team, LSIIT, University of Strasbourg           *
*                                                                              *
* This library is free software; you can redistribute it and/or modify it      *
* under the terms of the GNU Lesser General Public License as published by the *
* Free Software Foundation; either version 2.1 of the License, or (at your     *
* option) any later version.                                                   *
*                                                                              *
* This library is distributed in the hope that it will be useful, but WITHOUT  *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or        *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License  *
* for more details.                                                            *
*                                                                              *
* You should have received a copy of the GNU Lesser General Public License     *
* along with this library; if not, write to the Free Software Foundation,      *
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.           *
*                                                                              *
* Web site: http://cgogn.unistra.fr/                                           *
* Contact information: cgogn@unistra.fr                                        *
*                                                                              *
*******************************************************************************/

#ifndef __MAP3MR_PRIMAL_ADAPT__
#define __MAP3MR_PRIMAL_ADAPT__

#include "Topology/map/embeddedMap3.h"
#include "Topology/generic/traversorCell.h"
#include "Topology/generic/traversor3.h"
31
#include "Algo/Modelisation/tetrahedralization.h"
32
33
34
35
36
#include <limits>

namespace CGoGN
{

37
38
39
namespace Algo
{

40
41
42
namespace Volume
{

43
44
45
46
47
48
49
50
51
namespace MR
{

namespace Primal
{

namespace Adaptive
{

52
53
54
/*! \brief The class of adaptive 3-map MR
 */

55
56
template <typename PFP>
class Map3MR
57
{
58
59
60
61
62
63

public:
	typedef typename PFP::MAP MAP ;
	typedef typename PFP::VEC3 VEC3 ;
	typedef typename PFP::REAL REAL ;

64
protected:
65
	MAP& m_map;
66
67
68
69
70
71
72
73
	bool shareVertexEmbeddings;

	FunctorType* vertexVertexFunctor ;
	FunctorType* edgeVertexFunctor ;
	FunctorType* faceVertexFunctor ;
	FunctorType* volumeVertexFunctor ;

public:
74
	Map3MR(MAP& map);
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123

	/*! @name Cells informations
	 *
	 *************************************************************************/
	//@{
	//! Return the level of the edge of d in the current level map
	/* @param d Dart from the edge
	 */
	unsigned int edgeLevel(Dart d);

	//! Return the level of the face of d in the current level map
	/* @param d Dart from the face
	 */
	unsigned int faceLevel(Dart d);

	//! Return the level of the volume of d in the current level map
	/* @param d Dart from the volume
	 */
	unsigned int volumeLevel(Dart d);

	//! Return the oldest dart of the face of d in the current level map
	/* @param d Dart from the edge
	 */
	Dart faceOldestDart(Dart d);

	//! Return the level of the edge of d in the current level map
	/* @param d Dart from the edge
	 */
	Dart volumeOldestDart(Dart d);

	//! Return true if the edge of d in the current level map
	//! has already been subdivided to the next level
	/*! @param d Dart from the edge
	 */
	bool edgeIsSubdivided(Dart d) ;

	//! Return true if the face of d in the current level map
	//! has already been subdivided to the next level
	/*! @param d Dart from the face
	 */
	bool faceIsSubdivided(Dart d) ;

	//! Return true if the volume of d in the current level map
	//! has already been subdivided to the next level
	/*! @param d Dart from the volume
	 */
	bool volumeIsSubdivided(Dart d);
	//@}

untereiner's avatar
untereiner committed
124
//protected:
125
126
127
128
129
130
131
132
133
134
135
136
	/*! @name Topological helping functions
	 *
	 *************************************************************************/
	//@{
	//!
	/*!
	 */
	void swapEdges(Dart d, Dart e);

	void splitVolume(std::vector<Dart>& vd);

	Dart cutEdge(Dart d) ;
untereiner's avatar
untereiner committed
137

138
139
140
141
142
143
144
145
146
147
148
149
	void splitFace(Dart d, Dart e) ;
	//@}

	/*! @name Subdivision
	 *
	 *************************************************************************/
	//@{
	//! Subdivide the edge of d to the next level
	/*! @param d Dart from the edge
	 */
	void subdivideEdge(Dart d) ;

untereiner's avatar
untereiner committed
150
151
152
153
154
	//!
	/*!
	 */
	void coarsenEdge(Dart d);

155
156
157
158
	//! Subdivide the edge of d to the next level
	/*! @param d Dart frome the face
	 */
	void subdivideFace(Dart d, bool triQuad) ;
159

untereiner's avatar
untereiner committed
160
161
162
163
164
	//!
	/*!
	 */
	void coarsenFace(Dart d);

165
public:
166
167
168
169
170
	//! Subdivide the volume of d to hexahedral cells
	/*! @param d Dart from the volume
	 */
	unsigned int subdivideVolume(Dart d, bool triQuad = true, bool OneLevelDifference = true);

untereiner's avatar
untereiner committed
171
172
173
174
175
176
177
178
	/*!
	 * \brief subdivideHexa
	 *
	 * Detailed description of the function
	 * \param d
	 * \param OneLevelDifference
	 * \return
	 */
179
180
	unsigned int subdivideHexa(Dart d, bool OneLevelDifference = true);

181
182
183
184
	//! Subdivide the volume of d to hexahedral cells
	/*! @param d Dart from the volume
	 */
	void subdivideVolumeTetOcta(Dart d) ;
185
186
187
188
189
190
191
192
193
194
195
196
197
	//@}

	/*! @name Vertices Attributes management
	 *
	 *************************************************************************/
	//@{
	void setVertexVertexFunctor(FunctorType* f) { vertexVertexFunctor = f ; }
	void setEdgeVertexFunctor(FunctorType* f) { edgeVertexFunctor = f ; }
	void setFaceVertexFunctor(FunctorType* f) { faceVertexFunctor = f ; }
	void setVolumeVertexFunctor(FunctorType* f) { volumeVertexFunctor = f ; }
	//@}
};

198
199
200
201
202
203
} // namespace Adaptive

} // namespace Primal

} // namespace MR

204
205
} // namespace Volume

206
207
208
209
} // namespace Algo

} // namespace CGoGN

untereiner's avatar
untereiner committed
210
#include "Algo/Multiresolution/Map3MR/map3MR_PrimalAdapt.hpp"
211
212

#endif /* __MAP3MR_PRIMAL__ */