1 #include <nurbsS.h>
2 #include <nurbsSub.h>
3 #include <math.h>
4
main()5 int main(){
6 Matrix_Point3Df Pts(4,5) ;
7 int i,j ;
8
9 using namespace PLib ;
10
11
12 for(i=0;i<Pts.rows();++i){
13 for(j=0;j<Pts.cols();++j){
14 Pts(i,j) = Point3Df(i,j,j) ;
15 }
16 }
17
18 PlNurbsSurfacef surf ;
19
20 surf.globalInterp(Pts,3,3) ;
21
22 cerr << "Point at (0.5,0.5) = " << surf(0.5,0.5) << endl ;
23 cerr << "\t= " << surf.pointAt(0.5,0.5) << endl ;
24 cerr << "\t normal = " << surf.normal(0.5,0.5) << endl ;
25
26 for(i=0;i<Pts.rows();++i)
27 for(j=0;j<Pts.cols();++j)
28 Pts(i,j) = Point3Df(i*20,j*20,(1+cos(i+j))*20) ;
29
30 surf.globalInterp(Pts,3,3) ;
31
32 cerr << "Point at (0.5,0.5) = " << surf(0.5,0.5) << endl ;
33 cerr << "\t= " << surf.pointAt(0.5,0.5) << endl ;
34 cerr << "\t normal = " << surf.normal(0.5,0.5) << endl ;
35
36 surf.write("tnurbsS.ns") ;
37 surf.read("tnurbsS.ns");
38 surf.writeVRML("tnurbsS.wrl") ;
39 surf.writePS("tnurbsS.ps",5,5,Point3Df(10,10,10),Point3Df(0,0,0)) ;
40
41
42 PLib::NurbsSubSurface<float> sub(surf) ;
43 sub.drawSubdivisionVRML("tnurbsSb.wrl",0.5);
44
45 surf.writeVRML("tnurbsS2.wrl",Color(255,255,0),float(0.1)) ;
46
47
48 NurbsCurvef curve ;
49 curve.makeCircle(Point3Df(0.5,0.5,0),0.3);
50
51
52 Vector_Point3Df pnt(100) ;
53
54 for(i=0;i<100;++i){
55 Point3Df param = curve.pointAt(float(i)/99.0) ;
56 pnt[i] = surf.pointAt(param.x(),param.y());
57 }
58
59 NurbsCurvef curve2 ;
60
61 curve2.globalInterp(pnt,3) ;
62
63 ofstream fout ;
64
65 fout.open("tnurbsST.wrl");
66 surf.writeVRML(fout,Color(255,255,255)) ;
67
68 curve2.writeVRML(fout,0.1,30,Color(255,0,0),6,60) ;
69
70 curve.writeVRML(fout,0.1,30,Color(0,255,0),6,60) ;
71
72 curve.degreeElevate(7) ;
73
74 for(i=0;i<curve.ctrlPnts().n();++i){
75 HPoint3Df p = surf(curve.ctrlPnts(i).x(),curve.ctrlPnts(i).y()) ;
76 curve.modCP(i,p) ;
77 }
78
79 curve.writeVRML(fout,0.1,30,Color(0,0,255),6,60);
80
81 fout.close();
82
83
84 //surf.writePOVRAY(0.1f,"tnurbsS.pov",Color(255,255,0),Point3Df(0,1,0),Point3Df(0,0,1)) ;
85
86 cerr << "Testing the normal computation at the corner points\n" ;
87 cerr << "normal(0,0) = " << surf.normal(0,0).unitLength() << endl ;
88 cerr << "normal(0,1) = " << surf.normal(0,1).unitLength() << endl ;
89 cerr << "normal(1,0) = " << surf.normal(1,0).unitLength() << endl ;
90 cerr << "normal(1,1) = " << surf.normal(1,1).unitLength() << endl ;
91
92 surf.makeTorus(Point3Df(0,0,0),4,1) ;
93 surf.writeVRML("torus.wrl");
94
95 return 0 ;
96 }
97