File: SoDataSensor.h

package info (click to toggle)
inventor 2.1.5-10%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 35,712 kB
  • sloc: ansic: 33,864; lisp: 7,361; cpp: 3,874; yacc: 369; sh: 360; perl: 234; awk: 141; makefile: 80; csh: 35; sed: 11
file content (157 lines) | stat: -rw-r--r-- 5,975 bytes parent folder | download | duplicates (12)
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
/*
 *
 *  Copyright (C) 2000 Silicon Graphics, Inc.  All Rights Reserved. 
 *
 *  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.
 *
 *  Further, this software is distributed without any warranty that it is
 *  free of the rightful claim of any third person regarding infringement
 *  or the like.  Any license provided herein, whether implied or
 *  otherwise, applies only to this software file.  Patent licenses, if
 *  any, provided herein do not apply to combinations of this program with
 *  other software, or any other product whatsoever.
 * 
 *  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 *  Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
 *  Mountain View, CA  94043, or:
 * 
 *  http://www.sgi.com 
 * 
 *  For further information regarding this notice, see: 
 * 
 *  http://oss.sgi.com/projects/GenInfo/NoticeExplan/
 *
 */

//  -*- C++ -*-

/*
 * Copyright (C) 1990,91,92   Silicon Graphics, Inc.
 *
 _______________________________________________________________________
 ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
 |
 |   $Revision: 1.1.1.1 $
 |
 |   Description:
 |	Abstract base class for sensors that attach to some part of a
 |	scene graph and detect changes to it. A data sensor is scheduled
 |	when a change is made to the thing to which it is attached. This
 |	change is detected via the notification mechanism.
 |
 |   Author(s)		: Nick Thompson, Gavin Bell, Paul Strauss
 |
 ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
 _______________________________________________________________________
 */

#ifndef  _SO_DATA_SENSOR_
#define  _SO_DATA_SENSOR_

class SoBase;
class SoNode;
class SoPath;
class SoNotList;

#include <Inventor/sensors/SoDelayQueueSensor.h>

// C-api: abstract
// C-api: prefix=SoDataSens
class SoDataSensor : public SoDelayQueueSensor {

  public:
    // Constructors. The second form takes standard callback function and data
    // C-api: end
    SoDataSensor();
    SoDataSensor(SoSensorCB *func, void *data);
    // C-api: begin

    // Destructor
    virtual ~SoDataSensor();

    // Sets a callback to call when the item (SoBase) to which the
    // sensor is attached is about to be deleted. Set this to NULL to
    // remove the callback.
    // C-api: name=setDelCB
    void		setDeleteCallback(SoSensorCB *func, void *data = NULL)
	{ deleteFunc = func; deleteData = data; }

    // This may be called from the callback function of immediate
    // (priority 0) sensors. It returns the node in the scene graph
    // that caused the sensor to be scheduled and triggered, if
    // there was such a node.  If there wasn't such a node, or if the
    // sensor is not an immediate sensor, NULL is returned.
    // This is only valid for immediate sensors because if the sensor
    // isn't immediate then the sensor may be scheduled several times,
    // and there isn't one particular node that can be said to have
    // caused the trigger.
    // C-api: name=getTrigNode
    SoNode *		getTriggerNode() const;

    // Like getTriggerNode(), but returns the field that started
    // notification (NULL if the sensor isn't priority 0 or if
    // notification didn't start at a field).
    // C-api: name=getTrigField
    SoField *		getTriggerField() const;
    
    // Returns the path from the node to which this sensor is attached
    // down to the child node that changed.  setTriggerPathFlag(TRUE)
    // must be called before the sensor is scheduled, or this will
    // return NULL.  It will also return NULL if the sensor is not
    // immediate or if the notification doesn't go through a node
    // C-api: name=getTrigPath
    SoPath *		getTriggerPath() const;

    // Sets/returns the flag that indicates whether the trigger path
    // (see getTriggerPath()) is available to callback methods. This
    // is FALSE by default. Note that setting this to TRUE will add a
    // little overhead when the sensor is notified.
    // C-api: name=setTrigPathFlag
    void		setTriggerPathFlag(SbBool flag) { doTrigPath = flag; }
    // C-api: name=getTrigPathFlag
    SbBool		getTriggerPathFlag() const	{ return doTrigPath; }

    // Override unschedule() to reset trigNode and trigPath.
    virtual void unschedule();

  SoINTERNAL public:
    // Override trigger to reset trigNode and trigPath, if
    // necessary.
    virtual void trigger();

    // Propagates modification notification through an instance. By
    // default, this schedules the sensor to be triggered and saves
    // some information from the notification list for use by the
    // callback function.  Called by SoBase.
    virtual void	notify(SoNotList *list);

    // This is called when the base (path, field, node, whatever) is
    // deleted. All subclasses must implement this to do the right
    // thing.
    virtual void	dyingReference() = 0;

  protected:
    // Invokes the delete callback
    void		invokeDeleteCallback();

  private:
    SoSensorCB		*deleteFunc;    // CB and data for when attached SoBase
    void		*deleteData;	//     is about to be deleted
    SoNode		*trigNode;	// Node that triggered sensor
    SoField		*trigField;	// Field that triggered sensor
    SoPath		*trigPath;	// Path to trigNode
    SbBool		doTrigPath;	// Whether to compute trigger path
};

#endif  /* _SO_DATA_SENSOR_ */