~ubuntu-branches/ubuntu/raring/openwalnut/raring

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
31
32
33
34
35
36
37
38
39
40
41
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
//---------------------------------------------------------------------------
//
// Project: OpenWalnut ( http://www.openwalnut.org )
//
// Copyright 2009 OpenWalnut Community, BSV@Uni-Leipzig and CNCF@MPI-CBS
// For more information see http://www.openwalnut.org/copying
//
// This file is part of OpenWalnut.
//
// OpenWalnut 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 3 of the License, or
// (at your option) any later version.
//
// OpenWalnut 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 OpenWalnut. If not, see <http://www.gnu.org/licenses/>.
//
//---------------------------------------------------------------------------

#ifndef WROI_H
#define WROI_H

#include <list>
#include <string>

#include <boost/signals2/signal.hpp>
#include <boost/signals2/connection.hpp>

#include <osg/Geode>

#include "../common/WProperties.h"




class WPickHandler;

/**
 * Superclass for different ROI (region of interest) types.
 */
class WROI : public osg::Geode
{
public:
    WROI();

    /**
     * Need virtual destructor because of virtual function.
     */
    virtual ~WROI();

    /**
     * sets the NOT flag
     *
     * \param isNot
     */
    void setNot( bool isNot = true );

    /**
     * getter for NOT flag
     *
     * \return the flag
     */
    bool isNot();

    /**
     * getter
     *
     * \return the active flag
     */
    bool active();

    /**
     * setter
     *
     * \param active
     */
    void setActive( bool active );

    /**
     * hides the roi in the scene
     */
    void hide();

    /**
     * unhides the roi in the scene
     */
    void unhide();

    /**
     * Getter for modified flag
     * \return the dirty flag
     */
    bool dirty();

    /**
     * sets the dirty flag
     */
    void setDirty();

    /**
     * Getter
     * \return the properties object for this roi
     */
    boost::shared_ptr< WProperties > getProperties();

    /**
     * Add a specified notifier to the list of default notifiers which get connected to each roi.
     *
     * \param notifier  the notifier function
     */
    void addROIChangeNotifier( boost::shared_ptr< boost::function< void() > > notifier );

    /**
     * Remove a specified notifier from the list of default notifiers which get connected to each roi.
     *
     * \param notifier  the notifier function
     */
    void removeROIChangeNotifier( boost::shared_ptr< boost::function< void() > > notifier );


protected:
    /**
     * initializes the roi's properties
     */
    void properties();

    /**
     * callback when a property gets changed
     */
    void propertyChanged();

    /**
     * signals a roi change to all subscribers
     */
    void signalRoiChange();


    osg::ref_ptr< WPickHandler > m_pickHandler; //!< A pointer to the pick handler used to get gui events for moving the box.

    /**
     * the property object for the module
     */
    boost::shared_ptr< WProperties > m_properties;

    /**
     * dirty flag, indicating the graphics needs updating, it is no longer used for bitfield updating
     * since these customers get the update notification via callback
     */
    WPropBool m_dirty;

    /**
     * indicates if the roi is active
     */
    WPropBool m_active;

    /**
     * indicates if the roi is visible in the scene
     */
    WPropBool m_show;

    /**
     * indicates if the roi is negated
     */
    WPropBool m_not;

    /**
     * threshold for an arbitrary roi
     */
    WPropDouble m_threshold;

    /**
     * A color for painting the roi in the scene
     */
    WPropColor m_color;

    /**
     * The notifiers connected to added rois by default.
     */
    std::list< boost::shared_ptr< boost::function< void() > > > m_changeNotifiers;


    /**
     * Lock for associated notifiers set.
     */
    boost::shared_mutex m_associatedNotifiersLock;

private:
    /**
     *  updates the graphics
     */
    virtual void updateGFX() = 0;
};

#endif  // WROI_H