Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

SoNode.h

00001 /**************************************************************************\
00002  *
00003  *  This file is part of the Coin 3D visualization library.
00004  *  Copyright (C) 1998-2002 by Systems in Motion. All rights reserved.
00005  *
00006  *  This library is free software; you can redistribute it and/or
00007  *  modify it under the terms of the GNU Lesser General Public License
00008  *  version 2.1 as published by the Free Software Foundation. See the
00009  *  file LICENSE.LGPL at the root directory of the distribution for
00010  *  more details.
00011  *
00012  *  If you want to use Coin for applications not compatible with the
00013  *  LGPL, please contact SIM to acquire a Professional Edition license.
00014  *
00015  *  Systems in Motion, Prof Brochs gate 6, 7030 Trondheim, NORWAY
00016  *  http://www.sim.no support@sim.no Voice: +47 22114160 Fax: +47 22207097
00017  *
00018 \**************************************************************************/
00019 
00020 #ifndef COIN_SONODE_H
00021 #define COIN_SONODE_H
00022 
00023 #include <Inventor/fields/SoFieldContainer.h>
00024 
00025 class SoAction;
00026 class SoCallbackAction;
00027 class SoChildList;
00028 class SoGLRenderAction;
00029 class SoGetBoundingBoxAction;
00030 class SoGetMatrixAction;
00031 class SoGetPrimitiveCountAction;
00032 class SoHandleEventAction;
00033 class SoNodeList;
00034 class SoNotList;
00035 class SoOutput;
00036 class SoPickAction;
00037 class SoRayPickAction;
00038 class SoSearchAction;
00039 class SoWriteAction;
00040 
00041 
00042 class COIN_DLL_API SoNode : public SoFieldContainer {
00043   typedef SoFieldContainer inherited;
00044 
00045 public:
00046   // Probably not interesting for the application programmer..?
00047 #ifndef DOXYGEN_SKIP_THIS
00048   enum Stage { FIRST_INSTANCE, PROTO_INSTANCE, OTHER_INSTANCE };
00049 #endif // !DOXYGEN_SKIP_THIS
00050 
00051   void setOverride(const SbBool state);
00052   SbBool isOverride(void) const;
00053 
00054   enum NodeType {
00055     INVENTOR = 0,
00056     VRML1 = 1
00057   };
00058   
00059   void setNodeType(const NodeType type);
00060   NodeType getNodeType(void) const;
00061 
00062   virtual SoNode * copy(SbBool copyconnections = FALSE) const;
00063   virtual SbBool affectsState(void) const;
00064 
00065   virtual void doAction(SoAction * action);
00066   virtual void GLRender(SoGLRenderAction * action);
00067   virtual void GLRenderBelowPath(SoGLRenderAction * action);
00068   virtual void GLRenderInPath(SoGLRenderAction * action);
00069   virtual void GLRenderOffPath(SoGLRenderAction * action);
00070   virtual void callback(SoCallbackAction * action);
00071   virtual void getBoundingBox(SoGetBoundingBoxAction * action);
00072   virtual void getMatrix(SoGetMatrixAction * action);
00073   virtual void handleEvent(SoHandleEventAction * action);
00074   virtual void pick(SoPickAction * action);
00075   virtual void rayPick(SoRayPickAction * action);
00076   virtual void search(SoSearchAction * action);
00077   virtual void write(SoWriteAction * action);
00078   virtual void getPrimitiveCount(SoGetPrimitiveCountAction * action);
00079 
00080   virtual void grabEventsSetup(void);
00081   virtual void grabEventsCleanup(void);
00082 
00083   virtual void startNotify(void);
00084   virtual void notify(SoNotList * l);
00085 
00086   uint32_t getNodeId(void) const;
00087   virtual SoChildList * getChildren(void) const;
00088 
00089   virtual void writeInstance(SoOutput * out);
00090   virtual SoNode * addToCopyDict(void) const;
00091   virtual void copyContents(const SoFieldContainer * from,
00092                             SbBool copyconnections);
00093   virtual SoFieldContainer * copyThroughConnection(void) const;
00094 
00095 
00096   static SoType getClassTypeId(void);
00097   static SoNode * getByName(const SbName & name);
00098   static int getByName(const SbName & name, SoNodeList & l);
00099 
00100   static void initClass(void);
00101   static void initClasses(void);
00102 
00103   static uint32_t getNextNodeId(void);
00104   static int getActionMethodIndex(const SoType type);
00105 
00106   static void getBoundingBoxS(SoAction * action, SoNode * node);
00107   static void GLRenderS(SoAction * action, SoNode * node);
00108   static void callbackS(SoAction * action, SoNode * node);
00109   static void getMatrixS(SoAction * action, SoNode * node);
00110   static void handleEventS(SoAction * action, SoNode * node);
00111   static void pickS(SoAction * action, SoNode * node);
00112   static void rayPickS(SoAction * action, SoNode * node);
00113   static void searchS(SoAction * action, SoNode * node);
00114   static void writeS(SoAction * action, SoNode * node);
00115   static void getPrimitiveCountS(SoAction * action, SoNode * node);
00116 
00117 protected:
00118   SoNode(void);
00119   virtual ~SoNode();
00120 
00121   virtual SbBool readInstance(SoInput * in, unsigned short flags);
00122 
00123   static const SoFieldData ** getFieldDataPtr(void);
00124 
00125   // These are necessary to avoid problems with us not exporting the
00126   // nextActionMethodIndex member into Win32 DLLs (we'll get
00127   // unresolved symbol for extension node classes if the SoSubNode
00128   // macros accesses the nextActionMethodIndex directly).
00129   static void setNextActionMethodIndex(int index);
00130   static int getNextActionMethodIndex(void);
00131   static void incNextActionMethodIndex(void);
00132 
00133   uint32_t uniqueId;
00134   static uint32_t nextUniqueId;
00135   static int nextActionMethodIndex;
00136 
00137 private:
00138   static SoType classTypeId;
00139   uint32_t stateflags;
00140   void clearStateFlags(const unsigned int bits);
00141   void setStateFlags(const unsigned int bits);
00142   SbBool getState(const unsigned int bits) const;
00143 
00144 };
00145 
00146 #endif // !COIN_SONODE_H

Generated at Tue Mar 5 03:31:15 2002 for Coin by doxygen1.2.9 written by Dimitri van Heesch, © 1997-2001