00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef COIN_SOINDEXEDNURBSSURFACE_H
00021 #define COIN_SOINDEXEDNURBSSURFACE_H
00022
00023 #include <Inventor/nodes/SoSubNode.h>
00024 #include <Inventor/nodes/SoShape.h>
00025 #include <Inventor/fields/SoSFInt32.h>
00026 #include <Inventor/fields/SoMFInt32.h>
00027 #include <Inventor/fields/SoMFFloat.h>
00028
00029
00030 class COIN_DLL_API SoIndexedNurbsSurface : public SoShape {
00031 typedef SoShape inherited;
00032
00033 SO_NODE_HEADER(SoIndexedNurbsSurface);
00034
00035 public:
00036 static void initClass(void);
00037 SoIndexedNurbsSurface(void);
00038
00039 SoSFInt32 numUControlPoints;
00040 SoSFInt32 numVControlPoints;
00041 SoMFInt32 coordIndex;
00042 SoMFFloat uKnotVector;
00043 SoMFFloat vKnotVector;
00044 SoSFInt32 numSControlPoints;
00045 SoSFInt32 numTControlPoints;
00046 SoMFInt32 textureCoordIndex;
00047 SoMFFloat sKnotVector;
00048 SoMFFloat tKnotVector;
00049
00050 virtual void GLRender(SoGLRenderAction * action);
00051 virtual void rayPick(SoRayPickAction * action);
00052 virtual void getPrimitiveCount(SoGetPrimitiveCountAction * action);
00053 void sendPrimitive(SoAction *, SoPrimitiveVertex *);
00054
00055 protected:
00056 virtual ~SoIndexedNurbsSurface();
00057
00058 virtual void generatePrimitives(SoAction * action);
00059 virtual void computeBBox(SoAction * action, SbBox3f & box, SbVec3f & center);
00060 SoDetail * createTriangleDetail(SoRayPickAction * action,
00061 const SoPrimitiveVertex * v1,
00062 const SoPrimitiveVertex * v2,
00063 const SoPrimitiveVertex * v3,
00064 SoPickedPoint * pp);
00065 private:
00066 void * nurbsrenderer;
00067 void doNurbs(SoAction * action, const SbBool glrender);
00068
00069 static void tessBegin(int , void * data);
00070 static void tessTexCoord(float * texcoord, void * data);
00071 static void tessNormal(float * normal, void * data);
00072 static void tessVertex(float * vertex, void * data);
00073 static void tessEnd(void * data);
00074
00075 };
00076
00077 #endif // !COIN_SOINDEXEDNURBSSURFACE_H