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

SoCallbackAction.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_SOCALLBACKACTION_H
00021 #define COIN_SOCALLBACKACTION_H
00022 
00023 #include <Inventor/actions/SoAction.h>
00024 #include <Inventor/actions/SoSubAction.h>
00025 #include <Inventor/elements/SoDecimationTypeElement.h>
00026 #include <Inventor/lists/SbList.h>
00027 #include <Inventor/nodes/SoComplexity.h>
00028 #include <Inventor/nodes/SoDrawStyle.h>
00029 #include <Inventor/nodes/SoLightModel.h>
00030 #include <Inventor/nodes/SoMaterialBinding.h>
00031 #include <Inventor/nodes/SoNormalBinding.h>
00032 #include <Inventor/nodes/SoPickStyle.h>
00033 #include <Inventor/nodes/SoShapeHints.h>
00034 #include <Inventor/nodes/SoTexture2.h>
00035 #include <Inventor/nodes/SoTextureCoordinateBinding.h>
00036 #include <Inventor/nodes/SoUnits.h>
00037 
00038 class SbColor;
00039 class SbMatrix;
00040 class SbVec2f;
00041 class SbVec2s;
00042 class SbVec3f;
00043 class SbVec4f;
00044 class SbViewVolume;
00045 class SoCallbackAction;
00046 class SoCallbackData;
00047 class SoPrimitiveVertex;
00048 class SoShape;
00049 class SbViewportRegion;
00050 
00051 typedef void SoTriangleCB(void * userdata, SoCallbackAction * action,
00052                           const SoPrimitiveVertex * v1,
00053                           const SoPrimitiveVertex * v2,
00054                           const SoPrimitiveVertex * v3);
00055 
00056 typedef void SoLineSegmentCB(void * userdata, SoCallbackAction * action,
00057                              const SoPrimitiveVertex * v1,
00058                              const SoPrimitiveVertex * v2);
00059 
00060 typedef void SoPointCB(void * userdata, SoCallbackAction * action,
00061                        const SoPrimitiveVertex * v);
00062 
00063 
00064 class COIN_DLL_API SoCallbackAction : public SoAction {
00065   typedef SoAction inherited;
00066 
00067   SO_ACTION_HEADER(SoCallbackAction);
00068 
00069 public:
00070   SoCallbackAction(void);
00071   SoCallbackAction(const SbViewportRegion & vp);
00072 
00073   virtual ~SoCallbackAction();
00074 
00075   static void initClass(void);
00076 
00077   void setViewportRegion(const SbViewportRegion & vp);
00078 
00079   enum Response { CONTINUE,  ABORT, PRUNE };
00080 
00081   typedef Response SoCallbackActionCB(void * userdata,
00082                                       SoCallbackAction * action,
00083                                       const SoNode * node);
00084 
00085   void addPreCallback(const SoType type, SoCallbackActionCB * cb, void * userdata);
00086   void addPostCallback(const SoType type, SoCallbackActionCB * cb, void * userdata);
00087 
00088   void addPreTailCallback(SoCallbackActionCB * cb, void * userdata);
00089   void addPostTailCallback(SoCallbackActionCB * cb, void * userdata);
00090 
00091   void addTriangleCallback(const SoType type, SoTriangleCB * cb, void * userdata);
00092   void addLineSegmentCallback(const SoType type, SoLineSegmentCB * cb, void * userdata);
00093   void addPointCallback(const SoType type, SoPointCB * cb, void * userdata);
00094 
00095   SoDecimationTypeElement::Type getDecimationType(void) const;
00096   float getDecimationPercentage(void) const;
00097   float getComplexity(void) const;
00098   SoComplexity::Type getComplexityType(void) const;
00099   int32_t getNumCoordinates(void) const;
00100   const SbVec3f & getCoordinate3(const int index) const;
00101   const SbVec4f & getCoordinate4(const int index) const;
00102   SoDrawStyle::Style getDrawStyle(void) const;
00103   unsigned short getLinePattern(void) const;
00104   float getLineWidth(void) const;
00105   float getPointSize(void) const;
00106   const SbName & getFontName(void) const;
00107   float getFontSize(void) const;
00108   SoLightModel::Model getLightModel(void) const;
00109   const SbVec3f & getLightAttenuation(void) const;
00110   void getMaterial(SbColor & ambient, SbColor & diffuse,
00111                    SbColor & specular, SbColor & emission,
00112                    float & shininess, float & transparency,
00113                    const int index = 0) const;
00114   SoMaterialBinding::Binding getMaterialBinding(void) const;
00115   uint32_t getNumNormals(void) const;
00116   const SbVec3f & getNormal(const int index) const;
00117   SoNormalBinding::Binding getNormalBinding(void) const;
00118   int32_t getNumProfileCoordinates(void) const;
00119   const SbVec2f & getProfileCoordinate2(const int index) const;
00120   const SbVec3f & getProfileCoordinate3(const int index) const;
00121   const SoNodeList & getProfile(void) const;
00122   SoShapeHints::VertexOrdering getVertexOrdering(void) const;
00123   SoShapeHints::ShapeType getShapeType(void) const;
00124   SoShapeHints::FaceType getFaceType(void) const;
00125   float getCreaseAngle(void) const;
00126   int32_t getNumTextureCoordinates(void) const;
00127   const SbVec2f & getTextureCoordinate2(const int index) const;
00128   const SbVec4f & getTextureCoordinate4(const int index) const;
00129   SoTextureCoordinateBinding::Binding getTextureCoordinateBinding(void) const;
00130   const SbColor & getTextureBlendColor(void) const;
00131   const unsigned char * getTextureImage(SbVec2s & size, int & numcomps) const;
00132   const SbMatrix & getTextureMatrix(void) const;
00133   SoTexture2::Model getTextureModel(void) const;
00134   SoTexture2::Wrap getTextureWrapS(void) const;
00135   SoTexture2::Wrap getTextureWrapT(void) const;
00136   const SbMatrix & getModelMatrix(void) const;
00137   SoUnits::Units getUnits(void) const;
00138   float getFocalDistance(void) const;
00139   const SbMatrix & getProjectionMatrix(void) const;
00140   const SbMatrix & getViewingMatrix(void) const;
00141   const SbViewVolume & getViewVolume(void) const;
00142   const SbViewportRegion & getViewportRegion(void) const;
00143   SoPickStyle::Style getPickStyle(void) const;
00144   int32_t getSwitch(void) const;
00145 
00146   Response getCurrentResponse(void) const;
00147   void invokePreCallbacks(const SoNode * const node);
00148   void invokePostCallbacks(const SoNode * const node);
00149   void invokeTriangleCallbacks(const SoShape * const shape,
00150                                const SoPrimitiveVertex * const v1,
00151                                const SoPrimitiveVertex * const v2,
00152                                const SoPrimitiveVertex * const v3);
00153   void invokeLineSegmentCallbacks(const SoShape * const shape,
00154                                   const SoPrimitiveVertex * const v1,
00155                                   const SoPrimitiveVertex * const v2);
00156   void invokePointCallbacks(const SoShape * const shape,
00157                             const SoPrimitiveVertex * const v);
00158 
00159   SbBool shouldGeneratePrimitives(const SoShape * shape) const;
00160 
00161   virtual SoNode * getCurPathTail(void);
00162   void setCurrentNode(SoNode * const node);
00163 
00164 protected:
00165   virtual void beginTraversal(SoNode * node);
00166 
00167 private:
00168   void commonConstructor(void);
00169   class SoCallbackActionP * pimpl;
00170   friend class SoCallbackActionP;
00171 };
00172 
00173 
00174 
00175 #endif // !COIN_SOCALLBACKACTION_H

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