Création d'un compte pour un collaborateur extérieur au laboratoire depuis l'intranet ICube : https://intranet.icube.unistra.fr/fr/labs/member/profile

map2MR_Primal.h 4.85 KB
Newer Older
Pierre Kraemer's avatar
Pierre Kraemer committed
1
2
3
/*******************************************************************************
* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps  *
* version 0.1                                                                  *
4
* Copyright (C) 2009-2012, IGG Team, LSIIT, University of Strasbourg           *
Pierre Kraemer's avatar
Pierre Kraemer committed
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
*                                                                              *
* 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.           *
*                                                                              *
20
* Web site: http://cgogn.unistra.fr/                                           *
Pierre Kraemer's avatar
Pierre Kraemer committed
21
22
23
24
25
26
27
* Contact information: cgogn@unistra.fr                                        *
*                                                                              *
*******************************************************************************/

#ifndef __MAP2MR_PRIMAL__
#define __MAP2MR_PRIMAL__

Pierre Kraemer's avatar
Pierre Kraemer committed
28
#include "Topology/map/embeddedMap2.h"
Pierre Kraemer's avatar
Pierre Kraemer committed
29
30
31
32

namespace CGoGN
{

Pierre Kraemer's avatar
Pierre Kraemer committed
33
class Map2MR_Primal : public EmbeddedMap2
Pierre Kraemer's avatar
Pierre Kraemer committed
34
{
35
36
37
protected:
	bool shareVertexEmbeddings ;

38
39
40
41
	FunctorType& vertexVertexFunctor ;
	FunctorType& edgeVertexFunctor ;
	FunctorType& faceVertexFunctor ;

42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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
public:
	Map2MR_Primal() ;

	/***************************************************
	 *               CELLS INFORMATION                 *
	 ***************************************************/

	/**
	 * Return the level of insertion of the vertex of d
	 */
	unsigned int vertexInsertionLevel(Dart d) ;

	/**
	 * Return the level of the edge of d in the current level map
	 */
	unsigned int edgeLevel(Dart d) ;

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

	/**
	 * Given the face of d in the current level map,
	 * return a level 0 dart of its origin face
	 */
	Dart faceOrigin(Dart d) ;

	/**
	 * Return the oldest dart of the face of d in the current level map
	 */
	Dart faceOldestDart(Dart d) ;

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

	/**
	 * Return true if the edge of d in the current level map
	 * is subdivided to the next level,
	 * none of its resulting edges is in turn subdivided to the next level
	 * and the middle vertex is of degree 2
	 */
	bool edgeCanBeCoarsened(Dart d) ;

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

	/**
	 * Return true if the face of d in the current level map
	 * is subdivided to the next level
	 * and none of its resulting faces is in turn subdivided to the next level
	 */
	bool faceIsSubdividedOnce(Dart d) ;

102
protected:
103
104
105
106
107
108
	/***************************************************
	 *           EMBEDDINGS MANAGEMENT                 *
	 ***************************************************/

	void copyVertexEmbeddings() ;

109
110
111
112
	/***************************************************
	 *               SUBDIVISION                       *
	 ***************************************************/

113
114
115
116
117
	/**
	 * add a new resolution level
	 */
	void addNewLevel() ;

118
public:
Pierre Kraemer's avatar
Pierre Kraemer committed
119
120
121
	/**
	 * subdivide the edge of d to the next level
	 */
122
123
	void subdivideEdge(Dart d) ;

Pierre Kraemer's avatar
Pierre Kraemer committed
124
125
126
	/**
	 * subdivide the face of d to the next level
	 */
127
128
	void subdivideFace(Dart d) ;

Pierre Kraemer's avatar
Pierre Kraemer committed
129
130
131
	/**
	 * coarsen the edge of d from the next level
	 */
132
133
	void coarsenEdge(Dart d) ;

Pierre Kraemer's avatar
Pierre Kraemer committed
134
135
136
	/**
	 * coarsen the face of d from the next level
	 */
137
	void coarsenFace(Dart d) ;
138
139
140
141
142
143
144
145
146
147
148
149

	/**
	 * vertices attributes management
	 */
	void setVertexVertexFunctor(FunctorType& f) { vertexVertexFunctor = f ; }
	void computeVertexVertex(Dart d) { vertexVertexFunctor(d) ; }

	void setEdgeVertexFunctor(FunctorType& f) { edgeVertexFunctor = f ; }
	void computeEdgeVertex(Dart d) { edgeVertexFunctor(d) ; }

	void setFaceVertexFunctor(FunctorType& f) { faceVertexFunctor = f ; }
	void computeFaceVertex(Dart d) { faceVertexFunctor(d) ; }
Pierre Kraemer's avatar
Pierre Kraemer committed
150
151
152
153
154
} ;

} // namespace CGoGN

#endif