// Lazo heater - collector (alternate, horizontal cylinder) // Last edited on 2005-08-29 22:30:40 by stolfi // Radius of holder tube: #macro collector_holder_radius(rad) 0.200*rad #end // The collector object: #macro collector(ht, rad) #local boiler_gap = 0.005; // Key dimensions #local coll_len = 0.800*ht; // Total length of collector #local coll_zctr = -0.450*ht; #local boiler_warmer_gap = 0.010*coll_len; #local boiler_len = coll_len/3; // Length of boiler #local holder_ext = 0.100*ht; #local holder_rad = collector_holder_radius(rad); #local eps = 0.001*ht; // Fudging length // The boling collector #local boiler_xmin = -0.500*boiler_len; #local boiler_xmax = +0.500*boiler_len; #local boiler_texture = texture { pigment { color rgb < 1.000, 0.200, 0.000 > } finish { ambient 1.00 diffuse 0.00 } } #local boiler = cylinder { , , rad texture { boiler_texture } } // The warming collector: #local warmer_xmin = boiler_xmax + boiler_warmer_gap; #local warmer_xmax = +0.500*coll_len; #local warmer_texture = texture { pigment { color rgb < 0.900, 1.000, 0.000 > } finish { ambient 1.00 diffuse 0.00 } } #local warmer = union { cylinder { <+warmer_xmin,0,coll_zctr>, <+warmer_xmax,0,coll_zctr>, rad texture { warmer_texture } } cylinder { <-warmer_xmin,0,coll_zctr>, <-warmer_xmax,0,coll_zctr>, rad texture { warmer_texture } } } // The mounting tube #local holder_zmin = -1.000*ht - holder_ext; #local holder_zmax = coll_zctr; #local holder_texture = texture { pigment { color rgb < 0.050, 0.020, 0.020 > } finish { ambient 0.20 diffuse 0.80 } } #local holder = cylinder { <0,0,holder_zmin>, <0,0,holder_zmax>, holder_rad texture { holder_texture } } // Together now: union { object { boiler } object { warmer } object { holder } rotate 90*z } #end // Hole-driller for mounting the collector on the mirror: #macro collector_hole(ht, rad) #local cyl_rad = collector_holder_radius(rad) + 0.005; cylinder { < 0, 0, -2.000*ht>, < 0, 0, +1.000*ht >, cyl_rad } #end