home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: Raytrace & Morphing / SOS-RAYTRACE.ISO / programm / scripts / pov / kidstuf1 / lego.inc < prev    next >
Encoding:
Text File  |  1994-03-24  |  26.1 KB  |  884 lines

  1. // Persistence of Vision RayTracer version 2.2 Scene description file
  2. // File: LEGO.INC
  3. // Description: Library file with parts of Lego¿
  4. // Date: 03/23/94
  5. // Author: Anton Raves
  6. //
  7.  
  8. // Declaration of the colors used by Lego¿
  9. // ---------------------------------------
  10. #declare Black_tex =
  11. texture {
  12.   pigment { color red 0 green 0 blue 0 }
  13.   finish { ambient .1 phong 1 phong_size 70 reflection .2 }
  14. }
  15.  
  16. #declare Green_tex =
  17. texture {
  18.   pigment { color red 0 green .6 blue 0 }
  19.   finish { ambient .1 phong 1 phong_size 70 reflection .2 }
  20. }
  21.  
  22. #declare Grey_tex =
  23. texture {
  24.   pigment { color red .7 green .7 blue .7 }
  25.   finish { ambient .1 phong 1 phong_size 70 reflection .2 }
  26. }
  27.  
  28. #declare Red_tex =
  29. texture {
  30.   pigment { color red 1 green 0 blue 0 }
  31.   finish { ambient .1 phong 1 phong_size 70 reflection .2 }
  32. }
  33.  
  34. #declare White_tex =
  35. texture {
  36.   pigment { color red 1 green 1 blue 1 }
  37.   finish { ambient .1 phong 1 phong_size 70 reflection .2 }
  38. }
  39.  
  40. #declare Yellow_tex =
  41. texture {
  42.   pigment {    color red 1 green 1 blue 0 }
  43.   finish { ambient .1 phong 1 phong_size 70 reflection .2 }
  44. }
  45.  
  46. #declare T_Cyan_tex =
  47. texture {
  48.   pigment { color red 0 green 1 blue 1 filter .95 }
  49.   finish { ambient .1 phong 1 phong_size 70 reflection .2 refraction .9 diffuse 0 }
  50. }
  51.  
  52. #declare T_Green_tex =
  53. texture {
  54.   pigment { color red 0 green 1 blue 0 filter .95 }
  55.   finish { ambient .1 phong 1 phong_size 70 reflection .2 refraction .9 diffuse 0 }
  56. }
  57.  
  58. #declare T_Red_tex =
  59. texture {
  60.   pigment { color red 1 green 0 blue 0 filter .95 } 
  61.   finish { ambient .1 phong 1 phong_size 70 reflection .2 refraction .9 diffuse 0 }
  62. }
  63.  
  64. #declare T_Yellow_tex =
  65. texture {
  66.   pigment {    color red 1 green 1 blue 0 filter .95 }
  67.   finish { ambient .1 phong 1 phong_size 70 reflection .2 refraction .9 diffuse 0 }
  68. }
  69.  
  70. // Declaration of regularly used parts
  71. // -----------------------------------
  72. #declare button =
  73. object {
  74.   cylinder { 3*y,  4.5*y, 2.25 }
  75.   bounded_by { cylinder { 2.5*y, 5*y, 2.5 } }
  76. }
  77.  
  78. #declare openbutton =
  79. object {
  80.   difference {
  81.     cylinder { 3*y, 4.5*y, 2.25 }
  82.     cylinder { 2.5*y, 5*y, 1.75 }
  83.   }
  84.   bounded_by { cylinder { 2.5*y, 5*y, 2.5 } }
  85. }
  86.  
  87. #declare opencylinder =
  88. object {
  89.   difference {
  90.     cylinder { 3*y, 10.5*y, 2.25 }
  91.     cylinder { 2*y, 11*y, 1.75 }
  92.   }
  93.   bounded_by { cylinder { 2*y, 11*y, 2.5 } }
  94. }
  95.  
  96. #declare Tor =
  97. object {
  98.   difference {
  99.     torus { 3, 1.5 rotate 90*x }
  100.     plane { y, 0 }
  101.     plane { x, 0 }
  102.   }
  103. }
  104.  
  105. #declare S_Blade =
  106. object {
  107.   union {
  108.     box { <-2.5, -2, -.6> <2.5, -13, .6> }
  109.     cylinder { -.6*z, .6*z, 2.5 translate <0, -13, 0> }
  110.   }
  111.   bounded_by { box { <-3, -16, -1> <3, -1, 1> } }
  112. }
  113.  
  114. #declare Ring =
  115. object {
  116.   difference {
  117.     cylinder { 0*y, 2*y, 3 }
  118.     cylinder { -1*y, 3*y, 2.25 }
  119.   }
  120.   bounded_by { cylinder { -.5*y, 2.5*y, 3.5 } }
  121. }
  122.  
  123. // Declaration of the different parts
  124. // ----------------------------------
  125. #declare H_Block1_1 =
  126. object {
  127.   difference {
  128.     union {
  129.       object { button translate <0, 6, 0> }
  130.       box { <-4, 0, -4> <4, 9, 4> }
  131.     }
  132.     box { <-2.5, -1, -2.5> <2.5, 8, 2.5> }
  133.     cylinder { 7*y, 10*y, 1.25 }
  134.   }
  135.   bounded_by { box { <-5, -1, -5> <5, 12, 5> } }
  136. }
  137.  
  138. #declare H_Block1_4 =
  139. object {
  140.   union {
  141.     difference {
  142.       union {
  143.         object { button translate <0, 6, 0> }
  144.         object { button translate <8, 6, 0> }
  145.         object { button translate <16, 6, 0> }
  146.         object { button translate <24, 6, 0> }
  147.         box { <-4, 0, -4> <28, 9, 4> }
  148.       }
  149.       box { <-2.5, -1, -2.5> <11.5, 8, 2.5> }
  150.       box { <12.5, -1, -2.5> <26.5, 8, 2.5> }
  151.       cylinder { 7*y, 10*y, 1.25 }
  152.       cylinder { 7*y, 10*y, 1.25 translate <8, 0, 0> }
  153.       cylinder { 7*y, 10*y, 1.25 translate <16, 0, 0> }
  154.       cylinder { 7*y, 10*y, 1.25 translate <24, 0, 0> }
  155.     }
  156.     cylinder { 0*y, 8*y, 1.5 translate <4, 0, 0> }
  157.     cylinder { 0*y, 8*y, 1.5 translate <12, 0, 0> }
  158.     cylinder { 0*y, 8*y, 1.5 translate <20, 0, 0> }
  159.   }
  160.   bounded_by { box { <-5, -1, -5> <29, 12, 5> } }
  161. }
  162.  
  163. #declare FSBlock1_2 =
  164. object {
  165.   union {
  166.     difference {
  167.       union {
  168.         object { openbutton translate <4, 0, 0> }
  169.         box { <-4, 0, -4> <12, 3, 4> }
  170.       }
  171.       box { <-2.5, -1, -2.5> <10.5, 2, 2.5> }
  172.     }
  173.     cylinder { 0*y, 2*y, 1.5 translate <4, 0, 0> }
  174.   }
  175.   bounded_by { box { <-5, -1, -5> <13, 5, 5> } }
  176. }
  177.  
  178. #declare FFBlock1_1 =
  179. object {
  180.   difference {
  181.     merge {
  182.       box { <-4, .5, -4> <4, 3, 4> }
  183.       box { <-3.5, 0, -3.5> <3.5, .5, 3.5> }
  184.     }
  185.     box { <-2.5, -1, -2.5> <2.5, 2, 2.5> }
  186.   }
  187.   bounded_by { box { <-5, -1, -5> <5, 4, 5> } }
  188. }
  189.  
  190. #declare FFBlock1_8 =
  191. object {
  192.   union {
  193.     difference {
  194.       union {
  195.         box { <-4, .5, -4> <60, 3, 4> }
  196.         box { <-3.5, 0, -3.5> <59.5, .5, 3.5> }
  197.       }
  198.       box { <-2.5, -1, -2.5> <58.5, 2, 2.5> }
  199.     }
  200.     cylinder { 0*y, 2*y, 1.5 translate <4, 0, 0> }
  201.     cylinder { 0*y, 2*y, 1.5 translate <12, 0, 0> }
  202.     cylinder { 0*y, 2*y, 1.5 translate <20, 0, 0> }
  203.     cylinder { 0*y, 2*y, 1.5 translate <28, 0, 0> }
  204.     cylinder { 0*y, 2*y, 1.5 translate <36, 0, 0> }
  205.     cylinder { 0*y, 2*y, 1.5 translate <44, 0, 0> }
  206.     cylinder { 0*y, 2*y, 1.5 translate <52, 0, 0> }
  207.   }
  208.   bounded_by { box { <-5, -1, -5> <61, 4, 5> } }
  209. }
  210.  
  211. #declare F_Block1_2 =
  212. object {
  213.   union {
  214.     difference {
  215.       union {
  216.         object { button }
  217.         object { button translate <8, 0, 0> }
  218.         box { <-4, 0, -4> <12, 3, 4> }
  219.       }
  220.       box { <-2.5, -1, -2.5> <10.5, 2, 2.5> }
  221.       cylinder { 1*y, 4*y, 1.25 }
  222.       cylinder { 1*y, 4*y, 1.25 translate <8, 0, 0> }
  223.     }
  224.     cylinder { 0*y, 2*y, 1.5 translate <4, 0, 0> }
  225.   }
  226.   bounded_by { box { <-5, -1, -5> <13, 5, 5> } }
  227. }
  228.  
  229. #declare F_Block1_3 =
  230. object {
  231.   union {
  232.     difference {
  233.       union {
  234.         object { button }
  235.         object { button translate <8, 0, 0> }
  236.         object { button translate <16, 0, 0> }
  237.         box { <-4, 0, -4> <20, 3, 4> }
  238.       }
  239.       box { <-2.5, -1, -2.5> <18.5, 2, 2.5> }
  240.       cylinder { 1*y, 4*y, 1.25 }
  241.       cylinder { 1*y, 4*y, 1.25 translate <8, 0, 0> }
  242.       cylinder { 1*y, 4*y, 1.25 translate <16, 0, 0> }
  243.     }
  244.     cylinder { 0*y, 2*y, 1.5 translate <4, 0, 0> }
  245.     cylinder { 0*y, 2*y, 1.5 translate <12, 0, 0> }
  246.   }
  247.   bounded_by { box { <-5, -1, -5> <21, 5, 5> } }
  248. }
  249.  
  250. #declare F_Block1_4 =
  251. object {
  252.   union {
  253.     difference {
  254.       union {
  255.         object { button }
  256.         object { button translate <8, 0, 0> }
  257.         object { button translate <16, 0, 0> }
  258.         object { button translate <24, 0, 0> }
  259.         box { <-4, 0, -4> <28, 3, 4> }
  260.       }
  261.       box { <-2.5, -1, -2.5> <26.5, 2, 2.5> }
  262.       cylinder { 1*y, 4*y, 1.25 }
  263.       cylinder { 1*y, 4*y, 1.25 translate <8, 0, 0> }
  264.       cylinder { 1*y, 4*y, 1.25 translate <16, 0, 0> }
  265.       cylinder { 1*y, 4*y, 1.25 translate <24, 0, 0> }
  266.     }
  267.     cylinder { 0*y, 2*y, 1.5 translate <4, 0, 0> }
  268.     cylinder { 0*y, 2*y, 1.5 translate <12, 0, 0> }
  269.     cylinder { 0*y, 2*y, 1.5 translate <20, 0, 0> }
  270.   }
  271.   bounded_by { box { <-5, -1, -5> <29, 5, 5> } }
  272. }
  273.  
  274. #declare F_Block1_6 =
  275. object {
  276.   union {
  277.     difference {
  278.       union {
  279.         object { button }
  280.         object { button translate <8, 0, 0> }
  281.         object { button translate <16, 0, 0> }
  282.         object { button translate <24, 0, 0> }
  283.         object { button translate <32, 0, 0> }
  284.         object { button translate <40, 0, 0> }
  285.         box { <-4, 0, -4> <44, 3, 4> }
  286.       }
  287.       box { <-2.5, -1, -2.5> <42.5, 2, 2.5> }
  288.       cylinder { 1*y, 4*y, 1.25 }
  289.       cylinder { 1*y, 4*y, 1.25 translate <8, 0, 0> }
  290.       cylinder { 1*y, 4*y, 1.25 translate <16, 0, 0> }
  291.       cylinder { 1*y, 4*y, 1.25 translate <24, 0, 0> }
  292.       cylinder { 1*y, 4*y, 1.25 translate <32, 0, 0> }
  293.       cylinder { 1*y, 4*y, 1.25 translate <40, 0, 0> }
  294.     }
  295.     cylinder { 0*y, 2*y, 1.5 translate <4, 0, 0> }
  296.     cylinder { 0*y, 2*y, 1.5 translate <12, 0, 0> }
  297.     cylinder { 0*y, 2*y, 1.5 translate <20, 0, 0> }
  298.     cylinder { 0*y, 2*y, 1.5 translate <28, 0, 0> }
  299.     cylinder { 0*y, 2*y, 1.5 translate <36, 0, 0> }
  300.   }
  301.   bounded_by { box { <-5, -1, -5> <45, 5, 5> } }
  302. }
  303.  
  304. #declare F_Block1_8 =
  305. object {
  306.   union {
  307.     difference {
  308.       union {
  309.         object { button }
  310.         object { button translate <8, 0, 0> }
  311.         object { button translate <16, 0, 0> }
  312.         object { button translate <24, 0, 0> }
  313.         object { button translate <32, 0, 0> }
  314.         object { button translate <40, 0, 0> }
  315.         object { button translate <48, 0, 0> }
  316.         object { button translate <56, 0, 0> }
  317.         box { <-4, 0, -4> <60, 3, 4> }
  318.       }
  319.       box { <-2.5, -1, -2.5> <58.5, 2, 2.5> }
  320.       cylinder { 1*y, 4*y, 1.25 }
  321.       cylinder { 1*y, 4*y, 1.25 translate <8, 0, 0> }
  322.       cylinder { 1*y, 4*y, 1.25 translate <16, 0, 0> }
  323.       cylinder { 1*y, 4*y, 1.25 translate <24, 0, 0> }
  324.       cylinder { 1*y, 4*y, 1.25 translate <32, 0, 0> }
  325.       cylinder { 1*y, 4*y, 1.25 translate <40, 0, 0> }
  326.       cylinder { 1*y, 4*y, 1.25 translate <48, 0, 0> }
  327.       cylinder { 1*y, 4*y, 1.25 translate <56, 0, 0> }
  328.     }
  329.     cylinder { 0*y, 2*y, 1.5 translate <4, 0, 0> }
  330.     cylinder { 0*y, 2*y, 1.5 translate <12, 0, 0> }
  331.     cylinder { 0*y, 2*y, 1.5 translate <20, 0, 0> }
  332.     cylinder { 0*y, 2*y, 1.5 translate <28, 0, 0> }
  333.     cylinder { 0*y, 2*y, 1.5 translate <36, 0, 0> }
  334.     cylinder { 0*y, 2*y, 1.5 translate <44, 0, 0> }
  335.     cylinder { 0*y, 2*y, 1.5 translate <52, 0, 0> }
  336.   }
  337.   bounded_by { box { <-5, -1, -5> <61, 5, 5> } }
  338. }
  339.  
  340. #declare F_Block2_4 =
  341. object {
  342.   union {
  343.     difference {
  344.       union {
  345.         object { button }
  346.         object { button translate <8, 0, 0> }
  347.         object { button translate <16, 0, 0> }
  348.         object { button translate <24, 0, 0> }
  349.         object { button translate <0, 0, 8> }
  350.         object { button translate <8, 0, 8> }
  351.         object { button translate <16, 0, 8> }
  352.         object { button translate <24, 0, 8> }
  353.         box { <-4, 0, -4> <28, 3, 12> }
  354.       }
  355.       box { <-2.5, -1, -2.5> <26.5, 2, 10.5> }
  356.       cylinder { 1*y, 4*y, 1.25 }
  357.       cylinder { 1*y, 4*y, 1.25 translate <8, 0, 0> }
  358.       cylinder { 1*y, 4*y, 1.25 translate <16, 0, 0> }
  359.       cylinder { 1*y, 4*y, 1.25 translate <24, 0, 0> }
  360.       cylinder { 1*y, 4*y, 1.25 translate <0, 0, 8> }
  361.       cylinder { 1*y, 4*y, 1.25 translate <8, 0, 8> }
  362.       cylinder { 1*y, 4*y, 1.25 translate <16, 0, 8> }
  363.       cylinder { 1*y, 4*y, 1.25 translate <24, 0, 8> }
  364.     }
  365.     object { Ring translate <4, 0, 4> }
  366.     object { Ring translate <12, 0, 4> }
  367.     object { Ring translate <20, 0, 4> }
  368.   }
  369.   bounded_by { box { <-5, -1, -5> <29, 5, 13> } }
  370. }
  371.  
  372. #declare F_Triangle2_2 =
  373. object {
  374.   union {
  375.     difference {
  376.       union {
  377.         object { button }
  378.         object { button translate <0, 0, 8> }
  379.         object { button translate <8, 0, 8> }
  380.         difference {
  381.           box { <-4, 0, -4> <12, 3, 12> }
  382.           box { <4, -1, -5> <13, 4, 4> }
  383.         }
  384.       }
  385.       box { <-2.5, -1, -2.5> <2.5, 2, 10.5> }
  386.       box { <2, -1, 5.5> <10.5, 2, 10.5> }
  387.       cylinder { 1*y, 4*y, 1.25 }
  388.       cylinder { 1*y, 4*y, 1.25 translate <0, 0, 8> }
  389.       cylinder { 1*y, 4*y, 1.25 translate <8, 0, 8> }
  390.     }
  391.     cylinder { 0*y, 2*y, 1.5 translate <0, 0, 4> }
  392.     cylinder { 0*y, 2*y, 1.5 translate <4, 0, 8> }
  393.   }
  394.   bounded_by { box { <-5, -1, -5> <13, 5, 13> } }
  395. }
  396.  
  397. #declare FRBlock1_1 =
  398. object {
  399.   difference {
  400.     merge {
  401.       object { button }
  402.       cylinder { 2*y, 3*y, 4 }
  403.       cylinder { 0*y, 2*y, 3 }
  404.     }
  405.     cylinder { -1*y, 2*y, 2.25 }
  406.     cylinder { 2*y, 4*y, 1.25 }
  407.   }
  408.   bounded_by { box { <-5, -1, -5> <5, 4, 5> } }
  409. }
  410.  
  411. #declare Slope1_3 =
  412. object {
  413.   union {
  414.     difference {
  415.       union {
  416.         object { button translate <16, 6, 0> }
  417.         difference {
  418.           box { <-4, 0, -4> <20, 9, 4> }
  419.           plane { y, 0 inverse rotate 24.25*z translate <4, 5.2, 0> }
  420.         }
  421.       }
  422.       box { <13.5, -1, -2.5> <18.5, 8, 2.5> }
  423.       box { <-2.5, -1, -2.5> <2.5, 2, 2.5> }
  424.       cylinder { 7*y, 10*y, 1.25 translate <16, 0, 0> }
  425.       difference {
  426.         box { <-2.5, -1, -2.5> <10.5, 8, 2.5> }
  427.         plane { y, 0 inverse rotate 24.25*z translate <4, 4.2, 0> }
  428.       }
  429.     }
  430.     box { <10.5, 0, -0.75> <12, 7, 0.75> }
  431.     difference {
  432.       cylinder { 0*y, 8*y, 1.5 translate <4, 0, 0> }
  433.       plane { y, 0 inverse rotate 24.25*z translate <4, 4.2, 0> }
  434.     }
  435.   }
  436.   bounded_by { box { <-5, -1, -5> <21, 12, 5> } }
  437. }
  438.  
  439. #declare Slope2_2 =
  440. object {
  441.   union {
  442.     difference {
  443.       union {
  444.         object { button translate <8, 6, 0> }
  445.         object { button translate <8, 6, 8> }
  446.         difference {
  447.           box { <-4, 0, -4> <12, 9, 12> }
  448.           plane { y, 0 inverse rotate 44*z translate <0, 5.2, 0> }
  449.         }
  450.       }
  451.       difference {
  452.         box { <-2.5, -1, -2.5> <10.5, 8, 10.5> }
  453.         plane { y, 0 inverse rotate 44*z translate <0, 4.2, 0> }
  454.       }
  455.       cylinder { 7*y, 10*y, 1.25 translate <8, 0, 0> }
  456.       cylinder { 7*y, 10*y, 1.25 translate <8, 0, 8> }
  457.     }
  458.     difference {
  459.       cylinder { 0*y, 8*y, 3 translate <4, 0, 4> }
  460.       cylinder { -1*y, 9*y, 2.25 translate <4, 0, 4> }
  461.       plane { y, 0 inverse rotate 44*z translate <0, 4.2, 0> }
  462.     }
  463.   }
  464.   bounded_by { box { <-5, -1, -5> <13, 12, 13> } }
  465. }
  466.  
  467. #declare I_Slope2_2 =
  468. object {
  469.   union {
  470.     difference {
  471.       union {
  472.         object { button translate <0, 6, 0> }
  473.         object { button translate <0, 6, 8> }
  474.         difference {
  475.           box { <-4, 0, -4> <12, 9, 12> }
  476.           plane { y, 0 rotate 44*z translate <8, 4.8, 0> }
  477.         }
  478.       }
  479.       difference {
  480.         box { <4, 1, -2.5> <10.5, 10, 10.5> }
  481.         plane { y, 0 rotate 44*z translate <8, 5.8, 0> }
  482.       }
  483.       box { <-2.5, -1, -2.5> <2.5, 8, 10.5> }
  484.       box { <-0.5, 7, -1.5> <0.5, 9, 1.5> }
  485.       box { <-0.5, 7, 1.5> <0.5, 9, 9.5> }
  486.     }
  487.     difference {
  488.       union {
  489.         object { opencylinder translate <8, 0, 0> }
  490.         object { opencylinder translate <8, 0, 8> }
  491.       }
  492.       plane { y, 0 rotate 44*z translate <8, 5.8, 0> }
  493.     }
  494.     box { <-0.5, 0, 2.5> <0.5, 8, 5.5> }
  495.   }
  496.   bounded_by { box { <-5, -1, -5> <13, 12, 13> } }
  497. }
  498.  
  499. #declare I_Slope2_3 =
  500. object {
  501.   union {
  502.     difference {
  503.       union {
  504.        object { button translate <0, 6, 0> }
  505.        object { button translate <0, 6, 8> }
  506.        difference {
  507.          box { <-4, 0, -4> <20, 9, 12> }
  508.          plane { y, 0 rotate 24.25*z translate <12, 3.8, 0> }
  509.        }
  510.       }
  511.       object { button translate <8, -1.5, 0> }
  512.       object { button translate <8, -1.5, 8> }
  513.       difference {
  514.         box { <4, 1, -2.5> <18.5, 10, 10.5> }
  515.         plane { y, 0 rotate 24.25*z translate <12, 4.8, 0> }
  516.       }
  517.       box { <-2.5, -1, -2.5> <2.5, 8, 10.5> }
  518.       box { <-0.5, 7, -1.5> <0.5, 9, 1.5> }
  519.       box { <-0.5, 7, 1.5> <0.5, 9, 9.5> }
  520.     }
  521.     difference {
  522.       union {
  523.         object { opencylinder translate <8, 0, 0> }
  524.         object { opencylinder translate <8, 0, 8> }
  525.         object { opencylinder translate <16, 0, 0> }
  526.         object { opencylinder translate <16, 0, 8> }
  527.       }
  528.       plane { y, 0 rotate 24.25*z translate <12, 4.8, 0> }
  529.     }
  530.     box { <-0.5, 0, 2.5> <0.5, 8, 5.5> }
  531.   }
  532.   bounded_by { box { <-5, -1, -5> <21, 12, 13> } }
  533. }
  534.  
  535. #declare Bar1_6 =
  536. object {
  537.   difference {
  538.     union {
  539.       cylinder { 0*y, 3*y, 3.25 }
  540.       cylinder { 0*y, 3*y, 3.25 translate <40, 0, 0> }
  541.       cylinder { 3*y, 4.5*y, 1.5 }
  542.       cylinder { 3*y, 4.5*y, 1.5 translate <40, 0, 0> }
  543.       cylinder { 6*y, 10.5*y, 2.25 translate <8, 0, 0> }
  544.       cylinder { 6*y, 10.5*y, 2.25 translate <16, 0, 0> }
  545.       cylinder { 6*y, 10.5*y, 2.25 translate <24, 0, 0> }
  546.       cylinder { 6*y, 10.5*y, 2.25 translate <32, 0, 0> }
  547.       cylinder { 3*x, 37*x, 1.5 translate <0, 7.5, 0> }
  548.       object { Tor translate <37, 4.5, 0> }
  549.       object { Tor rotate 90*z translate <3, 4.5, 0> }
  550.     }
  551.     cylinder { 5.5*y, 11*y, 1.75 translate <8, 0, 0> }
  552.     cylinder { 5.5*y, 11*y, 1.75 translate <16, 0, 0> }
  553.     cylinder { 5.5*y, 11*y, 1.75 translate <24, 0, 0> }
  554.     cylinder { 5.5*y, 11*y, 1.75 translate <32, 0, 0> }
  555.     cylinder { -1*y, 2*y, 2.75 }
  556.     cylinder { -1*y, 2*y, 2.75 translate <40, 0, 0> }
  557.   }
  558.   bounded_by { box { <-5, -1, -5> <45, 12, 5> } }
  559. }
  560.  
  561. #declare S_Propellor2_2 =
  562. object {
  563.   union {
  564.     cylinder { 12*z, 13*z, 2 translate <4, 1, 0> }
  565.     difference {
  566.       box { <-4, -3, -4> <12, 3, 12> }
  567.       box { <-5, -4, -5> <13, 0, 4> }
  568.     }
  569.     object { button }
  570.     object { button translate <8, 0, 0> }
  571.     object { button translate <0, 0, 8> }
  572.     object { button translate <8, 0, 8> }
  573.     difference {
  574.       merge {
  575.         cylinder { 12*z, 18*z, 1.5 }
  576.         cylinder { 17*z, 18*z, 1.5 scale <1.5, 1, 1>}
  577.       }
  578.       box { <-.5, -2, 15> <.5, 2, 19> }
  579.       translate <4, 1, 0>
  580.     }
  581.   }
  582.   bounded_by { box { <-5, -4, -5> <13, 5, 19> } }
  583. }
  584.  
  585. #declare S_Propellor =
  586. object {
  587.   union {
  588.     difference {
  589.       cylinder { -2*z, 2*z, 3.1 }
  590.       cylinder { -3*z, 3*z, 1.7 }
  591.     }
  592.     object { S_Blade rotate <0, 14.5, 0> }
  593.     object { S_Blade rotate <0, 14.5, 120> }
  594.     object { S_Blade rotate <0, 14.5, 240> }
  595.   }
  596.   bounded_by { box { <-17, -17, -3> <17, 17, 3> } }
  597. }
  598.  
  599. #declare Thing1_2 =
  600. object {
  601.   union {
  602.     difference {
  603.       union {
  604.         object { button }
  605.         object { button translate <8, 0, 0> }
  606.         box { <-4, 0, -4> <12, 3, 4> }
  607.         box { <-6, .5, -4> <14, 1.5, 4> }
  608.         cylinder { -12*z, 4*z, 1.5 translate <-6.5, 1, 0> }
  609.         cylinder { -12*z, 4*z, 1.5 translate <14.5, 1, 0> }
  610.       }
  611.       box { <-2.5, -1, -2.5> <10.5, 2, 2.5> }
  612.       cylinder { 1*y, 4*y, 1.25 }
  613.       cylinder { 1*y, 4*y, 1.25 translate <8, 0, 0> }
  614.     }
  615.     cylinder { 0*y, 2*y, 1.5 translate <4, 0, 0> }
  616.   }
  617.   bounded_by { box { <-8, -1, -13> <18, 5, 5> } }
  618. }
  619.  
  620. #declare Thing2_2 =
  621. object {
  622.   union {
  623.     difference {
  624.       union {
  625.         object { button }
  626.         object { button translate <0, 0, 8> }
  627.         object { button translate <8, 0, 0> }
  628.         object { button translate <8, 0, 8> }
  629.         box { <-4, 0, -4> <12, 3, 12> }
  630.         difference {
  631.           cylinder { 0*y, 3*y, 8 translate <12, 0, 4> }
  632.           cylinder { -2*y, 5*y, 2.25 translate <16, 0, 4> }
  633.         }
  634.       }
  635.       box { <-2.5, -1, -2.5> <10.5, 2, 10.5> }
  636.       difference {
  637.         cylinder { -1*y, 2*y, 6.5 translate <12, 0, 4> }
  638.         plane { x, 12 }
  639.       }
  640.       cylinder { 1*y, 4*y, 1.25 }
  641.       cylinder { 1*y, 4*y, 1.25 translate <8, 0, 0> }
  642.       cylinder { 1*y, 4*y, 1.25 translate <0, 0, 8> }
  643.       cylinder { 1*y, 4*y, 1.25 translate <8, 0, 8> }
  644.     }
  645.     object { Ring translate <4, 0, 4> }
  646.     difference {
  647.       cylinder { 0*y, 2*y, 3 translate <16, 0, 4> }
  648.       cylinder { -1*y, 6*y, 2.25 translate <16, 0, 4> }
  649.     }
  650.   }
  651.   bounded_by { box { <-5, -1, -5> <21, 5, 13> } }
  652. }
  653.  
  654. #declare Joy_stick =
  655. object {
  656.   union {
  657.     cylinder { -1*z, 1*z, 2 }
  658.     cylinder { 1*y, 13*y, 0.8 }
  659.     sphere { <0, 14, 0> 1.25 }
  660.   }
  661.   bounded_by { box { <-3, -3, -2> <3, 16, 2> } }
  662. }
  663.  
  664. #declare Joy_base =
  665. object {
  666.   difference {
  667.     union {
  668.       difference {
  669.         sphere { <0, 3, 0> 3.5 }
  670.         box { <-4, 3, -1> <4, 6, 1> }
  671.       }
  672.       cylinder { 0*y, 3*y, 3.5 }
  673.     }
  674.     cylinder { -1*y, 3.01*y, 2.5 }
  675.   }
  676.   bounded_by { box { <-4, -1, -4> <4, 6, 4> } }
  677. }
  678.  
  679. #declare Thing1_4 =
  680. object {
  681.   union {
  682.     difference {
  683.       union {
  684.         object { button }
  685.         object { button translate <8, 0, 0> }
  686.         object { button translate <16, 0, 0> }
  687.         object { button translate <24, 0, 0> }
  688.         box { <-4, 0, -4> <28, 3, 4> }
  689.         box { <-4, 0, 6> <-2.5, 3, 4> }
  690.         cylinder { -4*x, -2.5*x, 1.5 translate <0, 1.5, 6> }
  691.         box { <3.25, 0, 6> <4.75, 3, 4> }
  692.         cylinder { 3.25*x, 4.75*x, 1.5 translate <0, 1.5, 6> }
  693.         box { <11.25, 0, 6> <12.75, 3, 4> }
  694.         cylinder { 11.25*x, 12.75*x, 1.5 translate <0, 1.5, 6> }
  695.         box { <19.25, 0, 6> <20.75, 3, 4> }
  696.         cylinder { 19.25*x, 20.75*x, 1.5 translate <0, 1.5, 6> }
  697.         box { <26.5, 0, 6> <28, 3, 4> }
  698.         cylinder { 26.5*x, 28*x, 1.5 translate <0, 1.5, 6> }
  699.       }
  700.       box { <-2.5, -1, -2.5> <26.5, 2, 2.5> }
  701.       cylinder { 1*y, 4*y, 1.25 }
  702.       cylinder { 1*y, 4*y, 1.25 translate <8, 0, 0> }
  703.       cylinder { 1*y, 4*y, 1.25 translate <16, 0, 0> }
  704.       cylinder { 1*y, 4*y, 1.25 translate <24, 0, 0> }
  705.     }
  706.     cylinder { 0*y, 2*y, 1.5 translate <4, 0, 0> }
  707.     cylinder { 0*y, 2*y, 1.5 translate <12, 0, 0> }
  708.     cylinder { 0*y, 2*y, 1.5 translate <20, 0, 0> }
  709.   }
  710.   bounded_by { box { <-5, -1, -5> <29, 5, 8> } }
  711. }
  712.  
  713. #declare L_Propellor2_2 =
  714. object {
  715.   union {
  716.     difference {
  717.       box { <-4, 0, -4> <12, 3, 12> }
  718.       box { <-2.5, -1, -2.5> <10.5, 2, 10.5> }
  719.     }
  720.     object { Ring translate <4, 0, 4> }
  721.     difference {
  722.       merge {
  723.         cylinder { 3*y, 4*y, 3 translate <4, 0, 4> }
  724.         cylinder { 4*y, 11*y, 2.25 translate <4, 0, 4> }
  725.         cylinder { 10*y, 11*y, 2.5 translate <4, 0, 4> }
  726.       }
  727.       box { <3.5, 8, -4> <4.5, 12, 4> }
  728.     }
  729.   }
  730.   bounded_by { box { <-5, -1, -5> <13, 12, 13> } }
  731. }
  732.  
  733. #declare Rotor_piece =
  734. object {
  735.   difference {
  736.     union {
  737.       object { openbutton translate <8, 7, 0> }
  738.       object { openbutton translate <16, 7, 0> }
  739.       object { openbutton translate <-8, 7, 0> }
  740.       object { openbutton translate <-16, 7, 0> }
  741.       object { openbutton translate <0, 7, -16> }
  742.       object { openbutton translate <0, 7, -8> }
  743.       object { openbutton translate <0, 7, 8> }
  744.       object { openbutton translate <0, 7, 16> }
  745.       cylinder { 8.5*y, 10*y, 4 translate <16, 0, 0> }
  746.       cylinder { 8.5*y, 10*y, 4 translate <-16, 0, 0> }
  747.       cylinder { 8.5*y, 10*y, 4 translate <0, 0, 16> }
  748.       cylinder { 8.5*y, 10*y, 4 translate <0, 0, -16> }
  749.       box { <-16, 8.5, -4> <16, 10, 4> }
  750.       box { <-4, 8.5, -16> <4, 10, 16> }
  751.       cylinder { 7.5*y, 9*y, 4 }
  752.       cylinder { 0.5*y, 9*y, 1 translate <5, 0, 0> }
  753.       cylinder { 0.5*y, 9*y, 1 translate <-5, 0, 0> }
  754.       cylinder { 0.5*y, 9*y, 1 translate <0, 0, 5> }
  755.       cylinder { 0.5*y, 9*y, 1 translate <0, 0, -5> }
  756.       box { <-5, 0.5, -1> <5, 9, 1> }
  757.       box { <-1, 0.5, -5> <1, 9, 5> }
  758.     }
  759.     union {
  760.       cylinder { -1*y, 12*y, 2.5 }
  761.       cylinder { 8*y, 12*y, 3 }
  762.       cylinder { -1*y, 1*y, 3 }
  763.     }
  764.   }
  765.   bounded_by { box { <-21, -1, -21> <21, 12, 21> } }
  766. }
  767.  
  768. #declare Swiveltop1_2 =
  769. object {
  770.   union {
  771.     object { openbutton translate <0, -3, 0> }
  772.     object { openbutton translate <0, -3, 8> }
  773.     box { <-4, -0.8, -4> <4, 0, 12> }
  774.     difference {
  775.       box { <-0.5, -6, -2.5> <0.5, 0, 10.5> }
  776.       box { <-1, -7, 3> <1, -3, 5> }
  777.     }
  778.     cylinder { -2.5*z, -1.5*z, 2 translate <0, -4, 0> }
  779.     cylinder { 9.5*z, 10.5*z, 2 translate <0, -4, 0> }
  780.     box { <-2, -4, -2.5> <2, 0, -1.5> }
  781.     box { <-2, -4, 9.5> <2, 0, 10.5> }
  782.     difference {
  783.       cylinder { -4*z, -2.5*z, 1.5 translate <0, -4, 0> }
  784.       cylinder { -5*z, -2*z, 0.75 translate <0, -4, 0> }
  785.     }
  786.     difference {
  787.       cylinder { 10.5*z, 12*z, 1.5 translate <0, -4, 0> }
  788.       cylinder { 10*z, 13*z, 0.75 translate <0, -4, 0> }
  789.     }
  790.   }
  791.   bounded_by { box { <-5, -7, -5> <5, 2, 13> } }
  792. }
  793.  
  794. #declare Swivelbase1_2 =
  795. object {
  796.   union {
  797.     difference {
  798.       box { <-4, -5, -4> <4, 3, 12> }
  799.       difference {
  800.         cylinder { -6*z, 14*z, 3 inverse }
  801.         plane { y, 0 }
  802.         plane { x, 0 inverse }
  803.       }
  804.       box { <-2.5, -6, -2.5> <2.5, -3, 3.5> }
  805.       box { <-2.5, -6, 4.5> <2.5, -3, 10.5> }
  806.       box { <-5, -3.5, -5> <-3, 4, 13> }
  807.       box { <-4, -2, -2.5> <3, 4, 10.5> }
  808.       cylinder { -5*z, -2*z, 1.5 }
  809.       cylinder { 10*z, 13*z, 1.5 }
  810.       box { <-1.5, 0, -5> <1.5, 4, 13> }
  811.     }
  812.     box { <-1, -2, 3> <1, 0, 5> }
  813.     cylinder { 3*z, 5*z, 1 }
  814.   }
  815.   bounded_by { box { <-5, -6, -5> <5, 4, 13> } }
  816. }
  817.  
  818. #declare Window_bit =
  819. object {
  820.   merge {
  821.     box { <-1.75, -10.25, -0.5> <-0.75, 10.25, 24.5> }
  822.     // Right hand side of the segment, as seen from the front
  823.     difference {
  824.       cylinder { -10.25*y, 10.25*y, 3.5 translate <1.75, 0, -0.5> }
  825.       cylinder { -11*y, 11*y, 2.5 translate <1.75, 0, -0.5> }
  826.       plane { x, 1.75 inverse }
  827.       plane { z, -0.5 inverse }
  828.     }
  829.     // Left hand side of the segment, as seen from the front
  830.     difference {
  831.       cylinder { -10.25*y, 10.25*y, 3.5 translate <1.75, 0, 24.5> }
  832.       cylinder { -11*y, 11*y, 2.5 translate <1.75, 0, 24.5> }
  833.       plane { x, 1.75 inverse }
  834.       plane { z, 24.5 }
  835.     }
  836.   }
  837.   bounded_by { box { <-3, -11, -5> <3, 11, 29> } }
  838. }
  839.  
  840. #declare Window_cutter =
  841. object {
  842.   difference {
  843.     box { <-10, -14, -6> <1.75, 14, 30> }
  844.     box { <-1.75, -15, -0.5> <3, 15, 24.5> }
  845.     cylinder { -15*y, 15*y, 3.5 translate <1.75, 0, -0.5> }
  846.     cylinder { -15*y, 15*y, 3.5 translate <1.75, 0, 24.5> }
  847.   }
  848. }
  849.  
  850. #declare Window_shield =
  851. object {
  852.   difference {
  853.     merge {
  854.       box { <-28, -37.75, -4> <-14, -34.75, 28> }
  855.       object { Window_bit rotate 45*z translate <-24.25, -32.5, 0> }
  856.       object { Window_bit translate <-27.75, -25, 0> }
  857.       object { Window_bit rotate -27.5*z translate <-24.4, -14, 0> }
  858.       object { Window_bit rotate -68.75*z translate <-11.5, -3.8, 0> }
  859.       cylinder { -1*z, -2.5*z, 1.5 }
  860.       cylinder { 9.75*z, 11.25*z, 1.5 }
  861.       cylinder { 12.75*z, 14.25*z, 1.5 }
  862.       cylinder { 25*z, 26.5*z, 1.5 }
  863.       box { <-10, -1.5, -2.5> <0, 1.5, -1> }
  864.       box { <-10, -1.5, 9.75> <0, 1.5, 11.25> }
  865.       box { <-10, -1.5, 12.75> <0, 1.5, 14.25> }
  866.       box { <-10, -1.5, 25> <0, 1.5, 26.5> }
  867.       box { <-10, 0.5, -2.5> <0, 1.5, 26.5> }
  868.     }
  869.     object { Window_cutter rotate 45*z translate <-24.25, -32.5, 0> }
  870.     object { Window_cutter translate <-27.75, -25, 0> }
  871.     object { Window_cutter rotate -27.5*z translate <-24.4, -14, 0> }
  872.     object { Window_cutter rotate -68.75*z translate <-11.5, -3.8, 0> }
  873.     box { <-21.5, -39, 4> <-13, -33, 20> }
  874.     box { <-2, 0, 3.25> <2, 2, 4.75> }
  875.     box { <-2, 0, 11.25> <2, 2, 12.75> }
  876.     box { <-2, 0, 19.25> <2, 2, 20.75> }
  877.     box { <-2, -3, 26.5> <2, 3, 29> }
  878.     box { <-2, -3, -5> <2, 3, -2.5> }
  879.     plane { y, -37.75 }
  880.   }
  881.   bounded_by { box { <-31, -39, -7> <2, 2, 31> } }
  882. }
  883.  
  884.