![]() |
http://www.sim.no http://www.coin3d.org |
00001 #ifndef COIN_SOSHAPE_H 00002 #define COIN_SOSHAPE_H 00003 00004 /**************************************************************************\ 00005 * 00006 * This file is part of the Coin 3D visualization library. 00007 * Copyright (C) 1998-2004 by Systems in Motion. All rights reserved. 00008 * 00009 * This library is free software; you can redistribute it and/or 00010 * modify it under the terms of the GNU General Public License 00011 * ("GPL") version 2 as published by the Free Software Foundation. 00012 * See the file LICENSE.GPL at the root directory of this source 00013 * distribution for additional information about the GNU GPL. 00014 * 00015 * For using Coin with software that can not be combined with the GNU 00016 * GPL, and for taking advantage of the additional benefits of our 00017 * support services, please contact Systems in Motion about acquiring 00018 * a Coin Professional Edition License. 00019 * 00020 * See <URL:http://www.coin3d.org/> for more information. 00021 * 00022 * Systems in Motion, Teknobyen, Abels Gate 5, 7030 Trondheim, NORWAY. 00023 * <URL:http://www.sim.no/>. 00024 * 00025 \**************************************************************************/ 00026 00027 #include <Inventor/nodes/SoSubNode.h> 00028 #include <Inventor/SbMatrix.h> 00029 #include <Inventor/SbVec2s.h> 00030 #include <Inventor/SbBox3f.h> 00031 00032 class SoPrimitiveVertex; 00033 class SoDetail; 00034 class SoPickedPoint; 00035 class SoFaceDetail; 00036 class SoState; 00037 class SoTextureCoordinateElement; 00038 class SbVec2f; 00039 class SoMaterialBundle; 00040 class SoBoundingBoxCache; 00041 00042 class COIN_DLL_API SoShape : public SoNode { 00043 typedef SoNode inherited; 00044 00045 SO_NODE_ABSTRACT_HEADER(SoShape); 00046 00047 public: 00048 static void initClass(void); 00049 00050 enum TriangleShape { 00051 TRIANGLE_STRIP, TRIANGLE_FAN, TRIANGLES, POLYGON, 00052 // The rest of the enums are not part of the original Inventor API. 00053 QUADS, QUAD_STRIP, POINTS, LINES, LINE_STRIP 00054 }; 00055 00056 virtual SbBool affectsState(void) const; 00057 virtual void notify(SoNotList * nl); 00058 00059 virtual void getBoundingBox(SoGetBoundingBoxAction * action); 00060 virtual void GLRender(SoGLRenderAction * action); 00061 virtual void rayPick(SoRayPickAction * action); 00062 virtual void callback(SoCallbackAction * action); 00063 virtual void computeBBox(SoAction * action, SbBox3f & box, 00064 SbVec3f & center) = 0; 00065 virtual void getPrimitiveCount(SoGetPrimitiveCountAction * action); 00066 00067 static void getScreenSize(SoState * const state, const SbBox3f & boundingbox, 00068 SbVec2s & rectsize); 00069 static float getDecimatedComplexity(SoState * state, float complexity); 00070 const SoBoundingBoxCache * getBoundingBoxCache(void) const; 00071 00072 protected: 00073 SoShape(void); 00074 virtual ~SoShape(); 00075 00076 float getComplexityValue(SoAction * action); 00077 virtual void generatePrimitives(SoAction * action) = 0; 00078 virtual SbBool shouldGLRender(SoGLRenderAction * action); 00079 void beginSolidShape(SoGLRenderAction * action); 00080 void endSolidShape(SoGLRenderAction * action); 00081 void GLRenderBoundingBox(SoGLRenderAction * action); 00082 SbBool shouldPrimitiveCount(SoGetPrimitiveCountAction * action); 00083 00084 SbBool shouldRayPick(SoRayPickAction * const action); 00085 void computeObjectSpaceRay(SoRayPickAction * const action); 00086 void computeObjectSpaceRay(SoRayPickAction * const action, 00087 const SbMatrix & matrix); 00088 virtual SoDetail * createTriangleDetail(SoRayPickAction * action, 00089 const SoPrimitiveVertex * v1, 00090 const SoPrimitiveVertex * v2, 00091 const SoPrimitiveVertex * v3, 00092 SoPickedPoint * pp); 00093 virtual SoDetail * createLineSegmentDetail(SoRayPickAction * action, 00094 const SoPrimitiveVertex * v1, 00095 const SoPrimitiveVertex * v2, 00096 SoPickedPoint * pp); 00097 virtual SoDetail * createPointDetail(SoRayPickAction * action, 00098 const SoPrimitiveVertex * v, 00099 SoPickedPoint * pp); 00100 00101 void invokeTriangleCallbacks(SoAction * const action, 00102 const SoPrimitiveVertex * const v1, 00103 const SoPrimitiveVertex * const v2, 00104 const SoPrimitiveVertex * const v3); 00105 void invokeLineSegmentCallbacks(SoAction * const action, 00106 const SoPrimitiveVertex * const v1, 00107 const SoPrimitiveVertex * const v2); 00108 void invokePointCallbacks(SoAction * const action, 00109 const SoPrimitiveVertex * const v); 00110 void beginShape(SoAction * const action, const TriangleShape shapetype, 00111 SoDetail * const detail = NULL); 00112 void shapeVertex(const SoPrimitiveVertex * const v); 00113 void endShape(void); 00114 00115 void generateVertex(SoPrimitiveVertex * const pv, 00116 const SbVec3f & point, 00117 const SbBool useTexFunc, 00118 const SoTextureCoordinateElement * const tce, 00119 const float s, 00120 const float t, 00121 const SbVec3f & normal); 00122 void generateVertex(SoPrimitiveVertex * const pv, 00123 const SbVec3f & point, 00124 const SbBool useTexFunc, 00125 const SoTextureCoordinateElement * const tce, 00126 const float s, 00127 const float t, 00128 const float r, 00129 const SbVec3f & normal); 00130 00131 private: 00132 class SoShapeP * pimpl; 00133 00134 void getBBox(SoAction * action, SbBox3f & box, SbVec3f & center); 00135 void rayPickBoundingBox(SoRayPickAction * action); 00136 friend class soshape_primdata; // internal class 00137 friend class so_generate_prim_private; // a very private class 00138 }; 00139 00140 #endif // !COIN_SOSHAPE_H
Copyright © 1998-2004 by Systems in Motion AS. All rights reserved.
Generated on Sat Sep 3 10:55:24 2005 for Coin by Doxygen. 1.4.4