Open Inventor Reference
|
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