OpenWalnut
1.3.1
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
src
core
graphicsEngine
callbacks
WGENodeMaskCallback.cpp
1
//---------------------------------------------------------------------------
2
//
3
// Project: OpenWalnut ( http://www.openwalnut.org )
4
//
5
// Copyright 2009 OpenWalnut Community, BSV@Uni-Leipzig and CNCF@MPI-CBS
6
// For more information see http://www.openwalnut.org/copying
7
//
8
// This file is part of OpenWalnut.
9
//
10
// OpenWalnut is free software: you can redistribute it and/or modify
11
// it under the terms of the GNU Lesser General Public License as published by
12
// the Free Software Foundation, either version 3 of the License, or
13
// (at your option) any later version.
14
//
15
// OpenWalnut is distributed in the hope that it will be useful,
16
// but WITHOUT ANY WARRANTY; without even the implied warranty of
17
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
// GNU Lesser General Public License for more details.
19
//
20
// You should have received a copy of the GNU Lesser General Public License
21
// along with OpenWalnut. If not, see <http://www.gnu.org/licenses/>.
22
//
23
//---------------------------------------------------------------------------
24
25
#include "WGENodeMaskCallback.h"
26
27
WGENodeMaskCallback::WGENodeMaskCallback
( boost::shared_ptr< WBoolFlag > flag ):
28
osg::NodeCallback(),
29
m_flag( flag )
30
{
31
// get change signal
32
m_connection
=
m_flag
->getValueChangeCondition()->subscribeSignal(
33
boost::bind( &
WGENodeMaskCallback::activate
,
this
)
34
);
35
}
36
37
WGENodeMaskCallback::~WGENodeMaskCallback
()
38
{
39
// cleanup
40
m_connection
.disconnect();
41
}
42
43
void
WGENodeMaskCallback::activate
()
44
{
45
if
(
m_flag
->get() )
// only handle activation here
46
{
47
m_reactivateSignal
();
48
}
49
}
50
51
void
WGENodeMaskCallback::operator()
( osg::Node* node, osg::NodeVisitor* nv )
52
{
53
// Deactivate the node
54
if
( !
m_flag
->get() )
// only handle deactivation here
55
{
56
node->setNodeMask( 0x0 );
57
58
// NOTE: this also deactivates the callback. So reactivating the node is done in a separate method
59
// connect the flag's callback to the signal, only this way, we can ensure the reactivation of a node without saving a pointer to it.
60
m_reactivateConnection
=
m_reactivateSignal
.connect( boost::bind( &osg::Node::setNodeMask, node, 0xFFFFFFFF ) );
61
}
62
63
traverse( node, nv );
64
}
65
Generated by
1.8.4