OpenMesh
Status.hh
1 /* ========================================================================= *
2  * *
3  * OpenMesh *
4  * Copyright (c) 2001-2015, 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  * $Revision$ *
45  * $Date$ *
46  * *
47 \*===========================================================================*/
48 
49 
50 //=============================================================================
51 //
52 // CLASS Status
53 //
54 //=============================================================================
55 
56 
57 #ifndef OPENMESH_ATTRIBUTE_STATUS_HH
58 #define OPENMESH_ATTRIBUTE_STATUS_HH
59 
60 
61 //== INCLUDES =================================================================
62 
63 #include <OpenMesh/Core/System/config.h>
64 
65 
66 //== NAMESPACES ===============================================================
67 
68 
69 namespace OpenMesh {
70 namespace Attributes {
71 
72 
73 //== CLASS DEFINITION ========================================================
74 
75 
79 enum StatusBits {
80 
81  DELETED = 1,
82  LOCKED = 2,
83  SELECTED = 4,
84  HIDDEN = 8,
85  FEATURE = 16,
86  TAGGED = 32,
87  TAGGED2 = 64,
89  UNUSED = 256
90 };
91 
92 
100 {
101 public:
102 
103  typedef unsigned int value_type;
104 
105  StatusInfo() : status_(0) {}
106 
108  bool deleted() const { return is_bit_set(DELETED); }
110  void set_deleted(bool _b) { change_bit(DELETED, _b); }
111 
112 
114  bool locked() const { return is_bit_set(LOCKED); }
116  void set_locked(bool _b) { change_bit(LOCKED, _b); }
117 
118 
120  bool selected() const { return is_bit_set(SELECTED); }
122  void set_selected(bool _b) { change_bit(SELECTED, _b); }
123 
124 
126  bool hidden() const { return is_bit_set(HIDDEN); }
128  void set_hidden(bool _b) { change_bit(HIDDEN, _b); }
129 
130 
132  bool feature() const { return is_bit_set(FEATURE); }
134  void set_feature(bool _b) { change_bit(FEATURE, _b); }
135 
136 
138  bool tagged() const { return is_bit_set(TAGGED); }
140  void set_tagged(bool _b) { change_bit(TAGGED, _b); }
141 
142 
144  bool tagged2() const { return is_bit_set(TAGGED2); }
146  void set_tagged2(bool _b) { change_bit(TAGGED2, _b); }
147 
148 
153 
154 
156  unsigned int bits() const { return status_; }
158  void set_bits(unsigned int _bits) { status_ = _bits; }
159 
160 
162  bool is_bit_set(unsigned int _s) const { return (status_ & _s) > 0; }
164  void set_bit(unsigned int _s) { status_ |= _s; }
166  void unset_bit(unsigned int _s) { status_ &= ~_s; }
168  void change_bit(unsigned int _s, bool _b) {
169  if (_b) status_ |= _s; else status_ &= ~_s; }
170 
171 
172 private:
173 
174  value_type status_;
175 };
176 
177 
178 //=============================================================================
179 } // namespace Attributes
180 } // namespace OpenMesh
181 //=============================================================================
182 #endif // OPENMESH_ATTRIBUTE_STATUS_HH defined
183 //=============================================================================
Item is locked.
Definition: Status.hh:82
Add status information to a base class.
Definition: Status.hh:99
Item is tagged.
Definition: Status.hh:86
Item has been deleted.
Definition: Status.hh:81
void set_tagged(bool _b)
set tagged
Definition: Status.hh:140
void set_bit(unsigned int _s)
set a certain bit
Definition: Status.hh:164
void set_selected(bool _b)
set selected
Definition: Status.hh:122
bool tagged2() const
is tagged2 ? This is just one more tag info.
Definition: Status.hh:144
bool locked() const
is locked ?
Definition: Status.hh:114
void set_tagged2(bool _b)
set tagged
Definition: Status.hh:146
Unused.
Definition: Status.hh:89
void set_feature(bool _b)
set feature
Definition: Status.hh:134
bool feature() const
is feature ?
Definition: Status.hh:132
void set_fixed_nonmanifold(bool _b)
set fixed non-manifold
Definition: Status.hh:152
bool fixed_nonmanifold() const
is fixed non-manifold ?
Definition: Status.hh:150
bool deleted() const
is deleted ?
Definition: Status.hh:108
Contains all the mesh ingredients like the polygonal mesh, the triangle mesh, different mesh kernels ...
Definition: MeshItems.hh:64
Item was non-two-manifold and had to be fixed.
Definition: Status.hh:88
void set_hidden(bool _b)
set hidden
Definition: Status.hh:128
void set_deleted(bool _b)
set deleted
Definition: Status.hh:110
Item is hidden.
Definition: Status.hh:84
bool tagged() const
is tagged ?
Definition: Status.hh:138
bool is_bit_set(unsigned int _s) const
is a certain bit set ?
Definition: Status.hh:162
void set_locked(bool _b)
set locked
Definition: Status.hh:116
void change_bit(unsigned int _s, bool _b)
set or unset a certain bit
Definition: Status.hh:168
Item is selected.
Definition: Status.hh:83
Alternate bit for tagging an item.
Definition: Status.hh:87
unsigned int bits() const
return whole status
Definition: Status.hh:156
void unset_bit(unsigned int _s)
unset a certain bit
Definition: Status.hh:166
Item is a feature or belongs to a feature.
Definition: Status.hh:85
StatusBits
Status bits used by the Status class.
Definition: Status.hh:79
void set_bits(unsigned int _bits)
set whole status at once
Definition: Status.hh:158
bool hidden() const
is hidden ?
Definition: Status.hh:126
bool selected() const
is selected ?
Definition: Status.hh:120

Project OpenMesh, ©  Computer Graphics Group, RWTH Aachen. Documentation generated using doxygen .