1 #ifndef COIN_SOCALLBACKACTION_H 2 #define COIN_SOCALLBACKACTION_H 3 4 /**************************************************************************\ 5 * Copyright (c) Kongsberg Oil & Gas Technologies AS 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions are 10 * met: 11 * 12 * Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the following disclaimer. 14 * 15 * Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * Neither the name of the copyright holder nor the names of its 20 * contributors may be used to endorse or promote products derived from 21 * this software without specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 27 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 29 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34 \**************************************************************************/ 35 36 // FIXME: Support getTextureFilename[s]() ? (kintel 20011205) 37 38 #include <Inventor/actions/SoAction.h> 39 #include <Inventor/actions/SoSubAction.h> 40 #include <Inventor/elements/SoDecimationTypeElement.h> 41 #include <Inventor/lists/SbList.h> 42 #include <Inventor/nodes/SoComplexity.h> 43 #include <Inventor/nodes/SoDrawStyle.h> 44 #include <Inventor/nodes/SoLightModel.h> 45 #include <Inventor/nodes/SoMaterialBinding.h> 46 #include <Inventor/nodes/SoNormalBinding.h> 47 #include <Inventor/nodes/SoPickStyle.h> 48 #include <Inventor/nodes/SoShapeHints.h> 49 #include <Inventor/nodes/SoTexture2.h> 50 #include <Inventor/nodes/SoTextureCoordinateBinding.h> 51 #include <Inventor/nodes/SoUnits.h> 52 53 class SbColor; 54 class SbMatrix; 55 class SbVec2f; 56 class SbVec2s; 57 class SbVec3f; 58 class SbVec4f; 59 class SbViewVolume; 60 class SoCallbackAction; 61 class SoCallbackActionP; 62 class SoCallbackData; 63 class SoPrimitiveVertex; 64 class SoShape; 65 class SbViewportRegion; 66 67 typedef void SoTriangleCB(void * userdata, SoCallbackAction * action, 68 const SoPrimitiveVertex * v1, 69 const SoPrimitiveVertex * v2, 70 const SoPrimitiveVertex * v3); 71 72 typedef void SoLineSegmentCB(void * userdata, SoCallbackAction * action, 73 const SoPrimitiveVertex * v1, 74 const SoPrimitiveVertex * v2); 75 76 typedef void SoPointCB(void * userdata, SoCallbackAction * action, 77 const SoPrimitiveVertex * v); 78 79 80 class COIN_DLL_API SoCallbackAction : public SoAction { 81 typedef SoAction inherited; 82 83 SO_ACTION_HEADER(SoCallbackAction); 84 85 public: 86 static void initClass(void); 87 88 SoCallbackAction(void); 89 SoCallbackAction(const SbViewportRegion & vp); 90 virtual ~SoCallbackAction(void); 91 92 void setViewportRegion(const SbViewportRegion & vp); 93 94 enum Response { CONTINUE, ABORT, PRUNE }; 95 96 typedef Response SoCallbackActionCB(void * userdata, 97 SoCallbackAction * action, 98 const SoNode * node); 99 100 void addPreCallback(const SoType type, SoCallbackActionCB * cb, void * userdata); 101 void addPostCallback(const SoType type, SoCallbackActionCB * cb, void * userdata); 102 103 void addPreTailCallback(SoCallbackActionCB * cb, void * userdata); 104 void addPostTailCallback(SoCallbackActionCB * cb, void * userdata); 105 106 void addTriangleCallback(const SoType type, SoTriangleCB * cb, void * userdata); 107 void addLineSegmentCallback(const SoType type, SoLineSegmentCB * cb, void * userdata); 108 void addPointCallback(const SoType type, SoPointCB * cb, void * userdata); 109 110 SoDecimationTypeElement::Type getDecimationType(void) const; 111 float getDecimationPercentage(void) const; 112 float getComplexity(void) const; 113 SoComplexity::Type getComplexityType(void) const; 114 int32_t getNumCoordinates(void) const; 115 const SbVec3f & getCoordinate3(const int index) const; 116 const SbVec4f & getCoordinate4(const int index) const; 117 SoDrawStyle::Style getDrawStyle(void) const; 118 unsigned short getLinePattern(void) const; 119 float getLineWidth(void) const; 120 float getPointSize(void) const; 121 const SbName & getFontName(void) const; 122 float getFontSize(void) const; 123 SoLightModel::Model getLightModel(void) const; 124 const SbVec3f & getLightAttenuation(void) const; 125 void getMaterial(SbColor & ambient, SbColor & diffuse, 126 SbColor & specular, SbColor & emission, 127 float & shininess, float & transparency, 128 const int index = 0) const; 129 SoMaterialBinding::Binding getMaterialBinding(void) const; 130 uint32_t getNumNormals(void) const; 131 const SbVec3f & getNormal(const int index) const; 132 SoNormalBinding::Binding getNormalBinding(void) const; 133 int32_t getNumProfileCoordinates(void) const; 134 const SbVec2f & getProfileCoordinate2(const int index) const; 135 const SbVec3f & getProfileCoordinate3(const int index) const; 136 const SoNodeList & getProfile(void) const; 137 SoShapeHints::VertexOrdering getVertexOrdering(void) const; 138 SoShapeHints::ShapeType getShapeType(void) const; 139 SoShapeHints::FaceType getFaceType(void) const; 140 float getCreaseAngle(void) const; 141 int32_t getNumTextureCoordinates(void) const; 142 const SbVec2f & getTextureCoordinate2(const int index) const; 143 const SbVec3f & getTextureCoordinate3(const int index) const; 144 const SbVec4f & getTextureCoordinate4(const int index) const; 145 SoTextureCoordinateBinding::Binding getTextureCoordinateBinding(void) const; 146 const SbColor & getTextureBlendColor(void) const; 147 const unsigned char * getTextureImage(SbVec2s & size, int & numcomps) const; 148 const unsigned char * getTextureImage(SbVec3s & size, int & numcomps) const; 149 const SbMatrix & getTextureMatrix(void) const; 150 SoTexture2::Model getTextureModel(void) const; 151 SoTexture2::Wrap getTextureWrapS(void) const; 152 SoTexture2::Wrap getTextureWrapT(void) const; 153 SoTexture2::Wrap getTextureWrapR(void) const; 154 const SbMatrix & getModelMatrix(void) const; 155 SoUnits::Units getUnits(void) const; 156 float getFocalDistance(void) const; 157 const SbMatrix & getProjectionMatrix(void) const; 158 const SbMatrix & getViewingMatrix(void) const; 159 const SbViewVolume & getViewVolume(void) const; 160 const SbViewportRegion & getViewportRegion(void) const; 161 SoPickStyle::Style getPickStyle(void) const; 162 int32_t getSwitch(void) const; 163 164 Response getCurrentResponse(void) const; 165 void invokePreCallbacks(const SoNode * const node); 166 void invokePostCallbacks(const SoNode * const node); 167 void invokeTriangleCallbacks(const SoShape * const shape, 168 const SoPrimitiveVertex * const v1, 169 const SoPrimitiveVertex * const v2, 170 const SoPrimitiveVertex * const v3); 171 void invokeLineSegmentCallbacks(const SoShape * const shape, 172 const SoPrimitiveVertex * const v1, 173 const SoPrimitiveVertex * const v2); 174 void invokePointCallbacks(const SoShape * const shape, 175 const SoPrimitiveVertex * const v); 176 177 SbBool shouldGeneratePrimitives(const SoShape * shape) const; 178 179 virtual SoNode * getCurPathTail(void); 180 void setCurrentNode(SoNode * const node); 181 182 void setCallbackAll(SbBool callbackall); 183 SbBool isCallbackAll(void) const; 184 185 protected: 186 virtual void beginTraversal(SoNode * node); 187 188 private: 189 void commonConstructor(void); 190 191 private: 192 SbPimplPtr<SoCallbackActionP> pimpl; 193 friend class SoCallbackActionP; 194 195 SoCallbackAction(const SoCallbackAction & rhs); 196 SoCallbackAction & operator = (const SoCallbackAction & rhs); 197 }; // SoCallbackAction 198 199 #endif // !COIN_SOCALLBACKACTION_H 200