home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / gfx / 3d / irit / scripts / bezier.irt < prev    next >
Encoding:
Text File  |  1994-09-17  |  6.3 KB  |  285 lines

  1. #
  2. # Some routines to test bezier curves/surfaces.
  3. #
  4.  
  5. #
  6. # Set display to on to view some results, off to view nothing.
  7. #
  8. display = on;
  9.  
  10. if ( machine == msdos, resolution = 5, resolution = 10 );
  11.  
  12. s45 = sin( pi / 4 );
  13. cbzr = list( ctlpt( P2, 1.0, 1.0, 0.0 ),
  14.          ctlpt( P2, s45, s45, s45 ),
  15.          ctlpt( P2, 1.0, 0.0, 1.0 ) );
  16. sbzr = list ( list( ctlpt( E3, 0.1, 0.0, 1.0 ),
  17.                 ctlpt( E3, 0.3, 1.0, 0.0 ),
  18.                 ctlpt( E3, 0.0, 2.0, 1.0 ) ),
  19.               list( ctlpt( E3, 1.1, 0.0, 0.0 ),
  20.                 ctlpt( E3, 1.3, 1.5, 2.0 ),
  21.                 ctlpt( E3, 1.0, 2.1, 0.0 ) ),
  22.               list( ctlpt( E3, 2.1, 0.0, 2.0 ),
  23.                 ctlpt( E3, 2.3, 1.0, 0.0 ),
  24.                 ctlpt( E3, 2.0, 2.0, 2.0 ) ),
  25.               list( ctlpt( E3, 3.1, 0.0, 0.0 ),
  26.                 ctlpt( E3, 3.3, 1.5, 2.0 ),
  27.                 ctlpt( E3, 3.0, 2.1, 0.0 ) ),
  28.               list( ctlpt( E3, 4.1, 0.0, 1.0 ),
  29.                 ctlpt( E3, 4.3, 1.0, 0.0 ),
  30.                 ctlpt( E3, 4.0, 2.0, 1.0 ) ) );
  31.  
  32. cb = cbezier( cbzr );
  33. color( cb, red );
  34. sb = sbezier( sbzr );
  35. color( sb, red );
  36.  
  37. if ( display == on, interact( list( axes, cb, sb ) ):
  38.             viewstate( "DSrfMesh" ):
  39.             pause():
  40.             viewstate( "DSrfMesh" ):
  41.             pause() );
  42.  
  43. #
  44. # Curve refinement (note the returned curve is a bspline curve).
  45. #
  46. cb_ref = crefine( cb, false, list( 0.25, 0.5, 0.75 ) );
  47. color( cb_ref, yellow );
  48. if ( display == on, interact( list( axes, cb, cb_ref ) ) );
  49. free( cb_ref );
  50.  
  51. #
  52. # Curve subdivision.
  53. #
  54. cb_lst = cdivide( cb, 0.5 );
  55. cb1 = nth( cb_lst, 1 );
  56. color( cb1, green );
  57. cb2 = nth( cb_lst, 2 );
  58. color( cb2, yellow );
  59. free( cb_lst );
  60. if ( display == on, interact( list( axes, cb, cb1, cb2 ) ) );
  61. free( cb1 ); free( cb2 );
  62.  
  63. #
  64. # Region from curve.
  65. #
  66. cbr1 = cregion( cb, 0.3, 0.6 );
  67. color( cbr1, yellow );
  68. cbr2 = cregion( cb, 0.5, 1.0 );
  69. color( cbr2, green );
  70. cbr3 = cregion( cb, 0.3, 0.0 );
  71. color( cbr3, blue );
  72. if ( display == on, interact( list( cb, cbr1, cbr2, cbr3 ) ) );
  73. free( cbr1 ); free( cbr2 ); free( cbr3 );
  74.  
  75. #
  76. # Surface subdivision and merging.
  77. #
  78. sb_lst = sdivide( sb, COL, 0.4 );
  79. sb1 = nth( sb_lst, 1 );
  80. color( sb1, green );
  81. sb2 = nth( sb_lst, 2 );
  82. color( sb2, yellow );
  83. free( sb_lst );
  84. if ( display == on, interact( list( axes, sb, sb1, sb2 ) ) );
  85. sbm = smerge( sb1, sb2, COL, 1 );
  86. display = on;
  87.  
  88. if ( display == on, interact( list( axes, sbm, sb1, sb2 ) ) );
  89. sbm = smerge( sb1 * trans( vector( 0.0, -0.5, 0.0 ) ),
  90.           sb2 * trans( vector( 0.0,  0.5, 0.0 ) ), COL, 0 );
  91. if ( display == on, interact( list( axes, sbm, sb1, sb2 ) ) );
  92. free( sb1 );
  93. free( sb2 );
  94.  
  95. sb_lst = sdivide( sb, ROW, 0.8 );
  96. sb1 = nth( sb_lst, 1 );
  97. color( sb1, green );
  98. sb2 = nth( sb_lst, 2 );
  99. color( sb2, yellow );
  100. free( sb_lst );
  101. if ( display == on, interact( list( axes, sb, sb1, sb2 ) ) );
  102. sbm = smerge( sb1, sb2, ROW, 1 );
  103. if ( display == on, interact( list( axes, sbm, sb1, sb2 ) ) );
  104. sbm = smerge( sb1 * trans(vector( -0.5, 0.0, 0.0 ) ),
  105.           sb2 * trans(vector(  0.5, 0.0, 0.0 ) ), ROW, 0 );
  106. if ( display == on, interact( list( axes, sbm, sb1, sb2 ) ) );
  107. free( sb1 );
  108. free( sb2 );
  109.  
  110. #
  111. # Region from surface.
  112. #
  113. sbr1 = sregion( sb, COL, 0.3, 0.6 );
  114. color( sbr1, yellow );
  115. sbr2 = sregion( sb, COL, 0.8, 1.0 );
  116. color( sbr2, green );
  117. sbr3 = sregion( sb, ROW, 0.1, 0.4 );
  118. color( sbr3, blue );
  119. interact( list( sb, sbr1, sbr2, sbr3 ) );
  120. free( sbr1 ); free( sbr2 ); free( sbr3 );
  121.  
  122. #
  123. # Derivative and normal curves/surfaces
  124. #
  125. dcb = cderive( cb );
  126. if ( display == on, interact( list( axes, dcb, cb ) ) );
  127. dsb1 = sderive( sb, ROW );
  128. color( dsb1, magenta );
  129. dsb2 = sderive( sb, COL );
  130. color( dsb2, yellow );
  131. if ( display == on, interact( list( axes, dsb1, dsb2, sb ) ) );
  132. nsb = snrmlsrf( sb );
  133. color( nsb, yellow );
  134. if ( display == on, interact( list( axes, nsb, sb ) ) );
  135. free( dcb );
  136. free( dsb1 );
  137. free( dsb2 );
  138. free( nsb );
  139.  
  140. #
  141. # Iso curves extraction from surface.
  142. #
  143. cb_all = list( axes );
  144. snoc( sb, cb_all );
  145. for ( t = 0.1, 0.1, 0.9,
  146.     cb1 = csurface( sb, COL, t ):
  147.     color( cb1, green ):
  148.     snoc( cb1, cb_all )
  149.     );
  150. for ( t = 0.1, 0.1, 0.9,
  151.     cb1 = csurface( sb, ROW, t ):
  152.     color( cb1, green ):
  153.     snoc( cb1, cb_all )
  154.     );
  155. if ( display == on, interact( cb_all ) );
  156. free( cb_all );
  157.  
  158.  
  159. #
  160. # curves extraction from surface mesh. Note curves may be not on the surface.
  161. #
  162. cb_all = list( axes );
  163. snoc( sb, cb_all );
  164. for ( t = 0, 1, 2,
  165.     cb1 = cmesh( sb, COL, t ):
  166.     color( cb1, green ):
  167.     snoc( cb1, cb_all )
  168.     );
  169. for ( t = 0, 1, 4,
  170.     cb1 = cmesh( sb, ROW, t ):
  171.     color( cb1, green ):
  172.     snoc( cb1, cb_all )
  173.     );
  174.  
  175. if ( display == on, interact( cb_all ):
  176.             viewstate( "DSrfMesh" ):
  177.             pause():
  178.             viewstate( "DSrfMesh" ):
  179.             pause() );
  180.  
  181. free( cb_all );
  182.  
  183. #
  184. # convert into polygons/polylines (using default resolution).
  185. #
  186. iritState("DumpLevel", 1);
  187. resolution;
  188.  
  189. p = gpolyline( list( sb, cb ), off );
  190. if ( display == on, interact( list( p, axes ) ) );
  191.  
  192. p = gpolygon( sb, on );
  193. if ( display == on, viewstate("DrawVNrml"):
  194.             interact( list( p, axes ) ):
  195.             viewstate("DrawVNrml") );
  196.  
  197. #
  198. # reverse surface ( flip normals ).
  199. #
  200. q = gpolygon( -sb, on );
  201. if ( display == on, viewstate("DrawVNrml"):
  202.             interact( list( q, axes ) ):
  203.             viewstate("DrawVNrml") );
  204.  
  205. free(p);
  206. free(q);
  207.  
  208. #
  209. # Offset approximation by translation of srf/crv in normal direction.
  210. #
  211. cbo = offset(cb, 0.1, 0.1, off);
  212. if ( display == on, interact( list( axes, cb, cbo ) ) );
  213. free(cbo);
  214.  
  215. sbo = offset(sb, 0.2, 0.1, off);
  216. if ( display == on, interact( list( axes, sb, sbo ) ) );
  217. free(sbo);
  218.  
  219. #
  220. # Surface and Curve evaluation.
  221. #
  222. ceval( cb, 0.0 );
  223. ceval( cb, 0.1 );
  224. ceval( cb, 0.3 );
  225. ceval( cb, 0.5 );
  226. ceval( cb, 0.9 );
  227. ceval( cb, 1.0 );
  228.  
  229. pause();
  230.  
  231. seval( sb, 0.0, 0.0 );
  232. seval( sb, 0.1, 0.0 );
  233. seval( sb, 0.3, 0.0 );
  234. seval( sb, 0.5, 0.5 );
  235. seval( sb, 0.9, 0.1 );
  236. seval( sb, 1.0, 1.0 );
  237.  
  238. pause();
  239.  
  240. #
  241. # Surface and Curve tangents.
  242. #
  243. ctangent( cb, 0.0 );
  244. ctangent( cb, 0.1 );
  245. ctangent( cb, 0.3 );
  246. ctangent( cb, 0.5 );
  247. ctangent( cb, 0.9 );
  248. ctangent( cb, 1.0 );
  249.  
  250. pause();
  251.  
  252. stangent( sb, ROW, 0.0, 0.0 );
  253. stangent( sb, COL, 0.1, 0.0 );
  254. stangent( sb, ROW, 0.3, 0.0 );
  255. stangent( sb, COL, 0.5, 0.5 );
  256. stangent( sb, ROW, 0.9, 0.1 );
  257. stangent( sb, COL, 1.0, 1.0 );
  258.  
  259. pause();
  260.  
  261. #
  262. # Surface normals.
  263. #
  264. snormal( sb, 0.0, 0.0 );
  265. snormal( sb, 0.1, 0.0 );
  266. snormal( sb, 0.3, 0.0 );
  267. snormal( sb, 0.5, 0.5 );
  268. snormal( sb, 0.9, 0.1 );
  269. snormal( sb, 1.0, 1.0 );
  270.  
  271. pause();
  272.  
  273.  
  274. #
  275. # save("cb", cb);
  276. # save("sb", sb);
  277. #
  278. # cb1 = load("cb.crv");
  279. # sb1 = load("sb.srf");
  280. #
  281. # save("cb1", cb1);
  282. # save("sb1", sb1);
  283. #
  284. #
  285.