File: SoComputeBoundingBox.h

package info (click to toggle)
inventor 2.1.5-10-19
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 36,252 kB
  • ctags: 24,580
  • sloc: ansic: 33,867; lisp: 7,361; cpp: 3,874; yacc: 369; sh: 359; perl: 234; awk: 141; makefile: 79; csh: 35; sed: 11
file content (146 lines) | stat: -rw-r--r-- 5,149 bytes parent folder | download | duplicates (13)
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
/*
 *
 *  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:
 |	This file contains the implementation of the
 |	SoComputeBoundingBox engine
 |
 |   Classes:
 |	SoComputeBoundingBox
 |
 |   Author(s)		: Paul S. Strauss
 |
 ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
 _______________________________________________________________________
 */

#ifndef  _SO_COMPUTE_BOUNDING_BOX_
#define  _SO_COMPUTE_BOUNDING_BOX_

#include <Inventor/SbViewportRegion.h>
#include <Inventor/engines/SoSubEngine.h>
#include <Inventor/fields/SoSFPath.h>
#include <Inventor/fields/SoSFNode.h>
#include <Inventor/fields/SoSFVec3f.h>

class SoGetBoundingBoxAction;

/////////////////////////////////////////////////////////////////////////////
//
// Class: SoComputeBoundingBox
//
//  This engine has two input fields: "node" (SoSFNode) and "path"
//  (SoSFPath). By default, these fields contain NULL pointers. If the
//  "path" field is not NULL, this engine computes the bounding box
//  and center of the graph defined by the path, using an
//  SoGetBoundingBoxAction, and outputs the results. If the "path"
//  field is NULL but the "node" field isn't, it computes the bounding
//  box and center of the graph rooted by the node.
//
//  If both the node and the path are NULL, the outputs are disabled.
//
//  The "boxCenter" output is the center of the computed bounding box,
//  and the "objectCenter" output is the center defined by the objects
//  themselves, as returned by SoGetBoundingBoxAction::getCenter().
//
//  The engine uses a default viewport region when constructing the
//  SoGetBoundingBoxAction, so screen-based objects (such as 2D text)
//  may not be dealt with correctly. If this feature is needed, you
//  can call setViewportRegion() on an engine instance to set up the
//  correct viewport region to use.
//
/////////////////////////////////////////////////////////////////////////////

// C-api: prefix=SoComputeBBox
// C-api: public=node,path,min,max,boxCenter,objectCenter
class SoComputeBoundingBox : public SoEngine {

    SO_ENGINE_HEADER(SoComputeBoundingBox);

  public:
    // Inputs:
    SoSFNode		node;		// Pointer to root node of graph
    SoSFPath		path;		// Pointer to path defining graph

    // Outputs:
    SoEngineOutput	min;		// (SoSFVec3f) Minimum point of bbox
    SoEngineOutput	max;		// (SoSFVec3f) Maximum point of bbox
    SoEngineOutput	boxCenter;	// (SoSFVec3f) Center point of bbox
    SoEngineOutput	objectCenter;	// (SoSFVec3f) Center of object(s)

    // Constructor
    SoComputeBoundingBox();

    // Sets/returns viewport region to use for bounding box computation
    // C-api: name=setVPReg
    void		   setViewportRegion(const SbViewportRegion &vpReg);
    // C-api: name=getVPReg
    const SbViewportRegion &getViewportRegion() const;

  SoINTERNAL public:
    static void			initClass();

  protected:
    // Indicates that an input has changed - we use this to determine
    // whether to use the node or path, or to disable output entirely
    virtual void		inputChanged(SoField *whichInput);

  private:
    // Pointer to SoGetBoundingBoxAction
    SoGetBoundingBoxAction	*bba;

    // Each of these is TRUE if the corresponding input pointer is non-NULL
    SbBool			gotNode;
    SbBool			gotPath;

    // Destructor
    virtual ~SoComputeBoundingBox();

    // Evaluation method
    virtual void	evaluate();
};

#endif  /* _SO_COMPUTE_BOUNDING_BOX_ */