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