Provided by: libcoin80-doc_3.1.4~abc9f50-4ubuntu2_all bug

NAME

       SoBaseKit -

       The SoBaseKit class is the toplevel superclass for nodekits.

       Node kits are collections of nodes and other node kits (from here on node kits which are part of some
       other node kit, will only be referred to as nodes or parts, see catalogs and parts), organized in a way
       that is convenient for its use. A node kit inherits SoNode and can thus be inserted into a scenegraph as
       any other node.

SYNOPSIS

       #include <Inventor/nodekits/SoBaseKit.h>

       Inherits SoNode.

       Inherited by SoAppearanceKit, SoCameraKit, SoForeignFileKit, SoInteractionKit, SoLightKit,
       SoNodeVisualize, SoProfilerOverlayKit, SoSceneKit, and SoSeparatorKit.

   Public Member Functions
       virtual SoType getTypeId (void) const
           Returns the type identification of an object derived from a class inheriting SoBase. This is used for
           run-time type checking and 'downward' casting.
       SoBaseKit (void)
       virtual const SoNodekitCatalog * getNodekitCatalog (void) const
       virtual SoNode * getPart (const SbName &partname, SbBool makeifneeded)
       SbString getPartString (const SoBase *part)
       virtual SoNodeKitPath * createPathToPart (const SbName &partname, SbBool makeifneeded, const SoPath
           *pathtoextend=NULL)
       virtual SbBool setPart (const SbName &partname, SoNode *from)
       SbBool set (const char *namevaluepairliststring)
       SbBool set (const char *partnamestring, const char *parameterstring)
       virtual void doAction (SoAction *action)
       virtual void callback (SoCallbackAction *action)
       virtual void GLRender (SoGLRenderAction *action)
       virtual void getBoundingBox (SoGetBoundingBoxAction *action)
       virtual void getMatrix (SoGetMatrixAction *action)
       virtual void handleEvent (SoHandleEventAction *action)
       virtual void rayPick (SoRayPickAction *action)
       virtual void search (SoSearchAction *action)
       virtual void write (SoWriteAction *action)
       virtual void getPrimitiveCount (SoGetPrimitiveCountAction *action)
       virtual SoChildList * getChildren (void) const
       void printDiagram (void)
       void printSubDiagram (const SbName &rootname, int level)
       void printTable (void)
       virtual void addWriteReference (SoOutput *out, SbBool isfromfield=FALSE)
       SbBool forceChildDrivenWriteRefs (SoOutput *out)

   Static Public Member Functions
       static SoType getClassTypeId (void)
       static void initClass (void)
       static const SoNodekitCatalog * getClassNodekitCatalog (void)
       static SbBool isSearchingChildren (void)
       static void setSearchingChildren (const SbBool newval)

   Protected Member Functions
       virtual const SoFieldData * getFieldData (void) const
       virtual ~SoBaseKit ()
       virtual SoNode * addToCopyDict (void) const
       virtual void copyContents (const SoFieldContainer *fromfc, SbBool copyconnections)
       SoGroup * getContainerNode (const SbName &listname, SbBool makeifneeded=TRUE)
       virtual SoNode * getAnyPart (const SbName &partname, SbBool makeifneeded, SbBool leafcheck=FALSE, SbBool
           publiccheck=FALSE)
       virtual SoNodeKitPath * createPathToAnyPart (const SbName &partname, SbBool makeifneeded, SbBool
           leafcheck=FALSE, SbBool publiccheck=FALSE, const SoPath *pathtoextend=NULL)
       virtual SbBool setAnyPart (const SbName &partname, SoNode *from, SbBool anypart=TRUE)
       void createNodekitPartsList (void)
       void createFieldList (void)
       virtual void createDefaultParts (void)
       const SoNodekitParts * getNodekitPartsList (void) const
       const SbList< SoSFNode * > & getCatalogInstances (void) const
       void catalogError (void)
       virtual SbBool setUpConnections (SbBool onoff, SbBool doitalways=FALSE)
       virtual SbBool readInstance (SoInput *in, unsigned short flags)
       virtual void setDefaultOnNonWritingFields (void)
       void countMyFields (SoOutput *out)
       virtual SbBool setPart (const int partNum, SoNode *node)

   Static Protected Member Functions
       static const SoFieldData ** getFieldDataPtr (void)
       static const SoNodekitCatalog ** getClassNodekitCatalogPtr (void)

   Protected Attributes
       SoSFNode callbackList
       SoChildList * children
       SbBool connectionsSetUp

   Additional Inherited Members

Detailed Description

       The SoBaseKit class is the toplevel superclass for nodekits.

       Node kits are collections of nodes and other node kits (from here on node kits which are part of some
       other node kit, will only be referred to as nodes or parts, see catalogs and parts), organized in a way
       that is convenient for its use. A node kit inherits SoNode and can thus be inserted into a scenegraph as
       any other node.

       The organizing of the nodes and node kits of some node kit, is done through catalogs. A node kit's
       catalog describes the nodes that can be members of the node kit. These members are called parts. Thus a
       node kit has a catalog describing the parts that it offers to the user.

       Each part in the catalog has some values saying something about the part itself and about the role the
       part plays in the scenegraph. Those values are:

       Name
           The name of the part.

       Type
           The part's node type.

       Default Type
           If  the part's type is an abstract superclass, this value will hold the default subclass used by this
           part.

       Created by Default?
           Holds TRUE if the part should be instantiated when the node kit is instantiated, otherwise  the  part
           is kept empty until it is set by some of the means applicable.

       Parent Name
           The name of the part that is this part's parent.

       Right Sibling
           The  name  of  the  part  that  is  the  part  immediately  to the right of this part in the node kit
           scenegraph.

       Is it a List?
           Holds TRUE if the part is a list, otherwise it is FALSE. See SoNodeKitListPart for more info on  node
           kit lists.

       List Cointainer Type
           The type of group node used to hold the items if the part is a list.

       List Element Type
           The types of nodes that is allowed to be held by this part if the part is a list.

       Is It Public?
           Holds TRUE if the part should be publically available, otherwise it holds FALSE.

       Node  kits  use  lazy  instantiation  when it creates it's parts. This means that the nodes making up the
       parts of the nodekit only are created when they are needed. If the 'Created by Default?' holds TRUE, then
       the part is created when the node kit itself is instantiated. If not, parts are  created  when  they  are
       requested  through  SoBaseKit::getPart()  or  the  SO_GET_PART() macro, or created with SoBaseKit::set().
       Also, if a part is set with SoBaseKit::setPart() or the SO_SET_PART()  macro,  any  previously  uncreated
       parts above the set part in the hierarchy, is created automatically.

       The advantages of using node kits to represent a scenegraph are many.

       • Since  a  node  kit  collects  nodes  into a single unit, it becomes an extra abstraction layer for the
         application programmer. Such a layer can represent a model of a human being as one unit where  subunits
         as  arms,  legs,  textures,  etc  are  contained  within. Thus we can instantiate a model of a human by
         creating an instance of the node kit, instead of having to create a  possibly  large  amount  of  nodes
         needed for such a model.
       • A part of the node kit doesn't have one specific setup. A shape part can e.g. be swapped with any other
         shape, since they are of the same type. If the node kit of a human has a part called 'head' which is of
         type  SoShape, it might default to a sphere. But if the programmer thinks that a cube might fit better,
         one can set the 'head' part to a cube instead, or maybe a face set representing a complex  model  of  a
         head.
       • Node  kits can have as simple or as complex catalogs as needed. The nodes included in the node kit can,
         if needed, represent the whole range of Inventor features. One part can as easily  be  of  a  node  kit
         type,  making it possible to create hierarchies of node kits. Having a node kit of a human, it might be
         feasible to have sub node kits describing the different body parts.
       • Node kits are an efficient way of creating scenegraphs. If some part of it isn't needed at  the  moment
         of  node kit instantiation, they aren't created. Thus parts are only created when needed, either by the
         application or some other part.
       • The application code becomes smaller and easier to read, as the node kits provides simple routines  for
         creating and setting parts.
       • New  node kits can be created through subclassing to obtain simple setups of scenegraphs best fitted to
         the application.
       The usage of a node kit is straightforward. Below follows a code example showing some  simple  SoShapeKit
       usage.
       #include <Inventor/Qt/SoQt.h>
       #include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
       #include <Inventor/nodekits/SoShapeKit.h>
       #include <Inventor/nodes/SoSeparator.h>
       #include <Inventor/nodes/SoCube.h>

       int
       main(int argc, char ** argv)
       {
         QWidget * window = SoQt::init(argv[0]);

         SoQtExaminerViewer * viewer = new SoQtExaminerViewer(window);

         // Instantiating a shape kit, by default creating a simple sphere.
         SoShapeKit * shapekit = new SoShapeKit;
         // Swapping the sphere with a cube.
         shapekit->setPart("shape", new SoCube);
         // Setting the cube to be rendered in the color red. The shape kit
         // has a SoAppearanceKit as one of it's parts. The "material" part
         // used to set the color of the shape, really belongs the
         // appearance kit. If the SoShapeKit::set() is used, it will
         // check if some of its sub kits has a part with the name given,
         // and delegate the setting to the correct kit.
         shapekit->set("material", "diffuseColor 1 0 0");

         SoSeparator * newroot = new SoSeparator;
         newroot->ref();

         newroot->addChild(shapekit);

         viewer->setSceneGraph(newroot);

         viewer->show();
         SoQt::show(window);

         SoQt::mainLoop();
         delete viewer;

         newroot->unref();
         return 0;
       }
       The above code snippet will produce a viewer with a side view to the scene shown below:
       Notice that the code needed for creating this simple shape using a shape kit, amounts to this:
       SoShapeKit * shapekit = new SoShapeKit;

       shapekit->setPart("shape", new SoCube);
       shapekit->set("material", "diffuseColor 1 0 0");
       ..while doing it without shape kits amounts to this:
       SoSeparator * root = new SoSeparator;
       SoMaterial * material = new SoMaterial;
       material->diffuseColor.setValue(1,0,0);
       root->addChild(material);
       root->addChild(new SoCube);
       ..so even for this miniscule mock-up example, you save on code verbosity and complexity.
       For  extending  the  Coin  library  with  your  own classes, we strongly recommend that you make yourself
       acquainted with the excellent «The Inventor Toolmaker» book (ISBN  0-201-62493-1),  which  describes  the
       tasks  involved in detail. This book was written by the original SGI Inventor designers and explains many
       of the underlying design ideas, aswell as having lots of hands-on examples on  how  to  extend  the  Coin
       toolkit  in  ways  that  are  true  to  the  fundamental  design ideas. («The Inventor Toolmaker» is also
       available at SGI's online library, at  no  cost.  See  Download  The  Inventor  Toolmaker.)  Reading  the
       sourcecode of the built-in classes in Coin should also provide very helpful.
       Following is a complete example of a node kit extension. The node kit is a kit which automatically scales
       a  shape  so  it  will be the same size in screen-pixels, no matter which distance it is from the camera.
       This is useful for marker graphics. The shape defaults to a cube, but can be set by the programmer to any
       shape or scene sub-graph.
       The header file:
       // Copyright (C) Kongsberg Oil & Gas Technologies. All rights reserved.

       #ifndef COIN_SHAPESCALE_H
       #define COIN_SHAPESCALE_H
       #include <Inventor/nodekits/SoSubKit.h>
       #include <Inventor/nodekits/SoBaseKit.h>
       #include <Inventor/fields/SoSFFloat.h>

       class SbViewport;
       class SoState;
       class SbColor;
       class SbVec2s;

       class ShapeScale : public SoBaseKit {
         typedef SoBaseKit inherited;

         SO_KIT_HEADER(ShapeScale);

         SO_KIT_CATALOG_ENTRY_HEADER(topSeparator);
         SO_KIT_CATALOG_ENTRY_HEADER(scale);
         SO_KIT_CATALOG_ENTRY_HEADER(shape);

        public:
         ShapeScale(void);
         static void initClass(void);

         SoSFFloat active;
         SoSFFloat projectedSize;

        protected:
         virtual void GLRender(SoGLRenderAction * action);
         virtual ~ShapeScale();
       };

       #endif // ! SHAPESCALE_H
       The source code for the example:
       // Copyright (C) Kongsberg Oil & Gas Technologies. All rights reserved.

       //  The ShapeScale class is used for scaling a shape based on
       //  projected size.
       //
       //  This nodekit can be inserted in your scene graph to add for
       //  instance 3D markers that will be of a constant projected size.
       //
       //  The marker shape is stored in the "shape" part. Any kind of node
       //  can be used, even group nodes with several shapes, but the
       //  marker shape should be approximately of unit size, and with a
       //  center position in (0, 0, 0).

       //  SoSFFloat ShapeScale::active
       //  Turns the scaling on/off. Default value is TRUE.

       //  SoSFFloat ShapeScale::projectedSize
       //  The requested projected size of the shape. Default value is 5.0.

       #include "ShapeScale.h"

       #include <Inventor/actions/SoGLRenderAction.h>
       #include <Inventor/nodes/SoShape.h>
       #include <Inventor/nodes/SoScale.h>
       #include <Inventor/nodes/SoCube.h>
       #include <Inventor/nodes/SoSeparator.h>
       #include <Inventor/elements/SoViewVolumeElement.h>
       #include <Inventor/elements/SoViewportRegionElement.h>
       #include <Inventor/elements/SoModelMatrixElement.h>

       SO_KIT_SOURCE(ShapeScale);

       //  Constructor.
       ShapeScale::ShapeScale(void)
       {
         SO_KIT_CONSTRUCTOR(ShapeScale);

         SO_KIT_ADD_FIELD(active, (TRUE));
         SO_KIT_ADD_FIELD(projectedSize, (5.0f));

         SO_KIT_ADD_CATALOG_ENTRY(topSeparator, SoSeparator, FALSE, this, , FALSE);
         SO_KIT_ADD_CATALOG_ABSTRACT_ENTRY(shape, SoNode, SoCube, TRUE, topSeparator, , TRUE);
         SO_KIT_ADD_CATALOG_ENTRY(scale, SoScale, FALSE, topSeparator, shape, FALSE);

         SO_KIT_INIT_INSTANCE();
       }

       // Destructor.
       ShapeScale::~ShapeScale()
       {
       }

       // Initializes this class. Call before using it.

       void
       ShapeScale::initClass(void)
       {
         SO_KIT_INIT_CLASS(ShapeScale, SoBaseKit, "BaseKit");
       }

       static void
       update_scale(SoScale * scale, const SbVec3f & v)
       {
         // only write to field when scaling has changed.
         if (scale->scaleFactor.getValue() != v) {
           scale->scaleFactor = v;
         }
       }

       // Overridden to (re)initialize scaling before rendering marker.
       void
       ShapeScale::GLRender(SoGLRenderAction * action)
       {
         SoState * state = action->getState();

         SoScale * scale = (SoScale*) this->getAnyPart(SbName("scale"), TRUE);
         if (!this->active.getValue()) {
           update_scale(scale, SbVec3f(1.0f, 1.0f, 1.0f));
         }
         else {
           const SbViewportRegion & vp = SoViewportRegionElement::get(state);
           const SbViewVolume & vv = SoViewVolumeElement::get(state);
           SbVec3f center(0.0f, 0.0f, 0.0f);
           float nsize = this->projectedSize.getValue() / float(vp.getViewportSizePixels()[1]);
           SoModelMatrixElement::get(state).multVecMatrix(center, center); // transform to WCS
           float scalefactor = vv.getWorldToScreenScale(center, nsize);
           update_scale(scale, SbVec3f(scalefactor, scalefactor, scalefactor));
         }
         inherited::GLRender(action);
       }
       And a complete example showing how one can use this node kit:
       // Copyright (C) Kongsberg Oil & Gas Technologies. All rights reserved.

       #include <Inventor/Qt/SoQt.h>
       #include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
       #include <Inventor/SoInput.h>
       #include <Inventor/SoOutput.h>
       #include <Inventor/SoPickedPoint.h>
       #include <Inventor/actions/SoRayPickAction.h>
       #include <Inventor/events/SoMouseButtonEvent.h>
       #include <Inventor/nodes/SoBaseColor.h>
       #include <Inventor/nodes/SoCube.h>
       #include <Inventor/nodes/SoEventCallback.h>
       #include <Inventor/nodes/SoSeparator.h>
       #include <Inventor/nodes/SoSwitch.h>
       #include <Inventor/nodes/SoTranslation.h>
       #include <assert.h>
       #include <stdlib.h>
       #include <time.h>

       #include "ShapeScale.h"

       // Returns random value between 0.0f and 1.0f.
       static float
       normalized_rand(void)
       {
         return float(rand())/float(RAND_MAX);
       }

       static SoSeparator *
       construct_new_marker(const SbVec3f & v)
       {
         SoSeparator * markerroot = new SoSeparator;

         SoTranslation * t = new SoTranslation;
         t->translation = v;
         markerroot->addChild(t);

         ShapeScale * kit = new ShapeScale;
         kit->active = TRUE;
         kit->projectedSize = 5.0f;

         // create the marker
         SoSeparator * markersep = new SoSeparator;

         SoBaseColor * mat = new SoBaseColor;
         mat->rgb.setValue(normalized_rand(), normalized_rand(), normalized_rand());
         markersep->addChild(mat);

         // marker shape should be unit size, with center in (0.0f, 0.0f, 0.0f)
         SoCube * cube = new SoCube;
         cube->width = 1.0f;
         cube->height = 1.0f;
         cube->depth = 1.0f;

         markersep->addChild(cube);
         kit->setPart("shape", markersep);
         markerroot->addChild(kit);

         return markerroot;
       }

       static void
       event_cb(void * ud, SoEventCallback * n)
       {
         const SoMouseButtonEvent * mbe = (SoMouseButtonEvent *)n->getEvent();

         if (mbe->getButton() == SoMouseButtonEvent::BUTTON1 &&
           mbe->getState() == SoButtonEvent::DOWN) {

           SoQtExaminerViewer * viewer = (SoQtExaminerViewer *)ud;

           SoRayPickAction rp(viewer->getViewportRegion());
           rp.setPoint(mbe->getPosition());
           rp.apply(viewer->getSceneManager()->getSceneGraph());

           SoPickedPoint * point = rp.getPickedPoint();
           if (point == NULL) {
             (void)fprintf(stderr, "0* miss! **0);
             return;
           }

           n->setHandled();

           const SoPath * p = rp.getCurPath();

           for (int i = 0; i < p->getLength(); i++) {
             SoNode * n = p->getNodeFromTail(i);
             if (n->isOfType(SoGroup::getClassTypeId())) {
               SoGroup * g = (SoGroup *)n;
               g->addChild(construct_new_marker(point->getPoint()));
               break;
             }
           }
         }
       }

       void
       show_instructions(void)
       {
         (void)fprintf(stdout,
           "0his example program demonstrates the use of the ShapeScale nodekit.0
           "0uick instructions:0
           "  * place the marker by clicking on a shape with the left mouse button0
           "  * hit ESC to toggle back and forth to view mode0
           "  * zoom back and forth to see how the markers stay the same size0);
       }

       int
       main(int argc, char ** argv)
       {
         if (argc != 2) {
           (void) fprintf(stderr,"10pecify an Inventor file as argument.0);
           return -1;
         }

         QWidget * window = SoQt::init(argv[0]);
         ShapeScale::initClass(); // init our extension nodekit

         SoQtExaminerViewer * ex1 = new SoQtExaminerViewer(window);

         SoInput input;
         SbBool ok = input.openFile(argv[1]);
         if (!ok) {
           (void) fprintf(stderr, "Unable to open file: %s0, argv[1]);
           return -1;
         }

         SoSeparator * root = SoDB::readAll(&input);

         if (root == NULL) {
           (void) fprintf(stderr, "Unable to read file: %s0, argv[1]);
           return -1;
         }

         show_instructions();

         SoSeparator * newroot = new SoSeparator;
         newroot->ref();

         newroot->addChild(root);

         // create event callback and marker nodes
         SoSeparator * sep = new SoSeparator;
         newroot->addChild(sep);

         SoEventCallback * ecb = new SoEventCallback;
         ecb->addEventCallback(SoMouseButtonEvent::getClassTypeId(), event_cb, ex1);
         sep->addChild(ecb);

         ex1->setSceneGraph(newroot);
         ex1->setTransparencyType(SoGLRenderAction::SORTED_OBJECT_BLEND);
         ex1->setViewing(FALSE);

         ex1->show();
         SoQt::show(window);

         SoQt::mainLoop();
         delete ex1;

         newroot->unref();
         return 0;
       }

Constructor & Destructor Documentation

   SoBaseKit::SoBaseKit (void)
       Constructor.
       This is the top-level superclass of all node kit and dragger classes. The catalog structure of  SoBaseKit
       is as follows:
       CLASS SoBaseKit
       -->"this"
       -->   "callbackList"
       (See SoBaseKit::printDiagram() for information about the output formatting.)
       Detailed information on catalog parts:
       CLASS SoBaseKit
       PVT   "this",  SoBaseKit  ---
             "callbackList",  SoNodeKitListPart [ SoCallback, SoEventCallback ]
       (See SoBaseKit::printTable() for information about the output formatting.)
       As  can  be  seen from the catalog, all node kits can have a callback node in front of all other nodes in
       the kit. This is handy for catching events that should go to application processing.
   SoBaseKit::~SoBaseKit () [protected],  [virtual]
       Destructor.

Member Function Documentation

   SoType SoBaseKit::getTypeId (void) const [virtual]
       Returns the type identification of an object derived from a class inheriting SoBase.  This  is  used  for
       run-time type checking and 'downward' casting. Usage example:
       void foo(SoNode * node)
       {
         if (node->getTypeId() == SoFile::getClassTypeId()) {
           SoFile * filenode = (SoFile *)node;  // safe downward cast, knows the type
         }
       }
       For  application programmers wanting to extend the library with new nodes, engines, nodekits, draggers or
       others: this method needs to be overridden in all subclasses. This is typically done as part  of  setting
       up  the  full  type  system for extension classes, which is usually accomplished by using the pre-defined
       macros   available   through   for   instance    Inventor/nodes/SoSubNode.h    (SO_NODE_INIT_CLASS    and
       SO_NODE_CONSTRUCTOR for node classes), Inventor/engines/SoSubEngine.h (for engine classes) and so on.
       For more information on writing Coin extensions, see the class documentation of the toplevel superclasses
       for the various class groups.
       Implements SoBase.
       Reimplemented in SoDragger, SoTrackballDragger, SoInteractionKit, SoSTLFileKit, SoRotateSphericalDragger,
       SoSpotLightDragger,  SoTransformerDragger, SoHandleBoxDragger, SoScale2UniformDragger, SoTabPlaneDragger,
       SoTranslate1Dragger,         SoTranslate2Dragger,         SoForeignFileKit,          SoCenterballDragger,
       SoDirectionalLightDragger,      SoJackDragger,      SoRotateCylindricalDragger,      SoRotateDiscDragger,
       SoScale1Dragger,  SoScale2Dragger,  SoScaleUniformDragger,   SoTransformBoxDragger,   SoDragPointDragger,
       SoPointLightDragger,   SoTabBoxDragger,   SoSeparatorKit,   SoAppearanceKit,   SoCameraKit,   SoLightKit,
       SoSceneKit, SoShapeKit, and SoWrapperKit.
   const SoFieldData * SoBaseKit::getFieldData (void) const [protected],  [virtual]
       Returns a pointer to the class-wide field data storage  object  for  this  instance.  If  no  fields  are
       present, returns NULL.
       Reimplemented from SoFieldContainer.
       Reimplemented in SoDragger, SoTrackballDragger, SoInteractionKit, SoSTLFileKit, SoRotateSphericalDragger,
       SoSpotLightDragger,  SoTransformerDragger, SoHandleBoxDragger, SoScale2UniformDragger, SoTabPlaneDragger,
       SoTranslate1Dragger,         SoTranslate2Dragger,         SoForeignFileKit,          SoCenterballDragger,
       SoDirectionalLightDragger,      SoJackDragger,      SoRotateCylindricalDragger,      SoRotateDiscDragger,
       SoScale1Dragger,  SoScale2Dragger,  SoScaleUniformDragger,   SoTransformBoxDragger,   SoDragPointDragger,
       SoPointLightDragger,   SoTabBoxDragger,   SoSeparatorKit,   SoAppearanceKit,   SoCameraKit,   SoLightKit,
       SoSceneKit, SoShapeKit, and SoWrapperKit.
   const SoNodekitCatalog * SoBaseKit::getClassNodekitCatalog (void) [static]
       Returns the nodekit catalog which defines the layout of this class' kit.
   const SoNodekitCatalog * SoBaseKit::getNodekitCatalog (void) const [virtual]
       Returns the nodekit catalog which defines the layout of this class' kit.
       Reimplemented in SoDragger, SoTrackballDragger, SoInteractionKit, SoSTLFileKit, SoRotateSphericalDragger,
       SoSpotLightDragger, SoTransformerDragger, SoHandleBoxDragger, SoScale2UniformDragger,  SoTabPlaneDragger,
       SoTranslate1Dragger,          SoTranslate2Dragger,         SoForeignFileKit,         SoCenterballDragger,
       SoDirectionalLightDragger,      SoJackDragger,      SoRotateCylindricalDragger,      SoRotateDiscDragger,
       SoScale1Dragger,   SoScale2Dragger,   SoScaleUniformDragger,  SoTransformBoxDragger,  SoDragPointDragger,
       SoPointLightDragger,   SoTabBoxDragger,   SoSeparatorKit,   SoAppearanceKit,   SoCameraKit,   SoLightKit,
       SoSceneKit, SoShapeKit, and SoWrapperKit.
   SoNode * SoBaseKit::getPart (const SbName &partname, SbBoolmakeifneeded) [virtual]
       Returns a pointer to the node part with partname.
       This method calls SoBaseKit::getAnyPart() with leafcheck and publiccheck both set to TRUE.
       See the documentation of SoBaseKit::getAnyPart() for information on how to use partname and makeifneeded,
       and what you can expect to get returned from this method.
   SbString SoBaseKit::getPartString (const SoBase *part)
       Returns the full path name to a catalog part, given the part's current item pointer.
   SoNodeKitPath  *  SoBaseKit::createPathToPart  (const  SbName  &partname,  SbBoolmakeifneeded,  const  SoPath
       *pathtoextend = NULL) [virtual]
       Calls SoBaseKit::createPathToAnyPart() with leafcheck TRUE, and publiccheck TRUE (and other arguments  as
       given to this function).
       See SoBaseKit::createPathToAnyPart() for documentation.
   SbBool SoBaseKit::setPart (const SbName &partname, SoNode *from) [virtual]
       Sets the catalog part given by partname to the from node pointer.
       Reimplemented in SoInteractionKit.
   SbBool SoBaseKit::set (const char *namevaluepairliststring)
       Sets nodekit part field values. The input argument string is of the format:
       partname {
         fieldname fieldval
         fieldname fieldval
         [...]
       }
       partname {
         fieldname fieldval
         fieldname fieldval
         [...]
       }
       [...]
       (Whitespace layout is ignored, as always for Inventor format input strings.)
       Here's an example, changing several values of the camera part of an SoCameraKit instance:
       kit->set("camera { heightAngle 0.3927  nearDistance 1.1  farDistance 999.9 }");
   SbBool SoBaseKit::set (const char *partnamestring, const char *parameterstring)
       This  just overloads the other SoBaseKit::set() method, and provides a way to set a part value by using a
       separate input argument for the name of the part and the name of the field (i.e. parameter) settings.
   void SoBaseKit::doAction (SoAction *action) [virtual]
       This function performs the typical operation of a node for any action.
       Reimplemented from SoNode.
   void SoBaseKit::callback (SoCallbackAction *action) [virtual]
       Action method for SoCallbackAction.
       Simply updates the state according to how the node behaves for the  render  action,  so  the  application
       programmer can use the SoCallbackAction for extracting information about the scene graph.
       Reimplemented from SoNode.
       Reimplemented in SoDragger.
   void SoBaseKit::GLRender (SoGLRenderAction *action) [virtual]
       Action method for the SoGLRenderAction.
       This is called during rendering traversals. Nodes influencing the rendering state in any way or who wants
       to throw geometry primitives at OpenGL overrides this method.
       Reimplemented from SoNode.
       Reimplemented in SoTabPlaneDragger, and SoDragger.
   void SoBaseKit::getBoundingBox (SoGetBoundingBoxAction *action) [virtual]
       Action method for the SoGetBoundingBoxAction.
       Calculates  bounding  box  and  center  coordinates  for  node  and  modifies the values of the action to
       encompass the bounding box for this node and to shift the center point for the scene more towards the one
       for this node.
       Nodes influencing how geometry nodes calculates their bounding box also overrides this method  to  change
       the relevant state variables.
       Reimplemented from SoNode.
       Reimplemented in SoDragger, and SoCenterballDragger.
   void SoBaseKit::getMatrix (SoGetMatrixAction *action) [virtual]
       Action method for SoGetMatrixAction.
       Updates action by accumulating with the transformation matrix of this node (if any).
       Reimplemented from SoNode.
       Reimplemented in SoCenterballDragger, and SoDragger.
   void SoBaseKit::handleEvent (SoHandleEventAction *action) [virtual]
       Action method for SoHandleEventAction.
       Inspects the event data from action, and processes it if it is something which this node should react to.
       Nodes influencing relevant state variables for how event handling is done also overrides this method.
       Reimplemented from SoNode.
       Reimplemented in SoDragger.
   void SoBaseKit::rayPick (SoRayPickAction *action) [virtual]
       Action method for SoRayPickAction.
       Checks the ray specification of the action and tests for intersection with the data of the node.
       Nodes influencing relevant state variables for how picking is done also overrides this method.
       Reimplemented from SoNode.
       Reimplemented in SoDragger.
   void SoBaseKit::search (SoSearchAction *action) [virtual]
       Action method for SoSearchAction.
       Compares  the  search  criteria  from  the  action  to  see if this node is a match. Searching is done by
       matching up all criteria set up in the SoSearchAction -- if any of the requested criteria is a miss,  the
       search is not deemed successful for the node.
       See Also:
           SoSearchAction
       Reimplemented from SoNode.
       Reimplemented in SoDragger.
   void SoBaseKit::write (SoWriteAction *action) [virtual]
       Action method for SoWriteAction.
       Writes out a node object, and any connected nodes, engines etc, if necessary.
       Reimplemented from SoNode.
       Reimplemented in SoDragger.
   void SoBaseKit::getPrimitiveCount (SoGetPrimitiveCountAction *action) [virtual]
       Action method for the SoGetPrimitiveCountAction.
       Calculates  the  number of triangle, line segment and point primitives for the node and adds these to the
       counters of the action.
       Nodes influencing how geometry nodes calculates their primitive  count  also  overrides  this  method  to
       change the relevant state variables.
       Reimplemented from SoNode.
       Reimplemented in SoDragger.
   SoChildList * SoBaseKit::getChildren (void) const [virtual]
       Returns list of children for this node.
       Reimplemented from SoNode.
   void SoBaseKit::printDiagram (void)
       Print  out  the  full nodekit catalog structure. Just invokes SoBaseKit::printSubDiagram() on the catalog
       root. Useful for debugging.
       Example output:
       CLASS SoWrapperKit
       -->"this"
             "callbackList"
             "topSeparator"
                "pickStyle"
                "appearance"
                "units"
                "transform"
                "texture2Transform"
                "childList"
       -->      "localTransform"
       -->      "contents"
       The arrows denote new entries in the catalog for the particular class versus it's superclass. (Apart from
       the root entry, of course.)
       For a more detailed catalog dump, see SoBaseKit::printTable().
   void SoBaseKit::printSubDiagram (const SbName &rootname, intlevel)
       Print out the nodekit catalog structure from rootname and downwards in the catalog tree, with indentation
       starting at level.
       See Also:
           printDiagram()
   void SoBaseKit::printTable (void)
       Write the complete nodekit catalog in table form.
       Example output:
       CLASS SoWrapperKit
       PVT   "this",  SoWrapperKit  ---
             "callbackList",  SoNodeKitListPart [ SoCallback, SoEventCallback ]
       PVT   "topSeparator",  SoSeparator  ---
             "pickStyle",  SoPickStyle  ---
             "appearance",  SoAppearanceKit  ---
             "units",  SoUnits  ---
             "transform",  SoTransform  ---
             "texture2Transform",  SoTexture2Transform  ---
             "childList",  SoNodeKitListPart [ SoShapeKit, SoSeparatorKit ]
             "localTransform",  SoTransform  ---
             "contents",  SoSeparator  ---
       PVT denotes that it's a private entry in the catalog, then follows the part name and the  part  type.  If
       the part is a list, the allowed node types for the list is given in square brackets, and if not there's a
       triple  hyphen. If the part type is abstract, the default part type will be listed last (not shown in the
       example output above).
   void SoBaseKit::addWriteReference (SoOutput *out, SbBoolisfromfield = FALSE) [virtual]
       This method is used during the first write pass of a write action to count the number  of  references  to
       this object in the scene graph.
       Reimplemented from SoFieldContainer.
   SbBool SoBaseKit::forceChildDrivenWriteRefs (SoOutput *out)
       Returns  TRUE  if kit should write. This happens if shouldWrite() returns TRUE, or if any of the children
       (recursively) should write.
   SbBool SoBaseKit::isSearchingChildren (void) [static]
       Returns the value of the flag indicating whether or not the kit parts are searched during  SoSearchAction
       traversal.
       See Also:
           SoBaseKit::setSearchingChildren()
   void SoBaseKit::setSearchingChildren (const SbBoolnewval) [static]
       Set whether or not the kit parts should be searched during SoSearchAction traversal. The default value is
       FALSE.
   const SoNodekitCatalog ** SoBaseKit::getClassNodekitCatalogPtr (void) [static],  [protected]
       Returns the pointer to the pointer of the nodekit catalog for this class.
   SoNode * SoBaseKit::addToCopyDict (void) const [protected],  [virtual]
       Add a copy of this node and (recursively) all children to the copy dictionary of SoFieldContainer if this
       has not already been done.
       Used internally during copy operations.
       Reimplemented from SoNode.
   void SoBaseKit::copyContents (const SoFieldContainer *from, SbBoolcopyconnections) [protected],  [virtual]
       Makes  a  deep  copy  of  all  data  of from into this instance, except external scenegraph references if
       copyconnections is FALSE.
       This is the method that should be overridden by extension node / engine / dragger /  whatever  subclasses
       which needs to account for internal data that are not handled automatically.
       For  copying  nodes  from application code, you should not invoke this function directly, but rather call
       the SoNode::copy() function:
       SoNode * mynewnode = templatenode->copy();
       The same also goes for engines.
       Make sure that when you override the copyContents() method in your extension class that you also make  it
       call  upwards  to  it's parent superclass in the inheritance hierarchy, as copyContents() in for instance
       SoNode and SoFieldContainer does important work. It should go something like this:
       void
       MyCoinExtensionNode::copyContents(const SoFieldContainer * from,
                                         SbBool copyconnections)
       {
         // let parent superclasses do their thing (copy fields, copy
         // instance name, etc etc)
         SoNode::copyContents(from, copyconnections);

         // [..then copy internal data..]
       }
       Reimplemented from SoNode.
       Reimplemented in SoInteractionKit, SoRotateSphericalDragger, and SoRotateCylindricalDragger.
   SoGroup * SoBaseKit::getContainerNode (const SbName &listname, SbBoolmakeifneeded = TRUE) [protected]
       Returns a pointer to the group node above an SoNodeKitListPart in the catalog given by listname.
       If the list part (and its container) was not yet constructed, they will be so  if  makeifneeded  is  TRUE
       (otherwise, NULL will be returned).
   SoNode  *  SoBaseKit::getAnyPart  (const  SbName  &partname,  SbBoolmakeifneeded,  SbBoolleafcheck  =  FALSE,
       SbBoolpubliccheck = FALSE) [protected],  [virtual]
       Returns catalog part of the given partname.
       If the partname part is not in the nodekit's catalog, return NULL.
       If the part is specified in the catalog, but has not yet been made, the function  will  either  construct
       the part (if makeifneeded is TRUE) or just return NULL (if makeifneeded is FALSE).
       If  leafcheck  is  TRUE,  a  pointer  to  the  part  will  only be returned if it's a leaf in the catalog
       (otherwise NULL is returned).
       If publiccheck is TRUE, a pointer to the part will only  be  returned  if  it's  a  public  catalog  part
       (otherwise NULL is returned).
       The  partname  input  argument  should be given as a 'path' of catalog part names down to the wanted leaf
       part. The syntax for specifiying partname 'paths' is as follows (given in Backus-Naur Form (BNF)):
       BNF:

       partname = singlename | compoundname
       compoundname = singlename | compoundname.singlename
       singlename = singlepartname | singlelistelementname
       singlelistelementname = singlelistname[idx]

       singlepartname is name of a part ("ordinary", nodekit or list)
       singlelistname is name of a part which is a list
       idx is an integer value
   SoNodeKitPath * SoBaseKit::createPathToAnyPart (const SbName &partname, SbBoolmakeifneeded, SbBoolleafcheck =
       FALSE, SbBoolpubliccheck = FALSE, const SoPath *pathtoextend = NULL) [protected],  [virtual]
       Return path with nested SoNodeKit instances down in the catalog hierarchy given by partname.
       If the trailing part has not been made and makeifneeded is TRUE, make an instance of the  part  type  and
       insert into the catalog, as done in setAnyPart().
       If  leafcheck  is  TRUE,  ignore  non-leaf  catalog  node entries. If publiccheck is TRUE, ignore private
       catalog entries.
       pathtoextend is a path through the nodekit instance catalog  hierarchy,  where  we  should  pick  up  and
       continue  to create the path from where pathtoextend terminates. If pathtoextend is NULL, we simply start
       at the 'this' toplevel node.
       Returns NULL on failure, for any of the possible reasons  described  above  (part  ends  in  non-leaf  or
       private catalog entry, part is not syntactically valid or refers to non-existing catalog entries).
   SbBool  SoBaseKit::setAnyPart  (const  SbName  &partname,  SoNode  *from,  SbBoolanypart = TRUE) [protected],
       [virtual]
       This API member is considered internal to the library, as it is not likely  to  be  of  interest  to  the
       application programmer.
   void SoBaseKit::createNodekitPartsList (void) [protected]
       Not part of the Coin API.
       It  is  supposed  to  create  the  SoNodekitParts  class  instance.  Since this class can only be used by
       SoBaseKit (all members are private, with SoBaseKit as friend), we decided to not support this class,  and
       solve the problem of recording which parts are created in an alternative way.
   void SoBaseKit::createFieldList (void) [protected]
       Replaces the createNodekitPartsList() method.
       Sets up the list of SoSFNode fields with node pointers to the instances in our catalog.
   void SoBaseKit::createDefaultParts (void) [protected],  [virtual]
       This  API  member  is  considered  internal  to the library, as it is not likely to be of interest to the
       application programmer.
   const SoNodekitParts * SoBaseKit::getNodekitPartsList (void) const [protected]
       In Open Inventor, this method returns a pointer to a private class. It will always return NULL in Coin.
       See Also:
           createNodekitPartsList()
   const SbList< SoSFNode * > & SoBaseKit::getCatalogInstances (void) const [protected]
       This API member is considered internal to the library, as it is not likely  to  be  of  interest  to  the
       application programmer.
   void SoBaseKit::catalogError (void) [protected]
       Obsoleted from the API in Coin.
   SbBool SoBaseKit::setUpConnections (SbBoolonoff, SbBooldoitalways = FALSE) [protected],  [virtual]
       Sets up all internal connections for instances of this class.
       (This method will usually not be of interest to the application programmer, unless you want to extend the
       library with new custom nodekits or dragger classes. If so, see the SoBaseKit class documentation.)
       Reimplemented   in   SoTransformerDragger,   SoHandleBoxDragger,   SoInteractionKit,  SoDragPointDragger,
       SoTransformBoxDragger,  SoTrackballDragger,  SoCenterballDragger,   SoTabPlaneDragger,   SoTabBoxDragger,
       SoSpotLightDragger,         SoSeparatorKit,         SoTranslate2Dragger,        SoRotateSphericalDragger,
       SoRotateCylindricalDragger,      SoTranslate1Dragger,      SoDirectionalLightDragger,      SoJackDragger,
       SoScale2UniformDragger, SoRotateDiscDragger, SoScale1Dragger, SoScale2Dragger, SoScaleUniformDragger, and
       SoPointLightDragger.
   SbBool SoBaseKit::readInstance (SoInput *in, unsigned shortflags) [protected],  [virtual]
       This method is mainly intended for internal use during file import operations.
       It reads a definition of an instance from the input stream in. The input stream state points to the start
       of a serialized / persistant representation of an instance of this class type.
       TRUE  or FALSE is returned, depending on if the instantiation and configuration of the new object of this
       class type went ok or not. The import process should be robust and  handle  corrupted  input  streams  by
       returning FALSE.
       flags is used internally during binary import when reading user extension nodes, group nodes or engines.
       Reimplemented from SoNode.
       Reimplemented in SoInteractionKit.
   void SoBaseKit::setDefaultOnNonWritingFields (void) [protected],  [virtual]
       (Be  aware that this method is unlikely to be of interest to the application programmer who does not want
       to extend the library with new custom nodekits or draggers. If you indeed are writing extensions, see the
       information in the SoBaseKit class documentation.)
       This is a virtual method, and the code in it should call SoField::setDefault() with argument TRUE on part
       fields that should not be written upon scenegraph export operations.
       This is typically done when:
       1.  field value is NULL and part is NULL by default
       2.  it is a leaf SoGroup or SoSeparator node with no children
       3.  it is a leaf listpart with no children and an SoGroup or SoSeparator container
       4.  it is a non-leaf part and it's of SoGroup type and all fields are at their default values
       Subclasses should usually override this to do  additional  settings  for  new  member  fields.  From  the
       subclass, do remember to call 'upwards' to your superclass' setDefaultOnNonWritingFields() method.
       Reimplemented     in     SoTransformerDragger,     SoDragger,    SoHandleBoxDragger,    SoInteractionKit,
       SoDragPointDragger, SoTransformBoxDragger,  SoTrackballDragger,  SoCenterballDragger,  SoTabPlaneDragger,
       SoTabBoxDragger,     SoSpotLightDragger,     SoSeparatorKit,    SoDirectionalLightDragger,    SoShapeKit,
       SoJackDragger, and SoPointLightDragger.
   void SoBaseKit::countMyFields (SoOutput *out) [protected]
       Reference count the write connections to nodes in the catalog.
   SbBool SoBaseKit::setPart (const intpartnum, SoNode *node) [protected],  [virtual]
       Sets parts, updates nodekit scene graph, and makes sure graph is valid with respect to right siblings and
       parent. This method is virtual to enable subclasses to detect when a part changes value.
       This method is not part of the original SGI Open Inventor API, but is an extension specific to Coin.
       Reimplemented in SoInteractionKit.

Member Data Documentation

   SoChildList * SoBaseKit::children [protected]
       This API member is considered internal to the library, as it is not likely  to  be  of  interest  to  the
       application programmer.
   SbBool SoBaseKit::connectionsSetUp [protected]
       This  API  member  is  considered  internal  to the library, as it is not likely to be of interest to the
       application programmer.

Author

       Generated automatically by Doxygen for Coin from the source code.

Version 4.0.0a                                   Wed Feb 26 2014                                    SoBaseKit(3)