X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=lemon-stand.scad.pl;h=8c1d10f54338529a21998c8656a3db2ba2fdaa25;hp=84417f2377b54ea4fa1f3a8de058aaaddbb6e60b;hb=62702e323fdd511901a9f37b367e4647f7c3f76e;hpb=287cc98bc3375dd3f3b72af14e3061f8aafca011 diff --git a/lemon-stand.scad.pl b/lemon-stand.scad.pl index 84417f2..8c1d10f 100755 --- a/lemon-stand.scad.pl +++ b/lemon-stand.scad.pl @@ -7,16 +7,26 @@ use IO::File; use Data::Dumper; use constant tau => pi*2; +my $ellipse = 25 / 2; +my $circle = 7 / 2; +my $channelh = 3; +my $channelw = 4; +my $xscale = 35 / 25; +my $N = 180; # around ellipse +my $M = 80; # around each circle +my @channeldistprops = (0, 1/3, 2/3); + +my $NMdiv = $ENV{'LEMONSTAND_COARSE'} || 1; + +$M /= $NMdiv; +$N /= $NMdiv; + print < #$i=$ellipse[$i] $prorata $ellipse[$i+1]\n"; + return ( + (1-$prorata) * $ellipse[$i] + ($prorata) * $ellipse[$i+1], + $alongs[$i], + ); + } + die "$distprop ?"; +} + +sub channels(){ + print "module Channels(){\n"; + + foreach my $cdp ( + (map { 0.5 * $_ } @channeldistprops), + (map { 0.5 * ($_+1) } @channeldistprops), + ) { + my ($ctr, $along) = infodistprop($cdp); + my $angle = atan2(-$along->[0], $along->[1]); + print " translate(",scadvec($ctr),")\n"; + print " rotate([0,0,$angle*360/",tau,"])\n"; + print " rotate([0,90,0])\n"; + print " translate([0,0, -2*$circle])\n"; + print " scale([1, $channelw/$channelh/2, 1])\n"; + print " rotate([0,0,360/8/2])\n"; + print " cylinder(r=$channelh, h=4*$circle, \$fn=8);\n"; + } + print "}\n"; +} + +channels(); + while () { print }; STDOUT->error and die $!; STDOUT->flush or die $!; __DATA__ -Torusy(); +module Stand(){ + difference(){ + translate([0,0,torusyup]) + Torusy(); + Channels(); + translate([-200,-200,-50]) + cube([400,400,50]); + } +} +Stand();