// Eminent Solina P-240, Dutch-made 1970s electronic organ // (C) 2005- by Joerg "Yadgar" Bleimann // E-mail: yazdegird@gmx.de // DEFINITIONS OF FINISHES #declare Shiny_Plastic_1= finish { ambient 0.1 diffuse 1 brilliance 0.35 specular 0.3 roughness 0.3 } #declare Shiny_Plastic_2= finish { ambient 0.1 diffuse 1 brilliance 0.35 specular 0.7 roughness 0.01 } #declare Plastic= finish { ambient 0.1 diffuse 1 brilliance 0.3 phong 0.95 phong_size 40 } // DEFINITIONS OF NORMALS #declare Brushed_Plastic= normal { granite bump_size 0.02 turbulence 1 omega 2 } // DEFINITIONS OF TEXTURES #declare Walnut= texture { pigment { color rgb <0.2, 0.1, 0> } finish { ambient 0.1 diffuse 1 brilliance 0.5 } } #declare Walnut_Bright= texture { pigment { color rgb <0.3, 0.15, 0> } finish { ambient 0.1 diffuse 1 brilliance 0.5 } } #declare Brown_Plastic= texture { pigment { color rgb <0.2, 0.1, 0> } finish { Plastic } } #declare Black_Plastic= texture { pigment { color rgb 0 } finish { Plastic } } #declare Black_Brushed_Plastic= texture { pigment { color rgb 0 } normal { Brushed_Plastic } finish { Shiny_Plastic_1 } } #declare Black_Shiny_Plastic= texture { pigment { color rgb 0 } finish { Shiny_Plastic_2 } } #declare Red_Test_Plastic= texture { pigment { color rgb <1, 0, 0> } finish { Shiny_Plastic_1 } } #declare Black_Rubber = texture { pigment { color rgb 0 } finish { ambient 0.1 diffuse 1 brilliance 0.3 } } #declare Dull_Steel = texture { pigment { color rgb <0.6, 0.6, 0.65> } finish { ambient 0.1 diffuse 1 brilliance 0.18 } } // LIGHTING AND CAMERAS #declare design_view=0; light_source { #if (!design_view) #switch (clock) #range (5, 6) <0, 2000, -3000> #break #case (7) <-400, 1, -3000> #break #else <400, 2000, -700> #break #end #else #switch (design_view) #case (3) <-50, 10000, -1000> // top view, illumination from high north #break #case (4) <-50, 3000, 1000> // back view, illumination from north #break #case (5) <-500, 1000, -1000> // corner view, illumination from high south #break #else <-50, 0.05, -1000> #break #end #end color rgb 1 } camera { #if (!design_view ) #switch(clock) #case (0) // Single parts design view orthographic location <0.5, 0, 0> look_at <0, 0, 0.125> angle 40 #break #case (1) // Lower front view location <0.55, 0.6, -0.6> look_at <0.55, 0, 0.1> angle 80 #break #case (2) // Front view location <0.55, 1.7, -1.4> look_at <0.55, 0.75, 0.2> angle 60 #break #case (3) // Right side view location <2, 0.6, 0.3> look_at <1, 0.6, 0.3> angle 80 #break #case (4) // Inside cabinet view location <0.25, 0.6, 0.5> look_at <0.65, 0.2, 0.1> angle 50 #break #case (5) // Low front view, centered on volume pedal location <0.67, 0.15, -1.5> look_at <0.67, 0.15, 0.2> angle 20 #break #case (6) // Volume pedal case frame, upper part and left corners test location <0.6353, 0.285, -1.5> look_at <0.6353, 0.285, 0.2> angle 5 #break #case (7) // Volume pedal case frame, upper part and right corners test location <0.7153, 0.285, -1.5> look_at <0.7153, 0.285, 0.2> angle 5 #break #end #end } // DEFINITIONS OF STANDARDIZED OBJECTS #declare Foot_Base= union { cylinder { <0.008, -0.001, 0.016>, <0.008, 0.007, 0.016>, 0.002 } cylinder { <0.02, -0.001, 0.016>, <0.02, 0.007, 0.016>, 0.002 } cylinder { <0.008, -0.001, 0.397>, <0.008, 0.007, 0.397>, 0.002 } cylinder { <0.02, -0.001, 0.397>, <0.02, 0.007, 0.397>, 0.002 } box { <0.008, -0.001, 0.014>, <0.02, 0.007, 0.399> } box { <0.006, -0.001, 0.016>, <0.022, 0.007, 0.397> } texture { Black_Rubber } } #declare Foot= union { prism { 0, 0.028, 6 <-0.006, 0>, <-0.025, 0>, <-0.035, 0.0613>, <-0.035, 0.413>, <-0.006, 0.413>, <-0.006, 0> texture { Walnut } rotate z*-90 } object { Foot_Base } } #declare Long_Bass_Key= difference { union { cylinder { 0, <0, 0.03, 0>, 0.0121 scale <1, 1, 2> translate <0.0121, 0, 0.0242> } box { <0, 0, 0.0242>, <0.0242, 0.03, 0.28> } difference { sphere { 0, 0.0121 } box { -0.015, <0.015, 0, 0.015> } scale <1, 0.2, 2> translate <0.0121, 0.03, 0.0242> } difference { cylinder { <0, 0, 0.0242>, <0, 0, 0.215>, 0.0121 } box { <-0.015, -0.015, 0.02>, <0.015, 0, 0.22> } scale <1, 0.2, 1> translate <0.0121, 0.03, 0> } } box { <-0.001, -0.02, 0>, <0.025, 0, 0.5> rotate x*2.489 translate y*0.015 } texture { Brown_Plastic } } #declare Short_Bass_Key= union { difference { union { cylinder { 0, <0, 0.025, 0>, 0.011 translate <0.011, 0, 0.011> } box { <0, 0, 0.011>, <0.022, 0.025, 0.14> } } box { <-0.001, -0.02, 0>, <0.025, 0, 0.3> rotate x*5.44 translate y*0.01 } } difference { union { cylinder { <0, 0.025, 0>, <0, 0.06, 0>, 0.011 translate <0.011, 0, 0.011> } box { <0, 0.025, 0.011>, <0.022, 0.06, 0.081> } cylinder { <0, 0.025, 0>, <0, 0.06, 0>, 0.011 translate <0.011, 0, 0.081> } } box { <-0.001, 0, 0>, <0.025, 0.05, 0.14> rotate x*-6.2 translate y*0.045 } } union { sphere { <0, 0, 0.011>, 0.011 } cylinder { <0, 0, 0.011>, <0, 0, 0.011+0.070539>, 0.011 } sphere { <0, 0, 0.011+0.070539>, 0.011 } scale <1, 0.4, 0> rotate x*-6.2 translate <0.011, 0.045, 0> } texture { Black_Plastic } } #declare Lower_Side_Part= box { <0.005, 0.035, 0.0643>, <0.0237, 0.682, 0.413> } #declare Screw_Head_Cutout_Box= box { <-0.00055, -0.003, -0.01>, <0.00055, 0.003, -0.001> } #declare Screw_Head_Cutout= intersection { union { object { Screw_Head_Cutout_Box } object { Screw_Head_Cutout_Box rotate z*90 } } sphere { <0, 0, -0.0115>, 0.01 } } #declare Screw_Head = difference { sphere { 0, 0.00415 scale <1, 1, 0.7> } object { Screw_Head_Cutout } texture { Dull_Steel } } declare frame=mod(clock, 240); #declare volume=frame*0.25; // legal values range from 0 to 30 #if (frame>120) #declare volume=30-(frame-120)*0.25; #end #declare Volume_Pedal_Vertical_Cutout= box { -0.001, <0.003, 0.041, 0.003> } #declare Volume_Pedal_Horizontal_Cutout_X= box { <-0.001, 0.038, -0.001>, <0.1158, 0.041, 0.002> } #declare Volume_Pedal_Horizontal_Cutout_Z= box { <-0.001, 0.038, -0.001>, <0.002, 0.041, 0.255> } #declare Volume_Pedal_Horizontal_Rounding_X= cylinder { <0.003, 0.038, 0.002>, <0.1118, 0.038, 0.002>, 0.002 } #declare Volume_Pedal_Horizontal_Rounding_Z= cylinder { <0.002, 0.038, 0.003>, <0.002, 0.038, 0.25>, 0.002 } #declare Volume_Pedal_Corner_Rounding= difference { torus { 0.001, 0.002 translate <0.003, 0.038, 0.003> } } #declare Volume_Pedal_Vertical_Rounding= difference { cylinder { 0, <0, 0.04, 0>, 0.003 } difference { cylinder { <0, 0.038, 0>, <0, 0.041, 0>, 0.0031 } cylinder { <0, 0.0379, 0>, <0, 0.0411, 0>, 0.001 } } box { <-0.0031, -0.0001, 0>, <0.0031, 0.0401, 0.0031> } box { <0, -0.0002, -0.0032>, <0.0032, 0.0402, 0.0032> } } #declare Volume_Pedal_Surface_Profile= difference { box { 0, <0.1078, 0.0012, 0.247> } box { <0.0021, -0.0001, 0.0021>, <0.1057, 0.0013, 0.2449> } } #declare Volume_Pedal_Surface_Profile_Rib= prism { linear_sweep linear_spline 0, 0.2428, 4 <0, 0>, <0.00296, 0>, <0.00148, -0.0012>, <0,0> rotate <90, 0, 0> translate <0.0056, 0.04, 0.0056> } #declare Volume_Pedal= difference { union { difference { box { 0, <0.1148, 0.04, 0.254> } box { <0.0048, -0.001, 0.0048>, <0.11, 0.0352, 0.2492> } object { Volume_Pedal_Vertical_Cutout } object { Volume_Pedal_Vertical_Cutout translate <0, 0, 0.252> } object { Volume_Pedal_Vertical_Cutout translate <0.1128, 0, 0> } object { Volume_Pedal_Vertical_Cutout translate <0.1128, 0, 0.252> } object { Volume_Pedal_Horizontal_Cutout_X } object { Volume_Pedal_Horizontal_Cutout_X translate <0, 0, 0.253> } object { Volume_Pedal_Horizontal_Cutout_Z } object { Volume_Pedal_Horizontal_Cutout_Z translate <0.1138, 0, 0> } } object { Volume_Pedal_Vertical_Rounding translate <0.003, 0, 0.003> } object { Volume_Pedal_Vertical_Rounding rotate <0, 270, 0> translate <0.1118, 0, 0.003> } object { Volume_Pedal_Vertical_Rounding rotate <0, 180, 0> translate <0.1118, 0, 0.251> } object { Volume_Pedal_Vertical_Rounding rotate <0, 90, 0> translate <0.003, 0, 0.251> } object { Volume_Pedal_Horizontal_Rounding_X } object { Volume_Pedal_Horizontal_Rounding_X translate <0, 0, 0.25> } object { Volume_Pedal_Horizontal_Rounding_Z } object { Volume_Pedal_Horizontal_Rounding_Z translate <0.1108, 0, 0> } object { Volume_Pedal_Corner_Rounding } object { Volume_Pedal_Corner_Rounding translate <0.1088, 0, 0> } object { Volume_Pedal_Corner_Rounding translate <0, 0, 0.248> } object { Volume_Pedal_Corner_Rounding translate <0.1088, 0, 0.248> } object { Volume_Pedal_Surface_Profile translate <0.0035, 0.04, 0.0035> } #declare i=0; #while (i<35) object { Volume_Pedal_Surface_Profile_Rib translate } #declare i=i+1; #end } box { <-0.001, 0, 0>, <0.115, -0.03, 0.08> rotate x*23.3048905392031121189232368324318 translate y*0.028 } translate <0, -0.01, -0.07> texture { Black_Shiny_Plastic } } #declare Volume_Pedal_Block_Cutout_A = box { <-0.001, 0.002, -0.001>, <0.0225, 0.0485, 0.067> } #declare Volume_Pedal_Block_Cutout_B = box { <0.0296, 0.0104, -0.001>, <0.0486, 0.0485, 0.067> } #declare Volume_Pedal_Block_Cutout_C = box { 0, <0.1477, 0.02, 0.04> } #declare Inner_Block= union { box { 0, <0.019, 0.0296, 0.018> } cylinder { <0, 0.0296, 0.009>, <0.019, 0.0296, 0.009>, 0.009 } } #declare Inner_Blocks= union { #declare i=0; #while (i<4) object { Inner_Block translate <0.0296+i*0.0223, 0.0104, 0.024> } #declare i=i+1; #end } #declare Volume_Pedal_Block= union { object { Inner_Blocks texture { Black_Shiny_Plastic } } difference { box { 0, <0.1477, 0.0484, 0.066> } object { Volume_Pedal_Block_Cutout_A } object { Volume_Pedal_Block_Cutout_A translate <0.1253, 0, 0> } #declare i=0; #while (i<4) object { Volume_Pedal_Block_Cutout_B translate } #declare i=i+1; #end object { Volume_Pedal_Block_Cutout_C rotate <-14.281, 0, 0> translate <0, 0.04, 0> } object { Volume_Pedal_Block_Cutout_C translate <0, 0, -0.033> rotate <14.281, 0, 0> translate <0, 0.04, 0.066> } } } // ACTUAL OBJECTS sky_sphere { pigment { color rgb 1 } } #if (!design_view) // Full model views plane { y, 0 texture { pigment { color rgb 1 } finish { ambient 0.1 diffuse 1 brilliance 0.2 } } } object { Foot } object { Foot translate x*1.108 } difference // Cabinet { box { <0.0237, 0.053, 0.0713>, <1.113, 0.691, 0.073> } box { <0.605, 0.052, 0.07> <0.7524, 0.28, 0.074> } texture { pigment { image_map { png "solina_cabinet.png" interpolate 4 } scale <0.0793, 0.0257, 1> translate <0.014, -0.01, 0> } finish { ambient 0.1 diffuse 1 brilliance 0.35 } } } union // Volume pedal case frame { difference { difference { difference { box { <0.5932, 0.053, 0.0702>, <0.7542, 0.291, 0.0713> } box { <0.6055, 0.052, 0.0701>, <0.7419, 0.2792, 0.0714> } texture { Black_Plastic } } box { <0.5932, 0.052, 0.0702>, <0.7542, 0.292, 0.0703> texture { Black_Brushed_Plastic } } } box { <0.593, 0.052, 0.0701>, <0.5939, 0.292, 0.0709> } // Cut-out for outer frame rounding, left part box { <0.593, 0.2903, 0.0701>, <0.755, 0.292, 0.0709> } // Cut-out for outer frame rounding, upper part box { <0.7535, 0.052, 0.0701>, <0.755, 0.292, 0.0709> } // Cut-out for outer frame rounding, right part box { <0.6048, 0.052, 0.0701>, <0.606, 0.2799, 0.0709> } // Cut-out for inner frame rounding, left part box { <0.6048, 0.279, 0.07>, <0.7426, 0.2799, 0.0709> } // Cut-out for inner frame rounding, upper part box { <0.741, 0.052, 0.0701>, <0.7426, 0.2799, 0.0709> } // Cut-out for inner frame rounding, right part } union { cylinder { <0.5939, 0.053, 0.0709>, <0.5939, 0.2903, 0.0709>, 0.0007 } // Outer frame rounding, left part sphere { <0.5939, 0.2903, 0.0709>, 0.0007 } // Outer frame rounding, left corner cylinder { <0.5939, 0.2903, 0.0709>, <0.7535, 0.2903, 0.0709>, 0.0007 } // Outer frame rounding, upper part sphere { <0.7535, 0.2903, 0.0709>, 0.0007 } // Outer frame rounding, right corner cylinder { <0.7535, 0.053, 0.0709>, <0.7535, 0.2903, 0.0709>, 0.0007 } // Outer frame rounding, right part cylinder { <0.6048, 0.053, 0.0709>, <0.6048, 0.2799, 0.0709>, 0.0007 } // Inner frame rounding, left part cylinder { <0.6048, 0.2799, 0.0709>, <0.7426, 0.2799, 0.0709>, 0.0007 } // Inner frame rounding, upper part cylinder { <0.7426, 0.053, 0.0709>, <0.7426, 0.2799, 0.0709>, 0.0007 } // Inner frame ronding, right part texture { Black_Plastic } } } difference // Volume pedal case { union { box { <0.6, 0.052, 0.073>, <0.7574, 0.302, 0.173> } box { <0.6, 0.052, 0.173>, <0.7574, 0.132, 0.343> } difference { cylinder { <0.6, 0.132, 0.173>, <0.7574, 0.132, 0.173>, 0.17 } box { <0.59, -0.05, 0>, <0.76, 0.31, 0.173> } box { <0.56, -0.05, 0>, <0.76, 0.132, 0.35> } } } union { box { <0.60199, 0.051, 0.07>, <0.7554, 0.3, 0.173> } box { <0.6019, 0.051, 0.173>, <0.7555, 0.132, 0.341> } difference { cylinder { <0.602, 0.132, 0.173>, <0.7554, 0.132, 0.173>, 0.168 } box { <0.59, -0.05, 0>, <0.76, 0.31, 0.173> } box { <0.56, -0.05, 0>, <0.76, 0.132, 0.35> } } } texture { Brown_Plastic } } object { Screw_Head translate <0.6283, 0.04425, 0.0703> } object { Screw_Head translate <0.7263, 0.04425, 0.0703> } box // Volume pedal fastening { <0.5932, 0.0355, 0.0703>, <0.7542, 0.053, 0.0713> texture { Black_Shiny_Plastic } } object { Volume_Pedal_Block translate <0.59985, 0.053, 0.0703> texture { Black_Shiny_Plastic } } box // Cabinet bottom, right part { <0.558, 0.035, 0.0713>, <1.113, 0.053, 0.41> texture { Walnut_Bright } } box // Cabinet bottom, left part { <0.023, 0.035, 0.0713>, <0.061, 0.053, 0.41> texture { Walnut_Bright } } box // Cabinet bottom, central part (assumed x and z dimensions, not visible from outside!) { <0.061, 0.035, 0.1>, <0.558, 0.053, 0.41> texture { Walnut_Bright } } #declare a=0; #while (a < 8) // Bass keys C, D, E, F, G, A, B and c object { Long_Bass_Key translate <0.071+a*(0.0242+0.0383), 0.017, -0.1587> } #declare a=a+1; #end #declare a=0; #while (a < 6) // Bass keys C#, D#, F#, G# and A# object { Short_Bass_Key translate <0.071+0.0242+0.008+a*(0.022+0.0405), 0.017, -0.0337> } #if (a = 1) #declare a=a+2; #else #declare a=a+1; #end #end object { Lower_Side_Part texture { Walnut_Bright } } object { Lower_Side_Part translate x*1.108 texture { Walnut_Bright } } object { Volume_Pedal rotate <-35, 0, 0> rotate x*volume translate <0.61835, 0.0826, 0.0826> } #else // Single parts design views, clock = 0 #switch (design_view) #case (1) // front view camera { location <0.07385, 0.2, -0.5> look_at <0.07385, 0.04, 0> angle 40 } #break #case (2) // right view camera { location <0.4, 0.08, 0.033> look_at <0.07385, 0.024, 0.033> angle 80 } #break #case (3) // top view camera { location <0.07385, 0.35, -0.25> look_at <0.07385, 0, 0.09> angle 50 } #break #case (4) // back view camera { location <0.07385, 0.07, 0.7> look_at <0.07385, 0.04, 0> angle 40 } #break #case (5) // Left front upper corner close-up camera { location <0.16, 0.1, -0.12> look_at <0.1148, 0.03, -0.07> angle 40 } #break #end object { Volume_Pedal rotate <-35, 0, 0> rotate x*volume } #end // 25,5538646783612752229169779947542 Hypotenuse // 23,3048905392031121189232368324318 Winkel