00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
#ifndef _nurbs_curve_h_
00026
#define _nurbs_curve_h_
00027
00028
#include "nurbs_global.h"
00029
00030
#include "vector.h"
00031
00034
namespace PLib {
00035
template <
class T,
int N>
class ParaCurve ;
00036
00044
template <
class T,
int N>
00045 class ParaCurve{
00046
public:
00047
ParaCurve()
00048 {;}
00049
00050
virtual HPoint_nD<T,N> operator()(T u)
const =0;
00051
00052 HPoint_nD<T,N> hpointAt(T u)
const {
return operator()(u); }
00053
00055 Point_nD<T,N> pointAt(T u)
const {
return project(
operator()(u)) ; }
00056
00057
virtual HPoint_nD<T,N> hpointAt(T u,
int span)
const =0 ;
00058
00060 Point_nD<T,N> pointAt(T u,
int span) {
return project(hpointAt(u,span)) ; }
00061
00062
virtual void deriveAtH(T u,
int,
Vector<
HPoint_nD<T,N> >&)
const =0;
00063
virtual void deriveAt(T u,
int,
Vector<
Point_nD<T,N> >&)
const =0;
00064
00065
virtual T
minKnot() const = 0 ;
00066 virtual T maxKnot() const = 0 ;
00067
00068 virtual T minDist2(const
Point_nD<T,N>& p, T& guess,T error=0.0001,T s=0.2,
int sep=9,
int maxIter=10,T um=-1, T uM=-1) const ;
00069 virtual
Point_nD<T,N> minDistY(T y, T& guessU, T error=0.0001, T s=-1,
int sep=9,
int maxIter=10, T um=-1, T uM=-1) const ;
00070 virtual
Point_nD<T,N> minDistX(T y, T& guessU, T error=0.0001, T s=-1,
int sep=9,
int maxIter=10, T um=-1, T uM=-1) const ;
00071 virtual
Point_nD<T,N> minDistZ(T y, T& guessU, T error=0.0001, T s=-1,
int sep=9,
int maxIter=10, T um=-1, T uM=-1) const ;
00072
00073 virtual T extremum(
int findMin, CoordinateType coord, T minDu=0.0001,
int sep=9,
int maxIter=10, T um=-1, T uM=-1) const ;
00074
00075 };
00076
00077 template <class T,
int N>
00078 inline
void CderH(T u,const
ParaCurve<T,N>& c,
int d,
Vector<
HPoint_nD<T,N> >& ders) { c.deriveAtH(u,d,ders);}
00079
00080
template <
class T,
int N>
00081
inline void Cder(T u,
const ParaCurve<T,N>& c,
int d, Vector< Point_nD<T,N> >& ders) { c.deriveAt(u,d,ders);}
00082
00083 }
00084
00085
00086
#ifdef INCLUDE_TEMPLATE_SOURCE
00087
#include "curve.cpp"
00088
#endif
00089
00090
#endif
00091