

/*
 * softcurveval.h
 *
 * $Revision: 1.1.1.1 $
 */

#ifndef SO_NURBS_SOFTCURVEVAL
#define SO_NURBS_SOFTCURVEVAL

#include <inttypes.h>   /* defines long and brethren */

#include "mystdio.h"
#include "isocurveeval.h"
#include "basiccrveval.h"
#include "softcurvmap.h"


class _SoNurbsCurveEvaluator : public _SoNurbsBasicCurveEvaluator  {  
public:
			_SoNurbsCurveEvaluator( void );
			~_SoNurbsCurveEvaluator( void );
    void		range1f( long, REAL *, REAL * );
    void		domain1f( REAL, REAL );
    void		addMap( _SoNurbsCurveMap * );


    void		enable( long );
    void		disable( long );
    void		bgnmap1f( long );
    void		map1f( long, REAL, REAL, long, long, REAL * );
    void		mapgrid1f( long, REAL, REAL );
    void		mapmesh1f( long, long, long );
    void		evalpoint1i( long );
    void		evalcoord1f( long, REAL );
    void		endmap1f( void );

    void		bgnline( void );
    void		endline( void );

    int			canRecord( void ) ;
    int			canPlayAndRecord( void ) ;
    int			createHandle( int handle );
    void		beginOutput( ServiceMode, int handle );
    void		endOutput( void ); 
    void		discardRecording( int handle );
    void		playRecording( int handle );

private:
    _SoNurbsCurveMap *	firstMap( void );
    _SoNurbsCurveMap *	nextMap( _SoNurbsCurveMap * );
    int			isMap( _SoNurbsCurveMap * );

    _SoNurbsCurveMap *	maps;
    REAL		cus, cdus;
    
    _SoNurbsCurveMap *	typeToMap( long );
};

#endif /* SO_NURBS_SOFTCURVEVAL */
