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