File: SoNode.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 (236 lines) | stat: -rw-r--r-- 8,286 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
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
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
/*
 *
 *  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   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:
 |	This file defines the base SoNode class.
 |
 |   Author(s)		: Paul S. Strauss, Nick Thompson
 |
 ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
 _______________________________________________________________________
 */

#ifndef  _SO_NODE_
#define  _SO_NODE_

#include <Inventor/fields/SoFieldContainer.h>
#include <Inventor/SoLists.h>
#include <Inventor/SbString.h>
#include <Inventor/SoType.h>

class SoAction;
class SoCallbackAction;
class SoChildList;
class SoFieldData;
class SoGLRenderAction;
class SoGetBoundingBoxAction;
class SoGetMatrixAction;
class SoHandleEventAction;
class SoInput;
class SoOutput;
class SoPickAction;
class SoRayPickAction;
class SoSearchAction;
class SoWriteAction;

//////////////////////////////////////////////////////////////////////////////
//
//  Class: SoNode
//
//  Base SoNode class (abstract).
//
//////////////////////////////////////////////////////////////////////////////

// C-api: abstract

class SoNode : public SoFieldContainer {

  public:

    // Turns override flag on or off
    void		setOverride(SbBool state);

    // Returns the state of the override flag
    SbBool		isOverride() const		{ return override; }

    // Returns type identifier for SoNode class
    // C-api: expose
    static SoType	getClassTypeId()	{ return classTypeId; }

    // Creates and returns an exact copy of the node. If the node is a
    // group, it copies the children as well. If the copyConnections
    // flag is TRUE (it is FALSE by default), any connections to (but
    // not from) fields of the node are copied, as well.
    SoNode *		copy(SbBool copyConnections = FALSE) const;

    // Returns TRUE if a node has an affect on the state during
    // traversal. The default method returns TRUE. Node classes (such
    // as SoSeparator) that isolate their effects from the rest of the
    // graph override this method to return FALSE.
    virtual SbBool	affectsState() const;

    // A node's name can be set using setName() (which is a method on
    // SoBase).  These methods allow nodes to be looked up by name.
    static SoNode *	getByName(const SbName &name);
    // C-api: name=getByNameList
    static int		getByName(const SbName &name, SoNodeList &list);

  SoEXTENDER public:

    // This method performs the "typical" operation of a node for any
    // action. The default implementation does nothing.
    virtual void	doAction(SoAction *action);

    // These virtual functions implement all of the actions for nodes,
    // Most of the default implementations do nothing.
    virtual void	GLRender(SoGLRenderAction *action);
    virtual void	callback(SoCallbackAction *action);
    virtual void	getBoundingBox(SoGetBoundingBoxAction *action);
    virtual void	getMatrix(SoGetMatrixAction *action);
    virtual void	handleEvent(SoHandleEventAction *action);
    virtual void	pick(SoPickAction *action);
    virtual void	rayPick(SoRayPickAction *action);
    virtual void	search(SoSearchAction *action);
    virtual void	write(SoWriteAction *action);

    // These methods make render traversal faster by implementing
    // different rendering paths corresponding to different action
    // path codes.  The SoNode methods just call GLRender.
    virtual void	GLRenderBelowPath(SoGLRenderAction *action);
    virtual void	GLRenderInPath(SoGLRenderAction *action);
    virtual void	GLRenderOffPath(SoGLRenderAction *action);

    // These virtual functions are called when a node gains or loses
    // status as "grabber" of events (see HandleEventAction::setGrabber()).
    // The default methods do nothing.
    virtual void	grabEventsSetup();
    virtual void	grabEventsCleanup();

  SoINTERNAL public:
    enum Stage {
	FIRST_INSTANCE,		// First real instance being constructed
	PROTO_INSTANCE,		// Prototype instance being constructed
	OTHER_INSTANCE		// Subsequent instance being constructed
    };

    // Initializes base node class
    static void		initClass();

    // Initialize ALL Inventor node classes
    static void		initClasses();

    // Initiates notification from an instance.
    virtual void	startNotify();

    // Propagates modification notification through an instance.
    virtual void	notify(SoNotList *list);

    // Returns the unique id for a node
    uint32_t		getNodeId() const	{ return uniqueId; }

    // Returns the next available unique id
    static uint32_t	getNextNodeId()	{ return nextUniqueId; }

    // Returns pointer to children, or NULL if none
    virtual SoChildList *getChildren() const;

    // Writes instance to SoOutput. (Used for either stage of writing.)
    virtual void	writeInstance(SoOutput *out);

    // Returns the index of this node in the action/method table,
    // given its type.
    static int		getActionMethodIndex(SoType t)
	    { return t.getData(); }

    // Recursively adds this node and all nodes under it to the copy
    // dictionary. Returns the copy of this node.
    virtual SoNode *	addToCopyDict() const;

    // Copies the contents of the given node into this instance. The
    // default implementation copies just field values and the name.
    virtual void	copyContents(const SoFieldContainer *fromFC,
				     SbBool copyConnections);

    // Copies an instance that is encountered through a field connection
    virtual SoFieldContainer *	copyThroughConnection() const;

  protected:
    // This is used by the field-inheritence mechanism, hidden in
    // the SoSubNode macros
    static const SoFieldData **getFieldDataPtr() { return NULL; }

    // Constructor, destructor
    SoNode();
    virtual ~SoNode();

    // Unique id for this node.
    uint32_t	uniqueId;

    // Next available unique id
    static uint32_t nextUniqueId;

    // Next index into the action method table
    static int		nextActionMethodIndex;

  private:
    static SoType	classTypeId;	// Type identifier

    SbBool		override;	// TRUE if node overrides others

    // These static methods are registered with the database - they
    // simply call the appropriate virtual function
    static void		callbackS(SoAction *, SoNode *);
    static void		GLRenderS(SoAction *, SoNode *);
    static void		getBoundingBoxS(SoAction *, SoNode *);
    static void		getMatrixS(SoAction *, SoNode *);
    static void		handleEventS(SoAction *, SoNode *);
    static void		pickS(SoAction *, SoNode *);
    static void		rayPickS(SoAction *, SoNode *);
    static void		searchS(SoAction *, SoNode *);
    static void		writeS(SoAction *, SoNode *);
};

#endif /* _SO_NODE_ */