Open Inventor Reference
MeVis/ThirdParty/Sources/Inventor/inventor/lib/interaction/include/Inventor/nodekits/SoInteractionKit.h
Go to the documentation of this file.
00001 /*
00002  *
00003  *  Copyright (C) 2000 Silicon Graphics, Inc.  All Rights Reserved. 
00004  *
00005  *  This library is free software; you can redistribute it and/or
00006  *  modify it under the terms of the GNU Lesser General Public
00007  *  License as published by the Free Software Foundation; either
00008  *  version 2.1 of the License, or (at your option) any later version.
00009  *
00010  *  This library is distributed in the hope that it will be useful,
00011  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013  *  Lesser General Public License for more details.
00014  *
00015  *  Further, this software is distributed without any warranty that it is
00016  *  free of the rightful claim of any third person regarding infringement
00017  *  or the like.  Any license provided herein, whether implied or
00018  *  otherwise, applies only to this software file.  Patent licenses, if
00019  *  any, provided herein do not apply to combinations of this program with
00020  *  other software, or any other product whatsoever.
00021  * 
00022  *  You should have received a copy of the GNU Lesser General Public
00023  *  License along with this library; if not, write to the Free Software
00024  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00025  *
00026  *  Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
00027  *  Mountain View, CA  94043, or:
00028  * 
00029  *  http://www.sgi.com 
00030  * 
00031  *  For further information regarding this notice, see: 
00032  * 
00033  *  http://oss.sgi.com/projects/GenInfo/NoticeExplan/
00034  *
00035  */
00036 
00037 
00038 /*
00039  * Copyright (C) 1990,91   Silicon Graphics, Inc.
00040  *
00041  _______________________________________________________________________
00042  ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
00043  |
00044  |   $Revision: 1.1.1.1 $
00045  |
00046  |   Description:
00047  |      This file defines the base class for all interaction nodekits.
00048  |
00049  |   Author(s): Paul Isaacs
00050  |
00051  ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
00052  _______________________________________________________________________
00053  */
00054 
00055 #ifndef  _SO_INTERACTION_KIT_
00056 #define  _SO_INTERACTION_KIT_
00057 
00058 #include <Inventor/nodes/SoSeparator.h>
00059 #include <Inventor/nodekits/SoBaseKit.h>
00060 #include <Inventor/fields/SoSFEnum.h>
00061 #include <Inventor/sensors/SoFieldSensor.h>
00062 #include <Inventor/SoNodeKitPath.h>
00063 
00064 class SoPath;
00065 class SoPathList;
00066 
00067 
00070 
00094 
00095 
00096 class INVENTOR_API SoInteractionKit : public SoBaseKit {
00097 
00098     SO_KIT_HEADER(SoInteractionKit);
00099 
00100     SO_KIT_CATALOG_ENTRY_HEADER(topSeparator);
00101     SO_KIT_CATALOG_ENTRY_HEADER(geomSeparator);
00102 
00103   public:
00104 
00134     virtual SbBool  setPartAsPath( const SbName &partName, 
00135                                    SoPath *surrogatePath );
00136 
00138     virtual SbBool affectsState() const;
00139 
00141     enum CacheEnabled {
00142         OFF,                    
00143         ON,                     
00144         AUTO                    
00145     };
00146 
00148 
00149 
00151     SoSFEnum renderCaching;     
00152 
00156     SoSFEnum boundingBoxCaching;
00157 
00161     SoSFEnum renderCulling;     
00162 
00164     SoSFEnum pickCulling;       
00165 
00167 
00168   SoEXTENDER public:
00169 
00184     virtual SbBool setPartAsDefault(const SbName &partName, 
00185                               SoNode *newNode, SbBool onlyIfAlready = TRUE );
00186     virtual SbBool setPartAsDefault(const SbName &partName, 
00187                     const SbName &newNodeName, SbBool onlyIfAlready = TRUE);
00188 
00196     SbBool isPathSurrogateInMySubgraph(const SoPath *pathToCheck);
00197     SbBool isPathSurrogateInMySubgraph(const SoPath *pathToCheck, 
00198                                        SoPath *&pathToOwner,
00199                                        SbName  &surrogateNameInOwner,
00200                                        SoPath *&surrogatePathInOwner,
00201                                        SbBool  fillArgs = TRUE );
00202 
00203     static void setSwitchValue( SoNode *n, int newVal );
00204 
00205   SoINTERNAL public:
00206     static void         initClass();    
00207 
00208   protected:
00209     SoInteractionKit();
00210     ~SoInteractionKit();
00211 
00214     virtual void        copyContents(const SoFieldContainer *fromFC,
00215                                      SbBool copyConnections);
00216 
00219     virtual SoNode *getAnyPart( const SbName &partName, SbBool makeIfNeeded,
00220                         SbBool leafCheck = FALSE, SbBool publicCheck = FALSE );
00221     virtual SoNodeKitPath *createPathToAnyPart(const SbName &partName,
00222                         SbBool makeIfNeeded,
00223                         SbBool leafCheck = FALSE, SbBool publicCheck = FALSE,
00224                         const SoPath *pathToExtend = NULL );
00225     virtual SbBool setAnyPart( const SbName &partName, SoNode *from,
00226                         SbBool anyPart = TRUE );
00227 
00231     virtual SbBool  setAnyPartAsPath( const SbName &partName, 
00232                                       SoPath *surrogatePath,
00233                                       SbBool leafCheck = FALSE, 
00234                                       SbBool publicCheck = FALSE );
00235 
00238     virtual SbBool readInstance(SoInput *in, unsigned short flags);
00239 
00240     static void readDefaultParts( const char *fileName,        
00241                                   const char defaultBuffer[],   
00242                                     int defBufSize );        
00243 
00246     virtual SbBool setAnyPartAsDefault(const SbName &partName, 
00247                        SoNode *newNode, SbBool anyPart = TRUE, 
00248                        SbBool onlyIfAlready = TRUE );
00249     virtual SbBool setAnyPartAsDefault(const SbName &partName, 
00250                        const SbName &newNodeName, SbBool anyPart = TRUE, 
00251                        SbBool onlyIfAlready = TRUE );
00252 
00253     SbBool setAnySurrogatePath( const SbName &inName, SoPath *inPath,
00254                         SbBool leafCheck = FALSE, SbBool publicCheck = FALSE );
00255 
00262     virtual SbBool setUpConnections( SbBool onOff, SbBool doItAlways = FALSE );
00263 
00283     virtual void setDefaultOnNonWritingFields();
00284 
00294     SoFieldSensor *fieldSensor;
00295     static void fieldSensorCB( void *, SoSensor *);
00296     SoSeparator *oldTopSep;
00297 
00298     void connectSeparatorFields( SoSeparator *dest, SbBool onOff );
00299 
00300   private:
00301   
00306     SoPathList    *surrogatePartPathList;
00307     SbPList       *surrogatePartNameList;
00308 
00309     void   setMySurrogatePath( const SbName &name, SoPath *newPath );
00310     int    indexOfSurrogateInMyList(const SoPath *pathToCheck);
00311 
00313     static SoGroup *readFromFile(const char *fileName);
00314     static SoGroup *readFromBuffer( const char defaultBuffer[], int defBufSize);
00315 };
00316 
00317 #endif /* _SO_INTERACTION_KIT_ */
00318