X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=treefoil.scad.pl;h=ee233a948661e66ebc82cdb80d4dc94ac8d059ec;hb=6dba99d4594590c1af949fbd0379d366a05c2ca6;hp=3bf401243ed1e162793bea0d94f09df8c80c832e;hpb=05430bd27f2161a1cfce3f1ddbfba28c20ee8eee;p=reprap-play.git diff --git a/treefoil.scad.pl b/treefoil.scad.pl old mode 100644 new mode 100755 index 3bf4012..ee233a9 --- a/treefoil.scad.pl +++ b/treefoil.scad.pl @@ -1,4 +1,75 @@ -__DATA__ +#!/usr/bin/perl -w + +# Use: +# - support X/Y dist 0.5mm + +use strict; + +our $shape = <<'END'; xyyZZYYXYxxyzYYZXzzxyXXYXXXZxxxyyXXZyyyzXXzz zxxYYXXZXzzxyXXYZyyzxZZXZZZYzzzxxZZYxxxyZZyy yzzXXZZYZyyzxZZXYxxyzYYZYYYXyyyzzYYXzzzxYYxx +END +# simple version (unknotted, [0,1,2]^3): +# YxxyzYYZXzzxyXXYZyyzxZZX + +sub o { print @_ or die $!; } + +o <<'END'; +// -*- autogenerated, do not edit -*- + +module Trace() { +END + +my @p = qw(0 0 0); + +$"=','; + +while ($shape =~ s/^\s*(\w)//) { + my $ix = index('xyz', (lc $1)); + my $sign = $1 =~ /[A-Z]/ ? +1 : -1; + my @q = @p; + $q[$ix] += $sign; + o " TraceEdge([@p],[@q]);\n"; + @p = @q; +} + +die @p unless "@p" eq '0,0,0'; + +o "}\n\n"; + +while () { o $_ } + +__DATA__ + +thick = 6; +edgeu = 10; + +// calculated + +octa_long = thick; +octa_short = octa_long / (1 + sqrt(2)); + +module OctaThing() { + hull(){ + for (r = [[0,0,0], [90,0,0], [0,90,0]]) { + rotate(r) + cube([ octa_short,octa_short, octa_long ], center=true); + } + } +} + +module TraceEdge(p,q) { + hull(){ + for (x=[p,q]) { + translate(x * edgeu) + OctaThing(); + } + } +} + +rotate([0,0,45]) + rotate([0,90,0]) + Trace(); + +