home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / gfx / 3d / irit / docs / user_man / doc_figs.irt next >
Encoding:
Text File  |  1995-01-01  |  51.1 KB  |  1,403 lines

  1. #
  2. # Figures of IRIT documentation - generated using IRIT...
  3. #
  4.  
  5. include("../../irit/iritinit"); # Just in case...
  6. save_mat_docs = view_mat;
  7.  
  8. #############################################################################
  9. Arc1 = ARC( vector( 1.0, 0.0, 0.0 ),
  10.             vector( 1.0, 1.0, 0.0 ),
  11.             vector( 0.0, 1.0, 0.0 ) ) * scale( vector( 0.7, 0.7, 0.7 ) )
  12.                       * trans( vector( -0.3, -0.5, 0.0 ) );
  13. attrib( Arc1, "width", 0.02 );
  14. view( Arc1, on );
  15. save( "arc1cnst", Arc1 );
  16.  
  17. #############################################################################
  18. Crv = cbspline( 3,
  19.                 list( ctlpt( E2, 0.7, 0.0 ),
  20.                       ctlpt( E2, 0.7, 0.06 ),
  21.                       ctlpt( E2, 0.1, 0.1 ),
  22.                       ctlpt( E2, 0.1, 0.6 ),
  23.                       ctlpt( E2, 0.6, 0.6 ),
  24.                       ctlpt( E2, 0.8, 0.8 ),
  25.                       ctlpt( E2, 0.8, 1.4 ),
  26.                       ctlpt( E2, 0.6, 1.6 ) ),
  27.                 list( KV_OPEN ) );
  28. attrib( Crv, "width", 0.01 );
  29.  
  30. OffCrv1 = AOFFSET( Crv, -0.4, 0.01, TRUE, FALSE );
  31. OffCrv2 = AOFFSET( Crv, -0.4, 0.01, FALSE, FALSE );
  32. attrib( OffCrv1, "width", 0.02 );
  33. attrib( OffCrv2, "width", 0.02 );
  34. All = list( list( Crv, OffCrv1 ) * trans( vector(  0.0,  1.0, 0.0 ) ),
  35.         list( Crv, OffCrv2 ) * trans( vector(  0.0, -1.0, 0.0 ) ) )
  36.               * rotz( 90 )
  37.               * scale( vector( 0.4, 0.4, 0.4 ) )
  38.               * trans( vector( 0.3, -0.3, 0.0 ) );
  39. view( All, on );
  40. save( "caoffset", All );
  41.  
  42. #############################################################################
  43. Circ = circle( vector( 0.0, 0.0, 0.0 ), 1.0 )
  44.                 * scale( vector( 0.7, 0.7, 0.7 ) );
  45. attrib( Circ, "width", 0.02 );
  46. Srf = BOOLONE( Circ );
  47. attrib( Srf, "width", 0.005 );
  48. view( list( Srf, Circ ), on );
  49. save( "boolone", list( Srf, Circ ) );
  50.  
  51. Cbzr1 = cbezier( list( ctlpt( E3, 0.1, 0.1, 0.1 ),
  52.                        ctlpt( E3, 0.0, 0.5, 1.0 ),
  53.                        ctlpt( E3, 0.4, 1.0, 0.4 ) ) );
  54. Cbzr2 = cbezier( list( ctlpt( E3, 1.0, 0.2, 0.2 ),
  55.                        ctlpt( E3, 1.0, 0.5, -1.0 ),
  56.                        ctlpt( E3, 1.0, 1.0, 0.3 ) ) );
  57. Cbsp3 = cbspline( 4,
  58.                   list( ctlpt( E3, 0.1,  0.1, 0.1 ),
  59.                         ctlpt( E3, 0.25, 0.0, -1.0 ),
  60.                         ctlpt( E3, 0.5,  0.0, 2.0 ),
  61.                         ctlpt( E3, 0.75, 0.0, -1.0 ),
  62.                         ctlpt( E3, 1.0,  0.2, 0.2 ) ),
  63.                   list( KV_OPEN ) );
  64. Cbsp4 = cbspline( 4,
  65.                   list( ctlpt( E3, 0.4,  1.0, 0.4 ),
  66.                         ctlpt( E3, 0.25, 1.0, 1.0 ),
  67.                         ctlpt( E3, 0.5,  1.0, -2.0 ),
  68.                         ctlpt( E3, 0.75, 1.0, 1.0 ),
  69.                         ctlpt( E3, 1.0,  1.0, 0.3 ) ),
  70.                   list( KV_OPEN ) );
  71. attrib( Cbzr1, "width", 0.02 );
  72. attrib( Cbzr2, "width", 0.02 );
  73. attrib( Cbsp3, "width", 0.02 );
  74. attrib( Cbsp4, "width", 0.02 );
  75.  
  76. Srf = BOOLSUM( Cbzr1, Cbzr2, Cbsp3, Cbsp4 );
  77. attrib( Srf, "width", 0.005 );
  78.  
  79. All = list( Srf, Cbzr1, Cbzr2, Cbsp3, Cbsp4 )
  80.         * rotx( 160 ) * roty( 20 ) * trans( vector( -0.5, 0.3, 0.0 ) );
  81. view( All, on );
  82. save( "boolsum", All );
  83.  
  84. #############################################################################
  85. B = BOX( vector( 0, 0, 0 ), 1, 1, 1);
  86. attrib( B, "width", 0.02 );
  87.  
  88. All = B * rotx( 160 ) * roty( 20 ) * trans( vector( -0.3, 0.5, 0.0 ) );
  89. view( All, on );
  90. save( "prim_box", All );
  91.  
  92. #############################################################################
  93. s45 = sin(pi / 4);
  94. Arc90 = CBEZIER( list( ctlpt( P2, 1.0, 0.0, 1.0 ),
  95.                        ctlpt( P2, s45, s45, s45 ),
  96.                        ctlpt( P1, 1.0, 1.0 ) ) );
  97. HalfCirc = CBSPLINE( 3,
  98.                      list( ctlpt( P3,  1.0,  1.0,  0.0, 0.0 ),
  99.                ctlpt( P3,  s45,  s45,  s45, 0.0 ),
  100.                ctlpt( P3,  1.0,  0.0,  1.0, 0.0 ),
  101.                            ctlpt( P3,  s45, -s45,  s45, 0.0 ),
  102.                            ctlpt( P3,  1.0, -1.0,  0.0, 0.0 ) ),
  103.                      list( 0, 0, 0, 1, 1, 2, 2, 2 ) );
  104. attrib( Arc90, "width", 0.02 );
  105. attrib( HalfCirc, "width", 0.02 );
  106.  
  107. All = list( Arc90 * trans( vector( -1.5, -1.0, 0.0 ) ),
  108.         HalfCirc * trans( vector( 0.6, -1.0, 0.0 ) ) )
  109.     * scale( vector( 0.5, 0.5, 0.0 ) );
  110. view( All, on );
  111. save( "circular", All );
  112.  
  113. #############################################################################
  114. c = CBSPLINE( 4,
  115.               list( ctlpt( E2,  0.5,  0.5 ),
  116.                     ctlpt( E2, -0.5,  0.5 ),
  117.                     ctlpt( E2, -0.5, -0.5 ),
  118.                     ctlpt( E2,  0.5, -0.5 ) ),
  119.               list( KV_PERIODIC ) );
  120. attrib( c, "width", 0.01 );
  121. All = c * scale( vector( 0.7, 0.7, 0.7 ) );
  122. view( All, on );
  123. save( "cperiod", All );
  124.  
  125. #############################################################################
  126. crv1 = cbspline( 3,
  127.                  list( ctlpt( E2, 0, 0 ),
  128.                        ctlpt( E2, 0, 0.5 ),
  129.                        ctlpt( E2, 0.5, 0.7 ),
  130.                        ctlpt( E2, 1, 1 ) ),
  131.                  list( KV_OPEN ) );
  132. crv2 = cbspline( 3,
  133.                  list( ctlpt( E2, 1, 0 ),
  134.                        ctlpt( E2, 0.7, 0.25 ),
  135.                        ctlpt( E2, 0.3, 0.5 ),
  136.                        ctlpt( E2, 0, 1 ) ),
  137.                  list( KV_OPEN ) );
  138. attrib( crv1, "width", 0.01 );
  139. attrib( crv2, "width", 0.01 );
  140.  
  141. inter_pts = CCINTER( crv1, crv2, 0.001, FALSE );
  142.  
  143. All = list( crv1, crv2, 
  144.         ceval( crv1, coord( nth( inter_pts, 1 ), 0 ) ) )
  145.     * scale( vector( 0.7, 0.7, 0.7 ) ) 
  146.     * trans( vector( -0.3, -0.5, 0.0 ) );
  147. view( All, on );
  148. save( "cci", All );
  149.  
  150. #############################################################################
  151. crv = cbezier( list( ctlpt( E2, -1.0,  0.5 ),
  152.                      ctlpt( E2, -0.5, -2.0 ),
  153.                      ctlpt( E2,  0.0,  1.0 ),
  154.                      ctlpt( E2,  1.0,  0.0 ) ) ) * rotz( 30 );
  155. attrib( crv, "width", 0.01 );
  156.  
  157. crvtr = CCRVTR( crv, 0.001 );
  158. pt_crvtr = nil();
  159. pt = nil();
  160. for ( i = 1, 1, sizeof( crvtr ),
  161.     ( pt = ceval( crv, nth( crvtr, i ) ) ):
  162.     snoc( pt, pt_crvtr )
  163. );
  164. All = list( crv, pt_crvtr ) * scale( vector( 0.5, 0.5, 0.5 ) );
  165. view( All, on );
  166. save( "ccrvtr", All );
  167.  
  168. #############################################################################
  169. Circ = circle( vector( 0.0, 0.0, 0.0 ), 1.0 );
  170. attrib( Circ, "width", 0.01 );
  171. Hodograph = CDERIVE( Circ );
  172. attrib( Hodograph, "width", 0.02 );
  173.  
  174. All = list( Circ, Hodograph ) * scale( vector( 0.3, 0.3, 0.3 ) );
  175. view( All, on );
  176. save( "cderive", All );
  177.  
  178. #############################################################################
  179. Crv = cbspline( 4,
  180.         list( ctlpt( E2, -0.9,  0.0 ),
  181.                       ctlpt( E2, -0.5, -1.1 ),
  182.                       ctlpt( E2,  0.0,  0.8 ),
  183.                       ctlpt( E2,  0.5, -1.1 ),
  184.                       ctlpt( E2,  0.9,  0.0 ) ),
  185.         list( KV_OPEN ) );
  186. attrib( Crv, "width", 0.01 );
  187. CrvLst = CDIVIDE( Crv, 1.3 );
  188. Crv1 = nth( CrvLst, 1 ) * trans( vector(-0.03, 0.5, 0.0 ) );
  189. Crv2 = nth( CrvLst, 2 ) * trans( vector( 0.03, 0.5, 0.0 ) );
  190. attrib( Crv1, "width", 0.02 );
  191. attrib( Crv2, "width", 0.02 );
  192. All = list( Crv, Crv1, Crv2 );
  193. view( All, on );
  194. save( "cdivide", All );
  195.  
  196. #############################################################################
  197. Crv = cbspline( 3,
  198.                 list( ctlpt( E3, -1.0,  0.1,  0.2 ),
  199.                       ctlpt( E3, -0.1,  1.0,  0.1 ),
  200.                       ctlpt( E3,  0.1,  0.1,  1.0 ),
  201.                       ctlpt( E3,  1.0,  0.1,  0.1 ),
  202.                       ctlpt( E3,  0.1,  1.0,  0.2 ) ),
  203.                 list( KV_OPEN ) );
  204. attrib( Crv, "width", 0.01 );
  205. Cev = CEVOLUTE( crv );
  206. attrib( Cev, "width", 0.02 );
  207.  
  208. All = list( crv, cev ) * rotx( -20 )
  209.                * roty( 0 )
  210.                * scale( vector( 0.3, 0.3, 0.3 ) );
  211. view( All, on );
  212. save( "cevolute", All );
  213.  
  214. #############################################################################
  215. Crv = cbspline( 3,
  216.                 list( ctlpt( E3, -0.3,  0.5,  0.0 ),
  217.                       ctlpt( E3, -0.0,  1.0,  0.0 ),
  218.                       ctlpt( E3, -1.0,  0.1,  0.0 ),
  219.                       ctlpt( E3,  1.0,  0.1,  0.0 ),
  220.                       ctlpt( E3,  0.1,  1.0,  0.0 ) ),
  221.                 list( KV_OPEN ) );
  222. attrib( Crv, "width", 0.01 );
  223. extremes = cextremes( crv, 0.0001, 1 );
  224. pt_extremes = nil();
  225. pt = nil();
  226. for ( i = 1, 1, sizeof( extremes ),
  227.     ( pt = ceval( crv, nth( extremes, i ) ) ):
  228.     snoc( pt, pt_extremes )
  229. );
  230.  
  231. All = list( Crv, pt_extremes ) * scale( vector( 0.6, 0.6, 0.6 ) );
  232. view( All, on );
  233. save( "cextreme", All );
  234.  
  235. #############################################################################
  236. Crv = cbspline( 4,
  237.                 list( ctlpt( E3, -1.0,  0.1,  0.0 ),
  238.                       ctlpt( E3, -0.5,  1.0,  0.0 ),
  239.                       ctlpt( E3,  0.7, -1.0,  0.0 ),
  240.                       ctlpt( E3,  1.0,  1.0,  0.0 ),
  241.                       ctlpt( E3,  1.0,  0.0,  0.0 ) ),
  242.                 list( KV_OPEN ) );
  243. attrib( Crv, "width", 0.01 );
  244.  
  245. inflect = CINFLECT( crv, 0.001 );
  246. pt_inflect = nil();
  247. pt = nil();
  248. for ( i = 1, 1, sizeof( inflect ),
  249.        pt = ceval( crv, nth( inflect, i ) ):
  250.        snoc( pt, pt_inflect )
  251.     );
  252.  
  253. All = list( Crv, pt_inflect ) * scale( vector( 0.6, 0.6, 0.6 ) );
  254. view( All, on );
  255. save( "cinflect", All );
  256.  
  257. #############################################################################
  258. pl = nil();
  259. for ( x = 0, 1, 100,
  260.       snoc(point(cos(x / 5), sin(x / 5), x / 50 - 1), pl)
  261.     );
  262. c = CINTERP( pl, 3, 21, PARAM_UNIFORM );
  263. attrib( c, "width", 0.01 );
  264.  
  265. All = list( c, pl, axes * trans( vector( -2, 0, -2 ) ) )
  266.     * roty( 45 ) * rotx( 30 )
  267.         * scale( vector( 0.3, 0.3, 0.3 ) )
  268.     * trans( vector( 0.3, -0.3, 0.0 ) );
  269. view( All, on );
  270. save( "cinterp", All );
  271.  
  272. #############################################################################
  273. srf = sbezier( list( list( ctlpt( E3, 0.0, 0.0, 0.0 ),
  274.                            ctlpt( E3, 0.0, 0.5, 1.0 ),
  275.                            ctlpt( E3, 0.0, 1.0, 0.0 ) ),
  276.                      list( ctlpt( E3, 0.5, 0.0, 1.0 ),
  277.                            ctlpt( E3, 0.5, 0.5, 0.0 ),
  278.                            ctlpt( E3, 0.5, 1.0, 1.0 ) ),
  279.                      list( ctlpt( E3, 1.0, 0.0, 1.0 ),
  280.                            ctlpt( E3, 1.0, 0.5, 0.0 ),
  281.                            ctlpt( E3, 1.0, 1.0, 1.0 ) ) ) );
  282. attrib( srf, "width", 0.007 );
  283. crv = coerce( circle( vector( 0.0, 0.0, 1.0 ), 0.4 ) *
  284.                   trans( vector( 0.5, 0.5, 0.0 ) ),
  285.           p2 );
  286. attrib( crv, "width", 0.02 );
  287. comp_crv = COMPOSE( srf, crv );
  288. attrib( comp_crv, "width", 0.02 );
  289.  
  290. All = list( Srf, comp_crv, crv )
  291.     * rotx( -50 ) * roty( -40 ) * rotz( -30 )
  292.         * scale( vector( 0.7, 0.7, 0.7 ) )
  293.     * trans( vector( -0.6, -0.3, 0.0 ) );
  294. view( All, on );
  295. save( "compose", All );
  296.  
  297. #############################################################################
  298. Cone1 = CONE( vector( 0, 0, 0 ), vector( 1, 1, 1 ), 1 );
  299. Cone2 = CON2( vector( 0, 0, -1 ), vector( 0, 0, 4 ), 2, 1 )
  300.     * scale( vector( 0.5, 0.5, 0.5 ) ) * rotx( -60 ) * roty( 5 );
  301. attrib( Cone1, "width", 0.02 );
  302. attrib( Cone2, "width", 0.02 );
  303.  
  304. All = list( Cone1 * trans( vector( -1.9, -0.4, 0.0 ) ),
  305.         Cone2 * trans( vector(  0.6, -0.5, 0.0 ) ) )
  306.     * scale( vector( 0.3, 0.3, 0.3 ) );
  307. view( All, on );
  308. save( "cones", All );
  309.  
  310. #############################################################################
  311. crv1 = cbezier( list( ctlpt( E2,  0.3,  0.0 ),
  312.                       ctlpt( E2,  0.0,  0.5 ),
  313.                       ctlpt( E2, -0.2,  0.0 ) ) );
  314. crv1a = crv1 * trans( vector( -0.4, 0.0, 0.0 ) );
  315. crv1b = crv1a * scale( vector( -1.0, 1.0, 1.0 ) );
  316. crvs = list( crv1a, crv1b );
  317. attrib( crvs, "width", 0.02 );
  318. color( crvs, red );
  319.  
  320. cm1 = nil();
  321. for ( i = 1, 1, 5,
  322.     snoc( cmorph( crv1a, crv1b, 0, i / 6.0 ), cm1 )
  323. );
  324. attrib( cm1, "width", 0.01 );
  325. color( cm1, yellow );
  326. All1 = list( crvs, cm1 );
  327.  
  328. cm2aux = cmorph( crv1a, crv1b, 2, 0.01 ); # 121 curves
  329. cm2 = list( nth( cm2aux,  12 ),
  330.         nth( cm2aux,  30 ),
  331.         nth( cm2aux,  49 ),
  332.         nth( cm2aux,  70 ),
  333.         nth( cm2aux,   85 ) );
  334. attrib( cm2, "width", 0.01 );
  335. All2 = list( crvs, cm2 );
  336.  
  337. All = list( All1 * sc( 0.7 ) * tx( - 0.5 ), All2 * sc( 0.7 ) * tx( 0.5 ) );
  338. view( All, on );
  339. save( "cmorph", All );
  340.  
  341. #############################################################################
  342. Animal = cbspline( 3,
  343.     list( ctlpt( E2, -0.595962, 0.0864362 ),
  344.           ctlpt( E2, -0.568514, 0.0200271 ),
  345.           ctlpt( E2, -0.441777, -0.0737656 ),
  346.           ctlpt( E2, -0.270007, -0.0568941 ),
  347.           ctlpt( E2, -0.121934, 0.000755916 ),
  348.           ctlpt( E2, 0.036764, 0.0478527 ),
  349.           ctlpt( E2, 0.204987, 0.0464348 ),
  350.           ctlpt( E2, 0.377392, 0.0333501 ),
  351.           ctlpt( E2, 0.531846, 0.0866489 ),
  352.           ctlpt( E2, 0.616283, 0.241468 ),
  353.           ctlpt( E2, 0.699134, 0.377015 ),
  354.           ctlpt( E2, 0.778686, 0.517436 ),
  355.           ctlpt( E2, 0.963123, 0.536075 ),
  356.           ctlpt( E2, 0.990621, 0.357959 ),
  357.           ctlpt( E2, 0.789682, 0.404197 ),
  358.           ctlpt( E2, 0.769339, 0.200839 ),
  359.           ctlpt( E2, 0.656245, 0.0942741 ),
  360.           ctlpt( E2, 0.574709, -0.0322164 ),
  361.           ctlpt( E2, 0.539827, -0.195691 ),
  362.           ctlpt( E2, 0.532404, -0.372588 ),
  363.           ctlpt( E2, 0.542739, -0.516865 ),
  364.           ctlpt( E2, 0.471853, -0.736121 ),
  365.           ctlpt( E2, 0.421893, -0.580767 ),
  366.           ctlpt( E2, 0.429569, -0.426424 ),
  367.           ctlpt( E2, 0.449716, -0.197989 ),
  368.           ctlpt( E2, 0.350794, -0.222485 ),
  369.           ctlpt( E2, 0.337066, -0.430322 ),
  370.           ctlpt( E2, 0.356357, -0.604534 ),
  371.           ctlpt( E2, 0.295381, -0.71917 ),
  372.           ctlpt( E2, 0.276532, -0.47444 ),
  373.           ctlpt( E2, 0.293408, -0.323639 ),
  374.           ctlpt( E2, 0.267722, -0.163262 ),
  375.           ctlpt( E2, 0.0607484, -0.181326 ),
  376.           ctlpt( E2, -0.0694025, -0.236196 ),
  377.           ctlpt( E2, -0.065581, -0.433478 ),
  378.           ctlpt( E2, -0.057199, -0.596829 ),
  379.           ctlpt( E2, -0.16308, -0.743576 ),
  380.           ctlpt( E2, -0.176097, -0.510317 ),
  381.           ctlpt( E2, -0.140701, -0.387083 ),
  382.           ctlpt( E2, -0.117562, -0.164098 ),
  383.           ctlpt( E2, -0.220942, -0.335686 ),
  384.           ctlpt( E2, -0.203195, -0.495159 ),
  385.           ctlpt( E2, -0.240217, -0.682391 ),
  386.           ctlpt( E2, -0.271166, -0.466215 ),
  387.           ctlpt( E2, -0.218763, -0.324742 ),
  388.           ctlpt( E2, -0.212225, -0.137441 ),
  389.           ctlpt( E2, -0.40272, -0.162737 ),
  390.           ctlpt( E2, -0.534712, -0.0879198 ),
  391.           ctlpt( E2, -0.608031, 0.0537921 ),
  392.           ctlpt( E2, -0.598074, 0.134321 ) ),
  393.      list( KV_PERIODIC ) );
  394. MRCrv = CMULTIRES( Animal, false );
  395.  
  396. sum = nth( MRCrv, 1 );
  397. MRCrvs = list( sum * tx( 3.0 ) );
  398. for ( ( i = 2 ), 1, sizeof( MRCrv ),
  399.     sum = symbsum( sum, nth( MRCrv, i ) ):
  400.     snoc( sum * tx( ( 3 - i ) * 1.5 ), MRCrvs )
  401. );
  402.  
  403. All = MRCrvs * sc ( 0.25 );
  404. attrib( All, "width", 0.01 );
  405. view( All, on );
  406. save( "cmultres", All );
  407.  
  408. #############################################################################
  409. Crv = cbezier( list( ctlpt( E2, -0.7,  0.3 ),
  410.                      ctlpt( E2,  0.0,  1.0 ),
  411.                      ctlpt( E2,  0.7,  0.0 ) ) );
  412. Crv2 = CRAISE( Crv, 5 );
  413. attrib( Crv, "width", 0.01 );
  414. attrib( Crv2, "width", 0.02 );
  415.  
  416. All = list( Crv, Crv2 );
  417. view( All, on );
  418. save( "craise", All );
  419.  
  420. #############################################################################
  421. Crv = cbezier( list( ctlpt( E2, -0.7,  0.3 ),
  422.                      ctlpt( E2,  0.0,  1.0 ),
  423.                      ctlpt( E2,  0.7,  0.0 ) ) );
  424. Crv2 = CREFINE( Crv, FALSE, list( 0.25, 0.5, 0.75 ) );
  425. attrib( Crv, "width", 0.01 );
  426. attrib( Crv2, "width", 0.02 );
  427.  
  428. All = list( Crv, Crv2 );
  429. view( All, on );
  430. save( "crefine", All );
  431.  
  432. #############################################################################
  433. Crv = cbezier( list( ctlpt( E2, -0.7,  0.3 ),
  434.                      ctlpt( E2,  0.0,  1.0 ),
  435.                      ctlpt( E2,  0.7,  0.0 ) ) );
  436. SubCrv = CREGION( Crv, 0.3, 0.6 );
  437. attrib( Crv, "width", 0.01 );
  438. attrib( SubCrv, "width", 0.02 );
  439.  
  440. All = list( Crv, SubCrv * trans( vector( 0.0, 0.02, 0.0 ) ) );
  441. view( All, on );
  442. save( "cregion", All );
  443.  
  444. #############################################################################
  445. Crv = cbspline( 3,
  446.         list( ctlpt( E2,  0.5, -1.0 ),
  447.               ctlpt( E2, -1.5, -0.5 ),
  448.               ctlpt( E2,  1.5,  0.0 ),
  449.               ctlpt( E2, -0.5,  1.0 ) ),
  450.         list( KV_OPEN ) );
  451. attrib( Crv, "width", 0.02 );
  452.  
  453. Pnt = point( 0, 0, 0 );
  454. Param1 = CRVPTDST( Crv, Pnt, FALSE, -0.0001 ); 
  455. Pt1lst = nil();
  456. for ( i = 1, 1, sizeof( Param1 ),
  457.     pt = coerce( ceval( crv, nth( Param1, i ) ), vector_type ):
  458.     snoc( pt, Pt1lst )
  459.     );
  460. All1 = list( Crv, Pnt, Pt1lst ) * scale( vector( 0.3, 0.3, 0.3 ) );
  461. view( All1, on );
  462.  
  463. line_pt = point( -1, 1.2, 0 );
  464. line_vec = vector( 1, -1, 0 );
  465. line_pt2 = line_pt + ( line_vec * 2 );
  466. Line = poly( list( line_pt, line_pt2 ), true );
  467. attrib( line, "width", 0.01 );
  468. Param2 = CRVLNDST( Crv, line_pt, line_vec, FALSE, -0.001 );
  469. Pt2lst = nil();
  470. for ( i = 1, 1, sizeof( Param2 ),
  471.     pt = ceval( crv, nth( Param2, i ) ):
  472.     snoc( pt, Pt2lst )
  473.     );
  474. All2 = list( Crv, Line, Pt2lst ) * scale( vector( 0.3, 0.3, 0.3 ) );
  475. view( All2, on );
  476.  
  477. save( "crvptdst", All1 );
  478. save( "crvlndst", All2 );
  479.  
  480. #############################################################################
  481. c1 = cbspline( 3,
  482.            list( ctlpt( E3, 0.0, 0.0, 0.0 ),
  483.              ctlpt( E3, 1.0, 0.0, 0.0 ),
  484.              ctlpt( E3, 1.0, 1.0, 0.0 ) ),
  485.            list( KV_OPEN ) );
  486. c2 = cbspline( 3,
  487.            list( ctlpt( E3, 0.0, 0.0, 1.0 ),
  488.              ctlpt( E3, 1.0, 0.0, 1.0 ),
  489.              ctlpt( E3, 1.0, 2.0, 1.0 ) ),
  490.            list( KV_OPEN ) );
  491. c3 = cbspline( 3,
  492.            list( ctlpt( E3, 0.0, 0.0, 1.5 ),
  493.              ctlpt( E3, 2.0, 0.0, 1.5 ),
  494.              ctlpt( E3, 1.0, 0.5, 1.5 ),
  495.              ctlpt( E3, 1.0, 1.0, 1.5 ) ),
  496.            list( KV_OPEN ) );
  497. c4 = cbspline( 3,
  498.            list( ctlpt( E3, 0.0, 0.0, 2.5 ),
  499.              ctlpt( E3, 1.0, 0.0, 2.5 ),
  500.              ctlpt( E3, 1.0, 1.0, 2.5 ) ),
  501.            list( KV_OPEN ) );
  502. s = sfromcrvs( list( c1, c2, c3, c4 ), 3 );
  503. attrib( s, "width", 0.005 );
  504.  
  505. Crv = CSURFACE( s, COL, 0.45 );
  506. attrib( Crv, "width", 0.02 );
  507.  
  508. All = list( s, Crv ) * roty( 50 ) * rotx( 33 )
  509.     * scale( vector( 0.3, 0.3, 0.3 ) )
  510.     * trans( vector( -0.4, -0.3, 0.0 ) );
  511. view( All, on );
  512. save( "csurface", All );
  513.  
  514. #############################################################################
  515. spts = list( list( ctlpt( E3, 0.1, 0.0, 1.0 ),
  516.                    ctlpt( E3, 0.3, 1.0, 0.0 ),
  517.                    ctlpt( E3, 0.0, 2.0, 1.0 ) ),
  518.              list( ctlpt( E3, 1.1, 0.0, 0.0 ),
  519.                    ctlpt( E3, 1.3, 1.5, 2.0 ),
  520.                    ctlpt( E3, 1.0, 2.1, 0.0 ) ),
  521.              list( ctlpt( E3, 2.1, 0.0, 2.0 ),
  522.                    ctlpt( E3, 2.3, 1.0, 0.0 ),
  523.                    ctlpt( E3, 2.0, 2.0, 2.0 ) ),
  524.              list( ctlpt( E3, 3.1, 0.0, 0.0 ),
  525.                    ctlpt( E3, 3.3, 1.5, 2.0 ),
  526.                    ctlpt( E3, 3.0, 2.1, 0.0 ) ),
  527.              list( ctlpt( E3, 4.1, 0.0, 1.0 ),
  528.                    ctlpt( E3, 4.3, 1.0, 0.0 ),
  529.                    ctlpt( E3, 4.0, 2.0, 1.0 ) ) );
  530. sb2 = sbspline( 3, 3, spts, list( list( KV_OPEN ), list( KV_OPEN ) ) );
  531.  
  532. tcrv1 = cbspline( 2,
  533.                   list( ctlpt( E2, 0.3, 0.3 ),
  534.                         ctlpt( E2, 0.7, 0.3 ),
  535.                         ctlpt( E2, 0.7, 0.7 ),
  536.                         ctlpt( E2, 0.3, 0.7 ),
  537.                         ctlpt( E2, 0.3, 0.3 ) ),
  538.                   list( KV_OPEN ) );
  539. tcrv2 = circle( vector( 0.5, 0.5, 0.0 ), 0.25 );
  540. tcrv3 = cbspline( 3,
  541.                   list( ctlpt( E2, 0.3, 0.3 ),
  542.                         ctlpt( E2, 0.7, 0.3 ),
  543.                         ctlpt( E2, 0.7, 0.7 ),
  544.                         ctlpt( E2, 0.3, 0.7 ) ),
  545.                   list( KV_PERIODIC ) );
  546.  
  547. crvs = list( tcrv1, tcrv2 * ty( 1 ), tcrv3 * ty( 2 ) );
  548. tsrf = trimsrf( sb2, crvs, false );
  549.  
  550. CrvParam = CTRIMSRF( tsrf, true );
  551. CrvEuclid = CTRIMSRF( tsrf, false );
  552. attrib( CrvParam, "width", 0.02 );
  553. attrib( CrvEuclid, "width", 0.02 );
  554.  
  555. Tr = rotz( 70 ) * rotx( 30 ) * sc( 0.25 );
  556.  
  557. All = list( tsrf * Tr * trans( vector( -0.5, -0.5, 0.0 ) ),
  558.         CrvEuclid * Tr * trans( vector( 0.15, -0.5, 0.0 ) ),
  559.         Crvparam * sc( 0.3 ) * trans( vector( 0.55, -0.5, 0.0 ) ) );
  560. view( All, on );
  561. save( "ctrimsrf", All );
  562.  
  563. #############################################################################
  564. Cylinder1 = CYLIN( vector( 0, 0, 0 ), vector( 1, 0, 0 ), 10 );
  565. attrib( Cylinder1, "width", 0.02 );
  566.  
  567. All = list( Cylinder1 * scale( vector( 0.05, 0.05, 0.05 ) ),
  568.         axes * scale( vector( 0.25, 0.25, 0.25 ) ) )
  569.     * rotx( 16 ) * roty( 15 ) * rotz( 90 )
  570.     * trans( vector( -0.0, -0.4, 0.0 ) );
  571. view( All, on );
  572. save( "cylinder", All );
  573.  
  574. #############################################################################
  575. Crv = cbspline( 3,
  576.         list( ctlpt( E2,  0.5, -1.0 ),
  577.               ctlpt( E2, -1.5, -0.5 ),
  578.               ctlpt( E2,  1.5,  0.0 ),
  579.               ctlpt( E2, -0.5,  1.0 ) ),
  580.         list( KV_OPEN ) );
  581. attrib( Crv, "width", 0.015 );
  582.  
  583. xzeros = CZEROS( Crv, 0.0001, 1 );
  584. pt_xzeros = nil();
  585. pt = nil();
  586. for ( i = 1, 1, sizeof( xzeros ),
  587.        pt = ceval( Crv, nth( xzeros, i ) ):
  588.        snoc( pt, pt_xzeros )
  589.     );
  590.  
  591. xyaxis = list( ctlpt( E2, -1, 0 ) + ctlpt( E2, 1, 0 ),
  592.            ctlpt( E2, 0, -1 ) + ctlpt( E2, 0, 1 ) );
  593.  
  594. All = list( Crv, xyaxis, pt_xzeros ) * scale( vector( 0.5, 0.5, 0.5 ) );
  595.  
  596. view( All, on );
  597. save( "czeros", All );
  598.  
  599. #############################################################################
  600. Cross = cbspline( 3,
  601.                   list( ctlpt( E2, -0.018, 0.001 ),
  602.                         ctlpt( E2,  0.018, 0.001 ),
  603.                         ctlpt( E2,  0.019, 0.002 ),
  604.                         ctlpt( E2,  0.018, 0.004 ),
  605.                         ctlpt( E2, -0.018, 0.004 ),
  606.                         ctlpt( E2, -0.019, 0.001 ) ),
  607.                   list( KV_OPEN ) );
  608. Cross = Cross + -Cross * scale( vector( 1, -1, 1 ) );
  609. Cross = Cross * scale( vector( 1.6, 1.6, 1.6 ) );
  610. attrib( Cross, "width", 0.015 );
  611.  
  612. Napkin = EXTRUDE( Cross, vector( 0.02, 0.03, 0.2 ) );
  613. attrib( Napkin, "width", 0.003 );
  614.  
  615. All = list( Cross, Napkin ) * scale( vector( 10, 10, 10 ) );
  616. view( All, on );
  617. save( "extrude", All );
  618.  
  619. #############################################################################
  620. GB = GBOX(vector(0.0, -0.35, 0.63), vector(0.5, 0.0, 0.5),
  621.                                     vector(-0.5, 0.0, 0.5),
  622.                                     vector(0.0, 0.7, 0.0));
  623. attrib( GB, "width", 0.02 );
  624.  
  625. All = list( GB * scale( vector( 0.5, 0.5, 0.5 ) ),
  626.         axes * scale( vector( 0.25, 0.25, 0.25 ) ) )
  627.     * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  628.     * trans( vector( -0.0, -0.4, 0.0 ) );
  629. view( All, on );
  630. save( "gbox", All );
  631.  
  632. #############################################################################
  633. Vrtx1 = vector( -3, -2, -1 );
  634. Vrtx2 = vector( 3, -2, -1 );
  635. Vrtx3 = vector( 3, 2, -1 );
  636. Vrtx4 = vector( -3, 2, -1 );
  637. Poly1 = poly( list( Vrtx1, Vrtx2, Vrtx3, Vrtx4 ), false ); 
  638.  
  639. Vrtx1 = vector( -3, 2, 1 );
  640. Vrtx2 = vector( 3, 2, 1 );
  641. Vrtx3 = vector( 3, -2, 1 );
  642. Vrtx4 = vector( -3, -2, 1 );
  643. Poly2 = poly( list( Vrtx1, Vrtx2, Vrtx3, Vrtx4 ), false );
  644.  
  645. Vrtx1 = vector( -3, -2, 1 );
  646. Vrtx2 = vector( 3, -2, 1 );
  647. Vrtx3 = vector( 3, -2, -1 );
  648. Vrtx4 = vector( -3, -2, -1 );
  649. Poly3 = poly( list( Vrtx1, Vrtx2, Vrtx3, Vrtx4 ), false );
  650.  
  651. PolyObj = MERGEPOLY( list( Poly1, Poly2, Poly3 ) );
  652. attrib( PolyObj, "width", 0.01 );
  653.  
  654. All = PolyObj * scale( vector( 0.15, 0.15, 0.15 ) )
  655.           * rotx( -90 ) * roty( 40 ) * rotx( -30 );
  656. view( All, on );
  657. save( "mergpoly", All );
  658.  
  659. #############################################################################
  660. Crv = cbspline( 3,
  661.                 list( ctlpt( E2, 0.7, 0.0 ),
  662.                       ctlpt( E2, 0.7, 0.06 ),
  663.                       ctlpt( E2, 0.1, 0.1 ),
  664.                       ctlpt( E2, 0.1, 0.6 ),
  665.                       ctlpt( E2, 0.6, 0.6 ),
  666.                       ctlpt( E2, 0.8, 0.8 ),
  667.                       ctlpt( E2, 0.8, 1.4 ),
  668.                       ctlpt( E2, 0.6, 1.6 ) ),
  669.                 list( KV_OPEN ) );
  670. attrib( Crv, "width", 0.01 );
  671.  
  672. OffCrv = OFFSET( Crv, -0.4, 1.0, FALSE );
  673. attrib( OffCrv, "width", 0.02 );
  674. All = list( Crv, OffCrv ) * rotz( 90 )
  675.               * scale( vector( 0.7, 0.7, 0.7 ) )
  676.               * trans( vector( 0.4, -0.4, 0.0 ) );
  677. view( All, on );
  678. save( "coffset", All );
  679.  
  680. #############################################################################
  681. V1  = vector( 0.0, 0.0, 0.0 );
  682. V2  = vector( 0.3, 0.0, 0.0 );
  683. V3  = vector( 0.3, 0.0, 0.1 );
  684. V4  = vector( 0.2, 0.0, 0.1 );
  685. V5  = vector( 0.2, 0.0, 0.5 );
  686. V6  = vector( 0.3, 0.0, 0.5 );
  687. V7  = vector( 0.3, 0.0, 0.6 );
  688. V8  = vector( 0.0, 0.0, 0.6 );
  689. V9  = vector( 0.0, 0.0, 0.5 );
  690. V10 = vector( 0.1, 0.0, 0.5 );
  691. V11 = vector( 0.1, 0.0, 0.1 );
  692. V12 = vector( 0.0, 0.0, 0.1 );
  693. I = POLY( list( V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12 ),
  694.           FALSE ) * rotx( 90 );
  695. attrib( I, "width", 0.01 );
  696.  
  697. All = I * scale( vector( 0.85, 0.85, 0.85 ) );
  698.  
  699. view( All, on );
  700. save( "poly", All );
  701.  
  702. #############################################################################
  703. cross = cbspline( 3,
  704.                   list( ctlpt( E3, 0.7, 0.0, 0. ),
  705.                         ctlpt( E3, 0.7, 0.0, 0.06 ),
  706.                         ctlpt( E3, 0.1, 0.0, 0.1 ),
  707.                         ctlpt( E3, 0.1, 0.0, 0.6 ),
  708.                         ctlpt( E3, 0.6, 0.0, 0.6 ),
  709.                         ctlpt( E3, 0.8, 0.0, 0.8 ),
  710.                         ctlpt( E3, 0.8, 0.0, 1.4 ),
  711.                         ctlpt( E3, 0.6, 0.0, 1.6 ) ),
  712.                   list( KV_OPEN ) );
  713. wglass = surfrev( cross );
  714. attrib( wglass, "width", 0.02 );
  715. wgl_ruled = PRISA( wglass, 6, -0.1, COL, vector( 0, 0.25, 0.0 ) );
  716. attrib( wgl_ruled, "width", 0.01 );
  717. wgl_prisa = PRISA( wglass, 30, 0.1, COL, vector( 0, 0.25, 0.0 ) );
  718. attrib( wgl_prisa, "width", 0.001 );
  719.  
  720. All = list( wglass * scale( vector( 0.3, 0.3, 0.3 ) )
  721.            * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  722.            * trans( vector( -0.6, -0.3, 0.0 ) ),
  723.         wgl_ruled * scale( vector( 0.3, 0.3, 0.3 ) )
  724.               * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  725.               * trans( vector( -0.0, -0.3, 0.0 ) ),
  726.         wgl_prisa * scale( vector( 0.07, 0.07, 0.07 ) ) 
  727.               * trans( vector( 0.6, -0.45, 0.0 ) ) );
  728.  
  729. view( All, on );
  730. save( "prisa", All );
  731.  
  732. #############################################################################
  733. Circ = circle( vector( 0.0, 0.0, 0.0 ), 0.25 );
  734. Circ2 = Circ * trans( vector( 0.0, 0.0, 1.0 ) );
  735. attrib( Circ, "width", 0.02 );
  736. attrib( Circ2, "width", 0.02 );
  737.  
  738. Cyl = RULEDSRF( Circ, Circ2 );
  739. attrib( Cyl, "width", 0.005 );
  740.  
  741. All = list( Circ, Circ2, Cyl ) * scale( vector( 0.5, 0.5, 0.5 ) )
  742.                    * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  743.                    * trans( vector( 0.0, -0.35, 0.0 ) );
  744.  
  745. view( All, on );
  746. save( "ruledsrf", All );
  747.  
  748. #############################################################################
  749. BzrSrf = SBEZIER( list ( list( ctlpt( E3, 0.0, 0.0, 1.0 ),
  750.                                ctlpt( E3, 0.0, 1.0, 0.0 ),
  751.                                ctlpt( E3, 0.0, 2.0, 1.0 ) ),
  752.                          list( ctlpt( E3, 1.0, 0.0, 0.0 ),
  753.                                ctlpt( E3, 1.0, 1.0, 2.0 ),
  754.                                ctlpt( E3, 1.0, 2.0, 0.0 ) ),
  755.                          list( ctlpt( E3, 2.0, 0.0, 2.0 ),
  756.                                ctlpt( E3, 2.0, 1.0, 0.0 ),
  757.                                ctlpt( E3, 2.0, 2.0, 2.0 ) ),
  758.                          list( ctlpt( E3, 3.0, 0.0, 0.0 ),
  759.                                ctlpt( E3, 3.0, 1.0, 2.0 ),
  760.                                ctlpt( E3, 3.0, 2.0, 0.0 ) ),
  761.                          list( ctlpt( E3, 4.0, 0.0, 1.0 ),
  762.                                ctlpt( E3, 4.0, 1.0, 0.0 ),
  763.                                ctlpt( E3, 4.0, 2.0, 1.0 ) ) ) );
  764.  
  765. Mesh = list ( list( ctlpt( E3, 0.0, 0.0, 1.0 ),
  766.                     ctlpt( E3, 0.0, 1.0, 0.0 ),
  767.                     ctlpt( E3, 0.0, 2.0, 1.0 ) ),
  768.               list( ctlpt( E3, 1.0, 0.0, 0.0 ),
  769.                     ctlpt( E3, 1.0, 1.0, 2.0 ),
  770.                     ctlpt( E3, 1.0, 2.0, 0.0 ) ),
  771.               list( ctlpt( E3, 2.0, 0.0, 2.0 ),
  772.                     ctlpt( E3, 2.0, 1.0, 0.0 ),
  773.                     ctlpt( E3, 2.0, 2.0, 2.0 ) ),
  774.               list( ctlpt( E3, 3.0, 0.0, 0.0 ),
  775.                     ctlpt( E3, 3.0, 1.0, 2.0 ),
  776.                     ctlpt( E3, 3.0, 2.0, 0.0 ) ),
  777.               list( ctlpt( E3, 4.0, 0.0, 1.0 ),
  778.                     ctlpt( E3, 4.0, 1.0, 0.0 ),
  779.                     ctlpt( E3, 4.0, 2.0, 1.0 ) ) );
  780. BspSrf = SBSPLINE( 3, 3, Mesh, list( list( KV_OPEN ),
  781.                                      list( 3, 3, 3, 4, 5, 6, 6, 6 ) ) );
  782.  
  783. All = list( BzrSrf * scale( vector( 0.2, 0.2, 0.2 ) )
  784.            * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  785.            * trans( vector( -0.5, -0.35, 0.0 ) ),
  786.         BspSrf * scale( vector( 0.2, 0.2, 0.2 ) )
  787.            * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  788.            * trans( vector( 0.4, -0.35, 0.0 ) ) );
  789. attrib( All, "width", 0.01 );
  790.  
  791. view( All, on );
  792. save( "surface", All );
  793.  
  794. #############################################################################
  795. cross = cbspline( 3,
  796.                   list( ctlpt( E2,  0.0,  0.0 ),
  797.                         ctlpt( E2,  0.8,  0.0 ),
  798.                         ctlpt( E2,  0.8,  0.2 ),
  799.                         ctlpt( E2,  0.07, 1.4 ),
  800.                         ctlpt( E2, -0.07, 1.4 ),
  801.                         ctlpt( E2, -0.8,  0.2 ),
  802.                         ctlpt( E2, -0.8,  0.0 ),
  803.                         ctlpt( E2,  0.0,  0.0 ) ),
  804.                   list( KV_OPEN ) );
  805. s = sFromCrvs( list( cross,
  806.                      cross * trans( vector( 0.5, 0, 1 ) ),
  807.                      cross * trans( vector( 0, 0, 2 ) ) ), 3 );
  808. attrib( s, "width", 0.01 );
  809.  
  810. UCrvtrZXY = scrvtr( s, E3, row );
  811. VCrvtrZXY = scrvtr( s, E3, col );
  812. UCrvtrXYZ = UCrvtrZXY * rotx( -90 ) * roty( -90 ) * scale( vector( 1, 1, 10 ) );
  813. VCrvtrXYZ = VCrvtrZXY * rotx( -90 ) * roty( -90 ) * scale( vector( 1, 1, 0.001 ) );
  814.  
  815. CrvtrZXY = scrvtr( s, E3, off );
  816. CrvtrXYZ = CrvtrZXY * rotx( -90 ) * roty( -90 ) * scale( vector( 1, 1, 0.001 ) );
  817.  
  818. All = list( s * scale( vector( 0.2, 0.2, 0.2 ) )
  819.           * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  820.           * trans( vector( -0.7, -0.45, 0.0 ) ),
  821.         UCrvtrXYZ
  822.           * scale( vector( 0.1, 0.1, 0.1 ) )
  823.           * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  824.           * trans( vector( -0.45, -0.35, 0.0 ) ),
  825.         VCrvtrXYZ
  826.           * scale( vector( 0.1, 0.1, 0.1 ) )
  827.           * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  828.           * trans( vector( 0.05, -0.35, 0.0 ) ),
  829.         CrvtrXYZ
  830.           * scale( vector( 0.1, 0.1, 0.1 ) )
  831.           * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  832.           * trans( vector( 0.53, -0.35, 0.0 ) ) );
  833.  
  834. view( All, on );
  835. save( "scrvtr", All );
  836.  
  837. #############################################################################
  838. BzrSrf = SBEZIER( list ( list( ctlpt( E3, 0.0, 0.0, 1.0 ),
  839.                                ctlpt( E3, 0.0, 1.0, 0.0 ),
  840.                                ctlpt( E3, 0.0, 2.0, 1.0 ) ),
  841.                          list( ctlpt( E3, 1.0, 0.0, 0.0 ),
  842.                                ctlpt( E3, 1.0, 1.0, 2.0 ),
  843.                                ctlpt( E3, 1.0, 2.0, 0.0 ) ),
  844.                          list( ctlpt( E3, 3.0, 0.0, 0.0 ),
  845.                                ctlpt( E3, 3.0, 1.0, 2.0 ),
  846.                                ctlpt( E3, 3.0, 2.0, 0.0 ) ),
  847.                          list( ctlpt( E3, 4.0, 0.0, 1.0 ),
  848.                                ctlpt( E3, 4.0, 1.0, 0.0 ),
  849.                                ctlpt( E3, 4.0, 2.0, 1.0 ) ) ) );
  850. SrfLst = SDIVIDE( BzrSrf, ROW, 0.5 );
  851. Srf1 = nth( SrfLst, 1 );
  852. Srf2 = nth( SrfLst, 2 );
  853.  
  854. All = list( BzrSrf * scale( vector( 0.3, 0.3, 0.3 ) )
  855.                * trans( vector( 0.0, -0.35, 0.0 ) ),
  856.         Srf1 * scale( vector( 0.3, 0.3, 0.3 ) )
  857.              * trans( vector( -0.1, -0.35, 0.6 ) ),
  858.         Srf2 * scale( vector( 0.3, 0.3, 0.3 ) )
  859.              * trans( vector( 0.1, -0.35, 0.6 ) ) )
  860.              * rotx( -90 ) * roty( 10 ) * rotx( -30 )
  861.          * trans( vector( -0.5, -0.5, 0.0 ) );
  862. attrib( All, "width", 0.01 );
  863.  
  864. view( All, on );
  865. save( "sdivide", All );
  866.  
  867. ############################################################################
  868. Crv1 = cbspline( 3,
  869.                  list( ctlpt( E3, 0.0, 0.0, 0.0 ),
  870.                        ctlpt( E3, 1.0, 0.0, 0.0 ),
  871.                        ctlpt( E3, 1.0, 1.0, 0.0 ) ),
  872.                  list( KV_OPEN ) );
  873. Crv2 = Crv1 * trans( vector( 0.0, 0.0, 1.0 ) );
  874. Crv3 = Crv2 * trans( vector( 0.0, 1.0, 0.0 ) );
  875. attrib( Crv1, "width", 0.02 );
  876. attrib( Crv2, "width", 0.02 );
  877. attrib( Crv3, "width", 0.02 );
  878. Srf = SFROMCRVS( list( Crv1, Crv2, Crv3 ), 3 );
  879. attrib( Srf, "width", 0.005 );
  880.  
  881. All = list( Crv1, Crv2, Crv3, Srf )
  882.     * scale( vector( 0.6, 0.6, 0.6 ) )
  883.     * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  884.     * trans( vector( -0.2, -0.5, 0.0 ) );
  885. view( All, on );
  886. save( "sfromcrvs", All );
  887.  
  888. #############################################################################
  889. pl = nil();
  890. pll = nil();
  891. for ( x = -5, 1, 5,
  892.       pl = nil():
  893.       for ( y = -5, 1, 5,
  894.             snoc( point( x, y, sin( x * Pi / 2 ) * cos( y * Pi / 2 ) ),
  895.                   pl )
  896.       ):
  897.       snoc( pl, pll ) );
  898. s1 = sinterp( pll, 3, 3, 8, 8, PARAM_UNIFORM );
  899. s2 = sinterp( pll, 3, 3, 11, 11, PARAM_UNIFORM );
  900.  
  901. All = list( list( s1, pll )
  902.         * scale( vector( 0.07, 0.07, 0.07 ) )
  903.         * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  904.         * trans( vector( -0.5, -0.5, 0.0 ) ),
  905.         list( s2, pll )
  906.         * scale( vector( 0.07, 0.07, 0.07 ) )
  907.         * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  908.         * trans( vector( 0.5, -0.5, 0.0 ) ) );
  909. view( All, on );
  910. save( "sinterp", All );
  911.  
  912. #############################################################################
  913.  
  914. bcross = cbspline( 3,
  915.            list( ctlpt( E3,  0.0,  0.0, -0.71 ),
  916.                  ctlpt( E3,  0.2,  0.0, -0.72 ),
  917.                  ctlpt( E3,  0.25, 0.0, -0.7 ),
  918.                  ctlpt( E3,  0.25, 0.0, -0.1 ),
  919.                  ctlpt( E3,  0.2,  0.0, -0.05 ),
  920.                  ctlpt( E3,  0.15, 0.0,  0.0 ),
  921.                  ctlpt( E3,  0.1,  0.0,  0.6 ),
  922.              ctlpt( E3,  0.11, 0.0,  0.61 ),
  923.              ctlpt( E3,  0.12, 0.0,  0.61 ),
  924.              ctlpt( E3,  0.12, 0.0,  0.65 ),
  925.              ctlpt( E3,  0.09, 0.0,  0.65 ),
  926.              ctlpt( E3,  0.07, 0.0,  0.64 ),
  927.              ctlpt( E3,  0.10, 0.0, -0.05 ),
  928.              ctlpt( E3,  0.21, 0.0, -0.1 ),
  929.              ctlpt( E3,  0.21, 0.0, -0.64 ),
  930.              ctlpt( E3,  0.18, 0.0, -0.67),
  931.              ctlpt( E3,  0.0,  0.0, -0.66 ) ),
  932.            list( KV_OPEN ) );
  933. Srf2 = surfrev( bcross );
  934.  
  935. gcross = cbspline( 3,
  936.            list( ctlpt( E3, 0.001, 0.0, 0.02 ),
  937.                ctlpt( E3, 0.2,   0.0, 0.02 ),
  938.              ctlpt( E3, 0.22,  0.0, 0. ),
  939.              ctlpt( E3, 0.22,  0.0, 0.03 ),
  940.              ctlpt( E3, 0.03,  0.0, 0.03 ),
  941.              ctlpt( E3, 0.03,  0.0, 0.07 ),
  942.              ctlpt( E3, 0.04,  0.0, 0.3 ),
  943.              ctlpt( E3, 0.3,   0.0, 0.3 ),
  944.              ctlpt( E3, 0.4,   0.0, 0.4 ),
  945.              ctlpt( E3, 0.3,   0.0, 0.7 ),
  946.              ctlpt( E3, 0.28,  0.0, 0.7 ),
  947.              ctlpt( E3, 0.37,  0.0, 0.42 ),
  948.              ctlpt( E3, 0.31,  0.0, 0.32 ),
  949.              ctlpt( E3, 0.001, 0.0, 0.32 ) ),
  950.         list( KV_OPEN ) );
  951. Srf3 = surfrev( gcross * trans( vector( 0.0, 0.0, -0.45 ) ) *
  952.              scale( vector( 1.6, 1.6, 1.6 ) ) );
  953.  
  954. ffcompat( Srf2, Srf3 );
  955.  
  956. Msrf1 = SMORPH( Srf2, Srf3, 0.0 );
  957. Msrf2 = SMORPH( Srf2, Srf3, 0.2 );
  958. Msrf3 = SMORPH( Srf2, Srf3, 0.4 );
  959. Msrf4 = SMORPH( Srf2, Srf3, 0.6 );
  960. Msrf5 = SMORPH( Srf2, Srf3, 0.8 );
  961. Msrf6 = SMORPH( Srf2, Srf3, 1.0 );
  962.  
  963. All = list( Msrf1 * scale( vector( 0.25, 0.25, 0.25 ) )
  964.           * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  965.           * trans( vector( -0.8, -0.5, 0.0 ) ),
  966.         Msrf2 * scale( vector( 0.25, 0.25, 0.25 ) )
  967.           * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  968.           * trans( vector( -0.5, -0.5, 0.0 ) ),
  969.         Msrf3 * scale( vector( 0.25, 0.25, 0.25 ) )
  970.           * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  971.           * trans( vector( -0.2, -0.5, 0.0 ) ),
  972.         Msrf4 * scale( vector( 0.25, 0.25, 0.25 ) )
  973.           * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  974.           * trans( vector(  0.1, -0.5, 0.0 ) ),
  975.         Msrf5 * scale( vector( 0.25, 0.25, 0.25 ) )
  976.           * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  977.           * trans( vector(  0.4, -0.5, 0.0 ) ),
  978.         Msrf6 * scale( vector( 0.25, 0.25, 0.25 ) )
  979.           * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  980.           * trans( vector(  0.7, -0.5, 0.0 ) ) );
  981. attrib( All, "width", 0.01 );
  982.  
  983. view( All, on );
  984. save( "smorph", All );
  985.  
  986. #############################################################################
  987. s45 = sin( 45 * pi / 180 );
  988. halfcirc = cbspline( 3,
  989.              list( ctlpt( P3, 1.0,  0.0, 0.0,  1.0 ),
  990.                    ctlpt( P3, s45, -s45, 0.0,  s45 ),
  991.                    ctlpt( P3, 1.0, -1.0, 0.0,  0.0 ),
  992.                    ctlpt( P3, s45, -s45, 0.0, -s45 ),
  993.                ctlpt( P3, 1.0,  0.0, 0.0, -1.0 ) ),
  994.              list( 0, 0, 0, 1, 1, 2, 2, 2 ) );
  995. Srf = surfrev( halfcirc );
  996.  
  997. NrmlSrf = SNRMLSRF( Srf );
  998.  
  999. All = list( Srf * trans( vector( -2, 2.0, 0.0 ) ),
  1000.         NrmlSrf * trans( vector( 1.4, 0.0, 0.0 ) ) )
  1001.     * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  1002.       * scale( vector( 0.25, 0.25, 0.25 ) );
  1003. attrib( All, "width", 0.01 );
  1004.  
  1005. view( All, on );
  1006. save( "snrmlsrf", All );
  1007.  
  1008. #############################################################################
  1009. Srf = ruledSrf( cbezier( list( ctlpt( E3, -0.5, -0.5, 0.5 ),
  1010.                    ctlpt( E3,  0.0,  0.5, 0.0 ),
  1011.                                ctlpt( E3,  0.5, -0.5, 0.0 ) ) ),
  1012.                 cbezier( list( ctlpt( E3, -0.5,  0.5, 0.0 ),
  1013.                    ctlpt( E3,  0.0,  0.0, 0.0 ),
  1014.                                ctlpt( E3,  0.5,  0.5, 0.5 ) ) ) );
  1015. SubSrf = SREGION( Srf, ROW, 0.3, 0.6 );
  1016.  
  1017. All = list( Srf, SubSrf * trans( vector( 0.0, 0.0, 0.2 ) ) )
  1018.     * rotx( -90 ) * roty( 20 ) * rotx( -10 )
  1019.     * trans( vector( 0.0, -0.5, 0.0 ) );
  1020. attrib( All, "width", 0.01 );
  1021.  
  1022. view( All, on );
  1023. save( "sregion", All );
  1024.  
  1025. #############################################################################
  1026. TV1 = tbezier( list( list( list( ctlpt( E3, 0.1, 0.0, 0.8 ),
  1027.                                  ctlpt( E3, 0.2, 0.1, 2.4 ) ),
  1028.                            list( ctlpt( E3, 0.3, 2.2, 0.2 ),
  1029.                                  ctlpt( E3, 0.4, 2.3, 2.0 ) ) ),
  1030.                      list( list( ctlpt( E3, 2.4, 0.8, 0.1 ),
  1031.                                  ctlpt( E3, 2.2, 0.7, 2.3 ) ),
  1032.                            list( ctlpt( E3, 2.3, 2.6, 0.5 ),
  1033.                                  ctlpt( E3, 2.1, 2.5, 2.7) ) ) ) );
  1034. Srf = STRIVAR( TV1, col, 0.4 ); 
  1035. attrib( Srf, "width", 0.015 );
  1036. color( Srf, red );
  1037.  
  1038. Tr = rotz( 70 ) * rotx( 30 ) * roty( 20 ) * sc( 0.2 );
  1039.  
  1040. All = list( TV1 * Tr * trans( vector( -0.6, -0.4, 0.0 ) ),
  1041.         list( Srf, TV1 ) * Tr * trans( vector( 0.0, -0.4, 0.0 ) ),
  1042.         Srf * Tr * trans( vector( 0.6, -0.4, 0.0 ) ) );
  1043.  
  1044. view( All, on );
  1045. save( "strivar", All );
  1046.  
  1047. #############################################################################
  1048. VTailAntn = SURFREV( ctlpt( E3, 0.001, 0.0, 1.0 ) +
  1049.                      ctlpt( E3, 0.01,  0.0, 1.0 ) +
  1050.                      ctlpt( E3, 0.01,  0.0, 0.8 ) +
  1051.                      ctlpt( E3, 0.03,  0.0, 0.7 ) +
  1052.                      ctlpt( E3, 0.03,  0.0, 0.3 ) +
  1053.                      ctlpt( E3, 0.001, 0.0, 0.0 ) );
  1054.  
  1055. All = VTailAntn
  1056.       * scale( vector( 2, 2, 2 ) )
  1057.     * roty( 45 ) * rotx( -30 )
  1058.     * trans( vector( -0.7, -0.7, 0.0 ) );
  1059. attrib( All, "width", 0.01 );
  1060.  
  1061. view( All, on );
  1062. save( "surfrev", All );
  1063.  
  1064. #############################################################################
  1065. Cross = arc( vector( 0.2, 0.0, 0.0 ),
  1066.              vector( 0.2, 0.2, 0.0 ),
  1067.              vector( 0.0, 0.2, 0.0 ) ) +
  1068.         arc( vector( 0.0, 0.4, 0.0 ),
  1069.              vector( 0.1, 0.4, 0.0 ),
  1070.              vector( 0.1, 0.5, 0.0 ) ) +
  1071.         arc( vector( 0.8, 0.5, 0.0 ),
  1072.              vector( 0.8, 0.3, 0.0 ),
  1073.              vector( 1.0, 0.3, 0.0 ) ) +
  1074.         arc( vector( 1.0, 0.1, 0.0 ),
  1075.              vector( 0.9, 0.1, 0.0 ),
  1076.              vector( 0.9, 0.0, 0.0 ) ) +
  1077.         ctlpt( E2, 0.2, 0.0 );
  1078. Axis = arc( vector( -1.0, 0.0, 0.0 ),
  1079.             vector(  0.0, 0.0, 0.1 ),
  1080.             vector(  1.0, 0.0, 0.0 ) );
  1081. Axis = crefine( Axis, FALSE, list( 0.25, 0.5, 0.75 ) );
  1082. Srf1 = SWEEPSRF( Cross, Axis, OFF );
  1083. Srf2 = SWEEPSRF( Cross, Axis, vector( 0.0, 1.0, 1.0 ) );
  1084. Srf3 = SWEEPSRF( Cross, Axis,
  1085.                  cbezier( list( ctlpt( E3,  1.0, 0.0, 0.0 ),
  1086.                                 ctlpt( E3,  0.0, 1.0, 0.0 ),
  1087.                                 ctlpt( E3, -1.0, 0.0, 0.0 ) ) ) );
  1088.  
  1089. All = list( Srf1 * rotx( -90 ) * roty( 20 ) * rotx( -10 )
  1090.          * trans( vector(-4.0, -0.5, 0.0 ) ),
  1091.         Srf2 * rotx( -90 ) * roty( 20 ) * rotx( -10 )
  1092.          * trans( vector( 0.5, -0.5, 0.0 ) ),
  1093.         Srf3 * rotx( -90 ) * roty( 20 ) * rotx( -10 )
  1094.          * trans( vector( 4.0, -0.5, 0.0 ) ) )
  1095.     * scale( vector( 0.15, 0.15, 0.15 ) );
  1096. attrib( All, "width", 0.01 );
  1097.    
  1098. view( All, on );
  1099. save( "sweepsrf", All );
  1100.  
  1101. #############################################################################
  1102. Cross = arc( vector( -0.11, -0.01, 0.0 ),
  1103.              vector( -0.1,  -0.1,  0.0 ),
  1104.              vector( -0.1,  -0.11, 0.0 ) ) +
  1105.         arc( vector(  0.1,  -0.11, 0.0 ),
  1106.              vector(  0.1,  -0.1,  0.0 ),
  1107.              vector(  0.11, -0.1,  0.0 ) ) +
  1108.         arc( vector(  0.11,  0.1,  0.0 ),
  1109.              vector(  0.1,   0.1,  0.0 ),
  1110.              vector(  0.1,   0.11, 0.0 ) ) +
  1111.         arc( vector( -0.1,   0.11, 0.0 ),
  1112.              vector( -0.1,   0.1,  0.0 ),
  1113.              vector( -0.11,  0.1,  0.0 ) ) +
  1114.         ctlpt( E2, -0.11, -0.1 );
  1115. scaleCrv = cbspline( 3,
  1116.                      list( ctlpt( E2, 0.05, 1.0 ),
  1117.                            ctlpt( E2, 0.1,  0.0 ),
  1118.                            ctlpt( E2, 0.2,  2.0 ),
  1119.                            ctlpt( E2, 0.3,  0.0 ),
  1120.                            ctlpt( E2, 0.4,  2.0 ),
  1121.                            ctlpt( E2, 0.5,  0.0 ),
  1122.                            ctlpt( E2, 0.6,  2.0 ),
  1123.                            ctlpt( E2, 0.7,  0.0 ),
  1124.                            ctlpt( E2, 0.8,  2.0 ),
  1125.                            ctlpt( E2, 0.85, 1.0 ) ),
  1126.                      list( KV_OPEN ) );
  1127. Axis = circle( vector( 0, 0, 0 ), 1 );
  1128. Frame = circle( vector( 0, 0, 0 ), 1 )
  1129.         * rotx( 90 ) * trans( vector( 1.5, 0.0, 0.0 ) );
  1130.  
  1131. Srf1 = SWPSCLSRF( Cross, Axis, scaleCrv, off, 0 );
  1132. Srf2 = SWPSCLSRF( Cross, Axis, scaleCrv, off, 2 );
  1133. Srf3 = SWPSCLSRF( Cross, Axis, 1.0, Frame, 0 );
  1134.  
  1135. All = list( Srf1 * rotx( -90 ) * roty( 20 ) * rotx( -30 )
  1136.          * trans( vector(-2.6, -1.7, 0.0 ) ),
  1137.         Srf2 * rotx( -90 ) * roty( 20 ) * rotx( 30 )
  1138.          * trans( vector( 0.0, -1.7, 0.0 ) ),
  1139.         Srf3 * rotx( -90 ) * roty( 20 ) * rotx( 30 )
  1140.          * trans( vector( 2.6, -1.7, 0.0 ) ) )
  1141.     * scale( vector( 0.25, 0.25, 0.25 ) );
  1142. attrib( All, "width", 0.003 );
  1143.    
  1144. view( All, on );
  1145. save( "swpsclsrf", All );
  1146.  
  1147. #############################################################################
  1148. TV1 = TBEZIER( list( list( list( ctlpt( E3, 0.1, 0.1, 0.0 ),
  1149.                                 ctlpt( E3, 0.2, 0.5, 1.1 ),
  1150.                                 ctlpt( E3, 0.3, 0.1, 2.2 ) ),
  1151.                           list( ctlpt( E3, 0.4, 1.3, 0.5 ),
  1152.                                 ctlpt( E3, 0.5, 1.7, 1.7 ),
  1153.                                 ctlpt( E3, 0.6, 1.3, 2.9 ) ),
  1154.                           list( ctlpt( E3, 0.7, 2.4, 0.5 ),
  1155.                                 ctlpt( E3, 0.8, 2.6, 1.4 ),
  1156.                                 ctlpt( E3, 0.9, 2.8, 2.3 ) ) ),
  1157.                     list( list( ctlpt( E3, 1.1, 0.1, 0.5 ),
  1158.                                 ctlpt( E3, 1.3, 0.2, 1.7 ),
  1159.                                 ctlpt( E3, 1.5, 0.3, 2.9 ) ),
  1160.                           list( ctlpt( E3, 1.7, 1.2, 0.0 ),
  1161.                                 ctlpt( E3, 1.9, 1.4, 1.2 ),
  1162.                                 ctlpt( E3, 1.2, 1.6, 2.4 ) ),
  1163.                           list( ctlpt( E3, 1.4, 2.3, 0.9 ),
  1164.                                 ctlpt( E3, 1.6, 2.5, 1.7 ),
  1165.                                 ctlpt( E3, 1.8, 2.7, 2.5 ) ) ) ) );
  1166.  
  1167. TV2 = TBSPLINE( 2, 2, 2,
  1168.                list( list( list( ctlpt( E3, 0.1, 0.1, 0.0 ),
  1169.                                  ctlpt( E3, 0.2, 0.5, 1.1 ),
  1170.                                  ctlpt( E3, 0.3, 0.1, 2.2 ) ),
  1171.                            list( ctlpt( E3, 0.4, 1.3, 0.5 ),
  1172.                                  ctlpt( E3, 0.5, 1.7, 1.7 ),
  1173.                                  ctlpt( E3, 0.6, 1.3, 2.9 ) ),
  1174.                            list( ctlpt( E3, 0.7, 2.4, 0.5 ),
  1175.                                  ctlpt( E3, 0.8, 2.6, 1.4 ),
  1176.                                  ctlpt( E3, 0.9, 2.8, 2.3 ) ) ),
  1177.                      list( list( ctlpt( E3, 1.1, 0.1, 0.5 ),
  1178.                                  ctlpt( E3, 1.3, 0.2, 1.7 ),
  1179.                                  ctlpt( E3, 1.5, 0.3, 2.9 ) ),
  1180.                            list( ctlpt( E3, 1.7, 1.2, 0.0 ),
  1181.                                  ctlpt( E3, 1.9, 1.4, 1.2 ),
  1182.                                  ctlpt( E3, 1.2, 1.6, 2.4 ) ),
  1183.                            list( ctlpt( E3, 1.4, 2.3, 0.9 ),
  1184.                                  ctlpt( E3, 1.6, 2.5, 1.7 ),
  1185.                                  ctlpt( E3, 1.8, 2.7, 2.5 ) ) ) ),
  1186.                list( list( KV_OPEN ),
  1187.                      list( KV_OPEN ),
  1188.                      list( KV_OPEN ) ) );
  1189. attrib( TV1, "width", 0.012 );
  1190. attrib( TV2, "width", 0.012 );
  1191.  
  1192. Tr = rotx( 30 ) * roty( 30 ) * sc( 0.3 );
  1193.  
  1194. All = list( TV1 * Tr * trans( vector( -0.9, -0.5, 0.0 ) ),
  1195.         TV2 * Tr * trans( vector(  0.0, -0.5, 0.0 ) ) );
  1196. view( All, on );
  1197. save( "tbezier", All );
  1198.  
  1199. #############################################################################
  1200. TV2 = tbspline( 3, 3, 2,
  1201.                 list( list( list( ctlpt( E3, 0.1, 0.1, 0.0 ),
  1202.                                   ctlpt( E3, 0.2, 0.5, 1.1 ),
  1203.                                   ctlpt( E3, 0.3, 0.1, 2.2 ) ),
  1204.                             list( ctlpt( E3, 0.4, 1.3, 0.5 ),
  1205.                                   ctlpt( E3, 0.5, 1.7, 1.7 ),
  1206.                                   ctlpt( E3, 0.6, 1.3, 2.9 ) ),
  1207.                             list( ctlpt( E3, 0.7, 2.4, 0.5 ),
  1208.                                   ctlpt( E3, 0.8, 2.6, 1.4 ),
  1209.                                   ctlpt( E3, 0.9, 2.8, 2.3 ) ) ),
  1210.                       list( list( ctlpt( E3, 1.1, 0.1, 0.5 ),
  1211.                                   ctlpt( E3, 1.3, 0.2, 1.7 ),
  1212.                                   ctlpt( E3, 1.5, 0.3, 2.9 ) ),
  1213.                             list( ctlpt( E3, 1.7, 1.2, 0.0 ),
  1214.                                   ctlpt( E3, 1.9, 1.4, 1.2 ),
  1215.                                   ctlpt( E3, 1.2, 1.6, 2.4 ) ),
  1216.                             list( ctlpt( E3, 1.4, 2.3, 0.9 ),
  1217.                                   ctlpt( E3, 1.6, 2.5, 1.7 ),
  1218.                                   ctlpt( E3, 1.8, 2.7, 2.5 ) ) ),
  1219.                       list( list( ctlpt( E3, 2.8, 0.1, 0.4 ),
  1220.                                   ctlpt( E3, 2.6, 0.7, 1.3 ),
  1221.                                   ctlpt( E3, 2.4, 0.2, 2.2 ) ),
  1222.                             list( ctlpt( E3, 2.2, 1.1, 0.4 ),
  1223.                                   ctlpt( E3, 2.9, 1.2, 1.5 ),
  1224.                                   ctlpt( E3, 2.7, 1.3, 2.6 ) ),
  1225.                             list( ctlpt( E3, 2.5, 2.9, 0.7 ),
  1226.                                   ctlpt( E3, 2.3, 2.8, 1.7 ),
  1227.                                   ctlpt( E3, 2.1, 2.7, 2.7 ) ) ) ),
  1228.                 list( list( KV_OPEN ),
  1229.                       list( KV_OPEN ),
  1230.                       list( KV_OPEN ) ) );
  1231. color( TV2, green );
  1232. attrib( TV2, "width", 0.012 );
  1233.  
  1234. TvDiv = TDIVIDE( Tv2, depth, 0.8 );
  1235. Tv2a = nth( TvDiv, 1 ) * tx( -2.6 );
  1236. Tv2b = nth( TvDiv, 2 ) * tx( 2.8 );
  1237. color( Tv2a, yellow );
  1238. color( Tv2b, yellow );
  1239. attrib( Tv2a, "width", 0.012 );
  1240. attrib( Tv2b, "width", 0.012 );
  1241.  
  1242. All = list( TV2, Tv2a, Tv2b ) *
  1243.       rotx( 35 ) * roty( 20 ) * sc( 0.2 ) * trans( vector( -0.4, -0.5, 0.0 ) );
  1244. view( All, on );
  1245. save( "tdivide", All );
  1246.  
  1247. #############################################################################
  1248. Tv1 = tbezier( list( list( list( ctlpt( E3, 0.1, 0.0, 0.8 ),
  1249.                                  ctlpt( E3, 0.2, 0.1, 2.4 ) ),
  1250.                            list( ctlpt( E3, 0.3, 2.2, 0.2 ),
  1251.                                  ctlpt( E3, 0.4, 2.3, 2.0 ) ) ),
  1252.                      list( list( ctlpt( E3, 2.4, 0.8, 0.1 ),
  1253.                                  ctlpt( E3, 2.2, 0.7, 2.3 ) ),
  1254.                            list( ctlpt( E3, 2.3, 2.6, 0.5 ),
  1255.                                  ctlpt( E3, 2.1, 2.5, 2.7) ) ) ) );
  1256. color( Tv1, green );
  1257. attrib( Tv1, "width", 0.001 );
  1258.  
  1259. Tv1r1 = TREGION( Tv1, row, 0.1, 0.2 );
  1260. Tv1r2 = TREGION( Tv1, row, 0.4, 0.6 );
  1261. Tv1r3 = TREGION( Tv1, row, 0.99, 1.0 );
  1262. color( Tv1r1, red );
  1263. attrib( Tv1r1, "width", 0.012 );
  1264. color( Tv1r2, red );
  1265. attrib( Tv1r2, "width", 0.012 );
  1266. color( Tv1r3, red );
  1267. attrib( Tv1r3, "width", 0.012 );
  1268.  
  1269. Tvs1 = list( Tv1, Tv1r1, Tv1r2, Tv1r3 );
  1270. Tvs2 = list( Tv1r1, Tv1r2, Tv1r3 );
  1271.  
  1272. Tr = rotx( 30 ) * roty( 30 ) * sc( 0.3 );
  1273.  
  1274. All = list( Tvs1 * Tr * trans( vector( -1.1, -0.5, 0.0 ) ),
  1275.             Tvs2 * Tr * trans( vector( -0.1, -0.5, 0.0 ) ) );
  1276.  
  1277. view( All, on );
  1278. save( "tregion", All );
  1279.  
  1280. #############################################################################
  1281. spts = list( list( ctlpt( E3, 0.1, 0.0, 1.0 ),
  1282.                    ctlpt( E3, 0.3, 1.0, 0.0 ),
  1283.                    ctlpt( E3, 0.0, 2.0, 1.0 ) ),
  1284.              list( ctlpt( E3, 1.1, 0.0, 0.0 ),
  1285.                    ctlpt( E3, 1.3, 1.5, 2.0 ),
  1286.                    ctlpt( E3, 1.0, 2.1, 0.0 ) ),
  1287.              list( ctlpt( E3, 2.1, 0.0, 2.0 ),
  1288.                    ctlpt( E3, 2.3, 1.0, 0.0 ),
  1289.                    ctlpt( E3, 2.0, 2.0, 2.0 ) ),
  1290.              list( ctlpt( E3, 3.1, 0.0, 0.0 ),
  1291.                    ctlpt( E3, 3.3, 1.5, 2.0 ),
  1292.                    ctlpt( E3, 3.0, 2.1, 0.0 ) ),
  1293.              list( ctlpt( E3, 4.1, 0.0, 1.0 ),
  1294.                    ctlpt( E3, 4.3, 1.0, 0.0 ),
  1295.                    ctlpt( E3, 4.0, 2.0, 1.0 ) ) );
  1296. sb = sbspline( 3, 3, spts, list( list( KV_OPEN ), list( KV_OPEN ) ) );
  1297. color( sb, red );
  1298. attrib( sb, "width", 0.001 );
  1299.  
  1300. TCrv1 = cbspline( 2,
  1301.                   list( ctlpt( E2, 0.3, 0.3 ),
  1302.                         ctlpt( E2, 0.7, 0.3 ),
  1303.                         ctlpt( E2, 0.7, 0.7 ),
  1304.                         ctlpt( E2, 0.3, 0.7 ),
  1305.                         ctlpt( E2, 0.3, 0.3 ) ),
  1306.                   list( KV_OPEN ) );
  1307. TCrv2 = circle( vector( 0.5, 0.5, 0.0 ), 0.25 );
  1308. TCrv3 = cbspline( 3,
  1309.                   list( ctlpt( E2, 0.3, 0.3 ),
  1310.                         ctlpt( E2, 0.7, 0.3 ),
  1311.                         ctlpt( E2, 0.7, 0.7 ),
  1312.                         ctlpt( E2, 0.3, 0.7 ) ),
  1313.                   list( KV_PERIODIC ) );
  1314.  
  1315. TSrf1 = TRIMSRF( sb, TCrv1, false );
  1316. TSrf2 = TRIMSRF( sb, TCrv1, true );
  1317. TSrf3 = TRIMSRF( sb, list( TCrv1, TcRv2 * ty( 1 ), TCrv3 * ty( 2 ) ),
  1318.                   false );
  1319. color( TSrf1, green );
  1320. attrib( TSrf1, "width", 0.012 );
  1321. color( TSrf2, green );
  1322. attrib( TSrf2, "width", 0.012 );
  1323. color( TSrf3, green );
  1324. attrib( TSrf3, "width", 0.012 );
  1325.  
  1326. Tr = rotz( 90 ) * rotx( 30 ) * roty( 30 ) * sc( 0.25 );
  1327.  
  1328. All = list( list( sb, TSrf1 ) * Tr * trans( vector( -0.6, -0.6, 0.0 ) ),
  1329.         list( sb, TSrf2 ) * Tr * trans( vector(  0.0, -0.6, 0.0 ) ),
  1330.         list( sb, TSrf3 ) * Tr * trans( vector(  0.6, -0.6, 0.0 ) ) );
  1331.  
  1332. view( All, on );
  1333. save( "trimsrf", All );
  1334.  
  1335. #############################################################################
  1336. resolution = 16;
  1337. T = TORUS( vector( 0.0, 0.0, 0.0), vector( 0.0, 0.0, 1.0), 0.5, 0.2 );
  1338. attrib( T, "width", 0.012 );
  1339.  
  1340. All = list( T * scale( vector( 0.75, 0.75, 0.75 ) ),
  1341.         axes * scale( vector( 0.25, 0.25, 0.25 ) ) )
  1342.     * rotx( -90 ) * roty( 40 ) * rotx( -30 )
  1343.     * trans( vector( -0.0, -0.4, 0.0 ) );
  1344. view( All, on );
  1345. save( "torus", All );
  1346.  
  1347. #############################################################################
  1348.  
  1349. resolution = 20;
  1350. B = box(vector(-1, -1, -0.25), 2, 1.2, 0.5);
  1351. C = con2(vector(0, 0, -1.5), vector(0, 0, 3), 0.7, 0.3);
  1352.  
  1353. D = convex(B - C);
  1354. E = convex(C - B);
  1355. F = convex(B + C);
  1356. G = convex(B * C);
  1357. attrib( D, "width", 0.015 );
  1358. attrib( E, "width", 0.015 );
  1359. attrib( F, "width", 0.015 );
  1360. attrib( G, "width", 0.015 );
  1361.  
  1362. tr = rotx( -90 ) * roty( 40 ) * rotx( -30 );
  1363.  
  1364. All = list( D * tr * trans( vector(  0.6,  0.5, 0.0 ) ),
  1365.         E * tr * trans( vector(  3.0,  0.0, 0.0 ) ),
  1366.         F * tr * trans( vector( -2.0,  0.0, 0.0 ) ),
  1367.         G * tr * trans( vector(  0.7, -1.0, 0.0 ) ) )
  1368.     * scale( vector( 0.25, 0.25, 0.25 ) )
  1369.     * trans( vector( -0.1, -0.3, 0.0 ) );
  1370. view( All, on );
  1371. view_mat = rotx( 0 );
  1372. save( "booleans", list( view_mat, All ) );
  1373.  
  1374. #############################################################################
  1375. #
  1376. # We are going to use these models for figures...
  1377. #
  1378. # We redefine pause so we will not puase...
  1379. #
  1380. pause = procedure():
  1381.     printf("Press return to continue:", nil());
  1382.  
  1383. include("../../scripts/solid1.irt");
  1384. include("../../scripts/solid2h.irt");
  1385. include("../../scripts/molecule.irt");
  1386. include("../../scripts/platonic.irt");
  1387.  
  1388. view_mat = save_mat_docs * roty( 5 ) * rotx( 10 )
  1389.        * scale( vector( 0.35, 0.35, 0.35 ) );
  1390. save("view1mat", list( view_mat ) );
  1391.  
  1392. view_mat = save_mat_docs * roty( 5 ) * rotx( 10 )
  1393.        * scale( vector( 0.8, 0.8, 0.8 ) );
  1394. save("view2mat", list( view_mat ) );
  1395.  
  1396. pause = procedure():t:
  1397.     printf("Press return to continue:", nil()):
  1398.     t = getline(string_type);
  1399.  
  1400. #############################################################################
  1401.  
  1402. exit();
  1403.