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