OpenMesh
Status.hh
1/* ========================================================================= *
2 * *
3 * OpenMesh *
4 * Copyright (c) 2001-2023, RWTH-Aachen University *
5 * Department of Computer Graphics and Multimedia *
6 * All rights reserved. *
7 * www.openmesh.org *
8 * *
9 *---------------------------------------------------------------------------*
10 * This file is part of OpenMesh. *
11 *---------------------------------------------------------------------------*
12 * *
13 * Redistribution and use in source and binary forms, with or without *
14 * modification, are permitted provided that the following conditions *
15 * are met: *
16 * *
17 * 1. Redistributions of source code must retain the above copyright notice, *
18 * this list of conditions and the following disclaimer. *
19 * *
20 * 2. Redistributions in binary form must reproduce the above copyright *
21 * notice, this list of conditions and the following disclaimer in the *
22 * documentation and/or other materials provided with the distribution. *
23 * *
24 * 3. Neither the name of the copyright holder nor the names of its *
25 * contributors may be used to endorse or promote products derived from *
26 * this software without specific prior written permission. *
27 * *
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39 * *
40 * ========================================================================= */
41
42
43
44
45//=============================================================================
46//
47// CLASS Status
48//
49//=============================================================================
50
51
52#ifndef OPENMESH_ATTRIBUTE_STATUS_HH
53#define OPENMESH_ATTRIBUTE_STATUS_HH
54
55
56//== INCLUDES =================================================================
57
58#include <OpenMesh/Core/System/config.h>
59
60
61//== NAMESPACES ===============================================================
62
63
64namespace OpenMesh {
65namespace Attributes {
66
67
68//== CLASS DEFINITION ========================================================
69
70
75
76 DELETED = 1,
77 LOCKED = 2,
79 HIDDEN = 8,
80 FEATURE = 16,
81 TAGGED = 32,
82 TAGGED2 = 64,
84 UNUSED = 256
85};
86
87
95{
96public:
97
98 typedef unsigned int value_type;
99
100 StatusInfo() : status_(0) {}
101
103 bool deleted() const { return is_bit_set(DELETED); }
105 void set_deleted(bool _b) { change_bit(DELETED, _b); }
106
107
109 bool locked() const { return is_bit_set(LOCKED); }
111 void set_locked(bool _b) { change_bit(LOCKED, _b); }
112
113
115 bool selected() const { return is_bit_set(SELECTED); }
117 void set_selected(bool _b) { change_bit(SELECTED, _b); }
118
119
121 bool hidden() const { return is_bit_set(HIDDEN); }
123 void set_hidden(bool _b) { change_bit(HIDDEN, _b); }
124
125
127 bool feature() const { return is_bit_set(FEATURE); }
129 void set_feature(bool _b) { change_bit(FEATURE, _b); }
130
131
133 bool tagged() const { return is_bit_set(TAGGED); }
135 void set_tagged(bool _b) { change_bit(TAGGED, _b); }
136
137
139 bool tagged2() const { return is_bit_set(TAGGED2); }
141 void set_tagged2(bool _b) { change_bit(TAGGED2, _b); }
142
143
148
149
151 unsigned int bits() const { return status_; }
153 void set_bits(unsigned int _bits) { status_ = _bits; }
154
155
157 bool is_bit_set(unsigned int _s) const { return (status_ & _s) > 0; }
159 void set_bit(unsigned int _s) { status_ |= _s; }
161 void unset_bit(unsigned int _s) { status_ &= ~_s; }
163 void change_bit(unsigned int _s, bool _b) {
164 if (_b) status_ |= _s; else status_ &= ~_s; }
165
166
167private:
168
169 value_type status_;
170};
171
172
173//=============================================================================
174} // namespace Attributes
175} // namespace OpenMesh
176//=============================================================================
177#endif // OPENMESH_ATTRIBUTE_STATUS_HH defined
178//=============================================================================
Contains all the mesh ingredients like the polygonal mesh, the triangle mesh, different mesh kernels ...
Definition: MeshItems.hh:59
StatusBits
Status bits used by the Status class.
Definition: Status.hh:74
@ TAGGED2
Alternate bit for tagging an item.
Definition: Status.hh:82
@ LOCKED
Item is locked.
Definition: Status.hh:77
@ FIXEDNONMANIFOLD
Item was non-two-manifold and had to be fixed.
Definition: Status.hh:83
@ DELETED
Item has been deleted.
Definition: Status.hh:76
@ SELECTED
Item is selected.
Definition: Status.hh:78
@ UNUSED
Unused.
Definition: Status.hh:84
@ HIDDEN
Item is hidden.
Definition: Status.hh:79
@ TAGGED
Item is tagged.
Definition: Status.hh:81
@ FEATURE
Item is a feature or belongs to a feature.
Definition: Status.hh:80
Add status information to a base class.
Definition: Status.hh:95
void set_fixed_nonmanifold(bool _b)
set fixed non-manifold
Definition: Status.hh:147
void set_hidden(bool _b)
set hidden
Definition: Status.hh:123
bool deleted() const
is deleted ?
Definition: Status.hh:103
void set_selected(bool _b)
set selected
Definition: Status.hh:117
void set_tagged2(bool _b)
set tagged
Definition: Status.hh:141
bool tagged() const
is tagged ?
Definition: Status.hh:133
bool is_bit_set(unsigned int _s) const
is a certain bit set ?
Definition: Status.hh:157
void set_bits(unsigned int _bits)
set whole status at once
Definition: Status.hh:153
bool locked() const
is locked ?
Definition: Status.hh:109
void set_locked(bool _b)
set locked
Definition: Status.hh:111
void set_deleted(bool _b)
set deleted
Definition: Status.hh:105
void set_feature(bool _b)
set feature
Definition: Status.hh:129
void set_bit(unsigned int _s)
set a certain bit
Definition: Status.hh:159
void set_tagged(bool _b)
set tagged
Definition: Status.hh:135
void change_bit(unsigned int _s, bool _b)
set or unset a certain bit
Definition: Status.hh:163
bool feature() const
is feature ?
Definition: Status.hh:127
bool tagged2() const
is tagged2 ? This is just one more tag info.
Definition: Status.hh:139
bool fixed_nonmanifold() const
is fixed non-manifold ?
Definition: Status.hh:145
unsigned int bits() const
return whole status
Definition: Status.hh:151
bool selected() const
is selected ?
Definition: Status.hh:115
void unset_bit(unsigned int _s)
unset a certain bit
Definition: Status.hh:161
bool hidden() const
is hidden ?
Definition: Status.hh:121

Project OpenMesh, ©  Visual Computing Institute, RWTH Aachen. Documentation generated using doxygen .