File: d_nurbs.cpp

package info (click to toggle)
nurbs%2B%2B 3.0.11-4
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 4,012 kB
  • ctags: 3,023
  • sloc: cpp: 26,461; sh: 16,989; makefile: 317; ansic: 27
file content (108 lines) | stat: -rw-r--r-- 4,829 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "nurbs.cpp"

namespace PLib {

// double specialization

template <>
Point_nD<double,2> NurbsCurve<double,2>::normal(double u, const Point_nD<double,2>& v) const{
  cerr << "YOU CAN'T COMPUTE THE NORMAL in 2D of a 2D vector!\n" ; 
  return firstDn(u) ;
}

void NurbsCurve<double,2>::makeCircle(const Point_nD<double,2>& O, double r, double as, double ae){
  makeCircle(O,Point_nD<double,2>(1,0),Point_nD<double,2>(0,1),r,as,ae) ;
}

template <>
int NurbsCurve<double,2>::writeVRML(const char* filename,double radius,int K, const Color& color,int Nu,int Nv, double u_s, double u_e) const{
  NurbsCurve<double,3> C ;
  to3D(*this,C) ; 
  return C.writeVRML(filename,radius,K,color,Nu,Nv,u_s,u_e) ;
}

template <>
int NurbsCurve<double,2>::writeVRML97(const char* filename,double radius,int K, const Color& color,int Nu,int Nv, double u_s, double u_e) const{
  NurbsCurve<double,3> C ;
  to3D(*this,C) ; 
  return C.writeVRML97(filename,radius,K,color,Nu,Nv,u_s,u_e) ;
}

template <>
int NurbsCurve<double,2>::writeVRML(ostream& fout,double radius,int K, const Color& color,int Nu,int Nv, double u_s, double u_e) const{
  NurbsCurve<double,3> C ;
  to3D(*this,C) ; 
  return C.writeVRML(fout,radius,K,color,Nu,Nv,u_s,u_e) ;
}

template <>
int NurbsCurve<double,2>::writeVRML97(ostream& fout,double radius,int K, const Color& color,int Nu,int Nv, double u_s, double u_e) const{
  NurbsCurve<double,3> C ;
  to3D(*this,C) ; 
  return C.writeVRML97(fout,radius,K,color,Nu,Nv,u_s,u_e) ;
}

template <>
void NurbsCurve<double,2>::drawAaImg(Image_Color& Img, const Color& color, int precision, int alpha){
  NurbsCurve<double,3> C ;
  to3D(*this,C) ; 
  C.drawAaImg(Img,color,precision,alpha) ;
}




#ifdef NO_IMPLICIT_TEMPLATES
//double initialization

template class NurbsCurve<double,3> ;
template class OpLengthFcn<double,3> ;


template double chordLengthParam(const Vector< Point_nD<double,3> >& Q, Vector<double> &ub);
template double chordLengthParamH(const Vector< HPoint_nD<double,3> >& Q, Vector<double> &ub);
template double chordLengthParamClosed(const Vector< Point_nD<double,3> >& Q, Vector<double> &ub, int deg);
template double chordLengthParamClosedH(const Vector< HPoint_nD<double,3> >& Q, Vector<double> &ub, int deg);
template void binomialCoef(Matrix<double>& Bin) ;
template Vector<double> knotUnion(const Vector<double>& Ua, const Vector<double>& Ub);
template double nurbsBasisFun(double u, int i, int p, const Vector<double>& U) ; 
template void nurbsBasisFuns(double u, int span, int deg, const Vector<double>& U, Vector<double>& N);
template void nurbsDersBasisFuns(int n, double u, int span, int deg, const Vector<double>& U, Matrix<double>& ders) ;
template int intersectLine(const Point_nD<double,3>& p1, const Point_nD<double,3>& t1, const Point_nD<double,3>& p2, const Point_nD<double,3>& t2, Point_nD<double,3>& p);
template void knotAveraging(const Vector<double>& uk, int deg, Vector<double>& U) ;
template void knotAveragingClosed(const Vector<double>& uk, int deg, Vector<double>& U) ;
template void averagingKnots(const Vector<double>& U, int deg, Vector<double>& uk);
template int findSpan(double u, const Vector<double>& U, int deg);

template int maxInfluence(int i, const Vector<double>& U, int p, double &u);

template void generateCompatibleCurves(NurbsCurveArray<double,3> &ca);
template void knotApproximationClosed( Vector<double>& U, const  Vector<double>& ub, int n, int p);

template void wrapPointVector(const Vector<Point_nD<double,3> >& Q, int d, Vector<Point_nD<double,3> >& Qw);
template void wrapPointVectorH(const Vector<HPoint_nD<double,3> >& Q, int d, Vector<HPoint_nD<double,3> >& Qw);


template class NurbsCurve<double,2> ;
template class OpLengthFcn<double,2>;

template double chordLengthParam(const Vector< Point_nD<double,2> >& Q, Vector<double> &ub);
template double chordLengthParamH(const Vector< HPoint_nD<double,2> >& Q, Vector<double> &ub);
template double chordLengthParamClosed(const Vector< Point_nD<double,2> >& Q, Vector<double> &ub, int deg);
template double chordLengthParamClosedH(const Vector< HPoint_nD<double,2> >& Q, Vector<double> &ub, int deg);
template int intersectLine(const Point_nD<double,2>& p1, const Point_nD<double,2>& t1, const Point_nD<double,2>& p2, const Point_nD<double,2>& t2, Point_nD<double,2>& p);

template void generateCompatibleCurves(NurbsCurveArray<double,2> &ca);

template void wrapPointVector(const Vector<Point_nD<double,2> >& Q, int d, Vector<Point_nD<double,2> >& Qw);
template void wrapPointVectorH(const Vector<HPoint_nD<double,2> >& Q, int d, Vector<HPoint_nD<double,2> >& Qw);


template void to3D(const NurbsCurve<double,2>&, NurbsCurve<double,3>&);
template void to3D(const NurbsCurve<double,3>&, NurbsCurve<double,3>&);
template void to2D(const NurbsCurve<double,3>&, NurbsCurve<double,2>&);

#endif 

}