plucky (3) SoDB.3iv.gz

Provided by: inventor-doc_2.1.6+ds-2_all bug

NAME

       SoDB — scene graph database class

INHERITS FROM

       SoDB

SYNOPSIS

       #include <Inventor/SoDB.h>

     typedef void        SoDBHeaderCB(void *userData, SoInput *in)

          Methods from class SoDB:

     static void            init()
     static const char *    getVersion()
     static SbBool          read(SoInput *in, SoNode *&rootNode)
     static SbBool          read(SoInput *in, SoPath *&path)
     static SoSeparator *   readAll(SoInput *in)
     static SbBool          isValidHeader(const char *testString)
     static  SbBool          registerHeader(const  SbString  &headerString,  SbBool  isBinary,  float ivVersion,
                                 SoDBHeaderCB *preCB, SoDBHeaderCB *postCB, void *userData)
     static SbBool          getHeaderData(const SbString  &headerString,  SbBool  &isBinary,  float  &ivVersion,
                                 SoDBHeaderCB   *&preCB,   SoDBHeaderCB   *&postCB,   void   *&userData,  SbBool
                                 substringOK = FALSE)
     static int             getNumHeaders()
     static SbString        getHeaderString(int i)
     static SoField *       createGlobalField(const SbName &name, SoType type)
     static SoField *       getGlobalField(const SbName &name)
     static void            renameGlobalField(const SbName &oldName, const SbName &newName)
     static void            setRealTimeInterval(const SbTime &deltaT)
     static const SbTime &  getRealTimeInterval()
     static void            setDelaySensorTimeout(const SbTime &t)
     static const SbTime &  getDelaySensorTimeout()
     static int             doSelect(int nfds, fd_set *readfds,  fd_set  *writefds,  fd_set  *exceptfds,  struct
                                 timeval *userTimeOut)

DESCRIPTION

       The SoDB class holds all scene graphs, each representing a 3D scene used by an application. A scene graph
       is a collection of SoNode objects which come in several varieties (see SoNode). Application programs must
       initialize  the  database  by  calling SoDB::init() before calling any other database routines and before
       constructing  any  nodes,  paths,  functions,  or  actions.  Note  that   SoDB::init()   is   called   by
       SoInteraction::init(),  SoNodeKit::init(),  and SoXt::init(), so if you are calling any of these methods,
       you do not need to call SoDB::init() directly. All methods on this class are static.

       Typical program database initialization and scene reading is as follows:

          #include <Inventor/SoDB.h>
          #include <Inventor/SoInput.h>
          #include <Inventor/nodes/SoSeparator.h>

          SoSeparator  *rootSep;
          SoInput      in;

          SoDB::init();
          rootSep = SoDB::readAll(&in);
          if (rootSep == NULL)
              printf("Error on read...\n");
           ...

METHODS

     static void            init()
          Initializes the database. This must be called before calling any other  database  routines,  including
          the construction of any nodes, paths, engines, or actions.

     static const char *    getVersion()
          Returns a character string identifying the version of the Inventor library in use.

     static SbBool          read(SoInput *in, SoNode *&rootNode)
     static SbBool          read(SoInput *in, SoPath *&path)
          Reads  a graph from the file specified by the given SoInput, returning a pointer to the resulting root
          node in rootNode, or a pointer to the resulting path  in  path.  The  programmer  is  responsible  for
          determining  which  routine to use, based on the contents of the input. These routines return FALSE if
          any error occurred during reading.

          If the passed SoInput was used to open a file and the name of the  file  contains  a  directory,  SoDB
          automatically  adds the directory to the end of the current directory search path in the SoInput. This
          means that nested files named in SoFile nodes may be found relative to that directory.  The  directory
          is removed from the search path when reading is complete.

     static SoSeparator *   readAll(SoInput *in)
          Reads all graphs and paths from the file specified by the given SoInput. If there is only one graph in
          the file and its root is an SoSeparator, a pointer to the root is returned. In all other  cases,  this
          creates  an  SoSeparator,  adds  the  root  nodes  of all graphs read as children of it, and returns a
          pointer to it. This returns NULL on error. This processes directory paths in the same way as the other
          reading routines.

     static SbBool          isValidHeader(const char *testString)
          This  returns  TRUE  if  the  given  character string is one of the valid Inventor file headers, (e.g.
          "#Inventor V2.0 binary"), or if the  string  has  been  registered  as  a  valid  header  through  the
          registerHeader method.

     static  SbBool          registerHeader(const  SbString  &headerString,  SbBool  isBinary,  float ivVersion,
                                 SoDBHeaderCB *preCB, SoDBHeaderCB *postCB, void *userData)
          Registers the given string as a valid header for input files. The string  must  be  80  characters  or
          less,  and  start  with  the comment character '#'. If the passed isBinary flag is true, any file with
          this header will be read as a binary file. Usually, a user-defined header  represents  a  file  format
          that  is  a  superset  of the Inventor file format. The ivVersion number indicates which Inventor file
          version this header corresponds to. The user-defined callback functions preCB and  postCB  are  called
          before  and  after a file with this header is read. The userData is passed to both callback functions.
          The method returns TRUE if the header is successfully registered.  Note,  nothing  prevents  you  from
          registering the same string multiple times.

     static  SbBool          getHeaderData(const  SbString  &headerString,  SbBool  &isBinary, float &ivVersion,
                                 SoDBHeaderCB  *&preCB,   SoDBHeaderCB   *&postCB,   void   *&userData,   SbBool
                                 substringOK = FALSE)
          Passes  back  the  data registered with the given header string, including the flag specifying whether
          the string is for a binary file, pointers to the callback functions invoked before and  after  reading
          the  file, and a pointer to the user data passed to the callback functions. If the given header string
          does not match any of the registered headers, and the substringOK flag is TRUE, then the  method  will
          search  for  a registered header that is a substring of the given string. The method returns TRUE if a
          matching registered header, or subheader, was found.

     static int             getNumHeaders()
          Returns the number of valid headers, including standard Inventor headers, and user-registered headers.

     static SbString        getHeaderString(int i)
          Returns the i'th header.

     static SoField *       createGlobalField(const SbName &name, SoType type)
          The database maintains a namespace for global fields, making sure that there is at most  one  instance
          of  a  global  field  with  any  given name in the database. This routine is used to create new global
          fields.  If there is no global field with the given name, it will create a new global field  with  the
          given  name  and type. If there is already a global field with the given name and type, it will return
          it. If there is already a global field with the given name but a different type, this returns NULL.

          All global fields must be derived from SoField; typically the result of this routine is cast into  the
          appropriate type; for example:
               SoSFInt32 *longField =
                   (SoSFInt32 *) SoDB::createGlobalField("Frame",
                                                        SoSFInt32::getClassTypeId());

     static SoField *       getGlobalField(const SbName &name)
          Returns  the  global field with the given name, or NULL if there is none. The type of the field may be
          checked using the SoField::isOfType(), SoField::getClassTypeId(), and SoField::getTypeId() methods.

     static void            renameGlobalField(const SbName &oldName, const SbName &newName)
          Renames the global field named oldName. Renaming a global field to an empty name ("") deletes  it.  If
          there  is  already  a  global  field with the new name, that field will be deleted (the getGlobalField
          method can be used to guard against this).

     static void            setRealTimeInterval(const SbTime &deltaT)
          The database automatically creates one global field when SoDB::init() is called. The  realTime  global
          field,  which  is of type SoSFTime, can be connected to engines and nodes for real-time animation. The
          database will automatically update the realTime global field  12  times  per  second,  using  a  timer
          sensor. Typically, there will be a node sensor on the root of the scene graph which schedules a redraw
          whenever the scene graph changes; by updating the realTime global  field  periodically,  scene  graphs
          that  are  connected  to realTime (and are therefore animating) will be redrawn. The rate at which the
          database updates realTime can be controlled with this routine.  Passing in a zero  time  will  disable
          automatic update of realTime. If there are no enabled connections from the realTime field to any other
          field, the sensor is automatically disabled. .p  Note  that  the  SoSceneManager  class  automatically
          updates realTime immediately after redrawing, which will result in as high a frame rate as possible if
          the scene is continuously animating. The SoDB::setRealTimeInterval method ensures that engines that do
          not continuously animate (such as SoTimeCounter) will eventually be scheduled.

     static const SbTime &  getRealTimeInterval()
          Returns how often the database is updating realTime.

     static void            setDelaySensorTimeout(const SbTime &t)
          This sets the timeout value for sensors that are delay queue sensors (one-shot sensors, data sensors).
          Delay queue sensors are triggered whenever there is idle time.  If  a  long  period  of  time  elapses
          without  any  idle  time  (as  when  there are continuous events to process), these sensors may not be
          triggered. Setting this timeout value ensures that if the specified length of time elapses without any
          idle time, the delay queue sensors will be processed anyway.

     static const SbTime &  getDelaySensorTimeout()
          Returns the current delay queue timeout value.

     static  int             doSelect(int  nfds,  fd_set  *readfds,  fd_set *writefds, fd_set *exceptfds, struct
                                 timeval *userTimeOut)
          In order to keep timer and idle sensors  running  as  expected,  it  is  necessary  that  an  Inventor
          application not block waiting for input. If the Inventor application uses the Xt utility library, this
          can be handled automatically. However, if the application is using its own event loop,  this  function
          is  provided  as  a  wrapper  around select(2) that will handle Inventor tasks if necessary instead of
          blocking.

SEE ALSO

       SoBase, SoNode, SoEngine, SoField, SoInput, SoFile, SoPath, SoOneShotSensor, SoDataSensor, SoXt

                                                                                                     SoDB(3IV)()