chiark / gitweb /
mic-table-clamp: Adjustments from blank, binary chop
[reprap-play.git] / treefoil.scad.pl
1 #!/usr/bin/perl -w
2
3 # Use:
4 #   - support X/Y dist 0.5mm
5
6 use strict;
7
8 our $shape = <<'END';
9 xyyZZYYXYxxyzYYZXzzxyXXYXXXZxxxyyXXZyyyzXXzz
10 zxxYYXXZXzzxyXXYZyyzxZZXZZZYzzzxxZZYxxxyZZyy
11 yzzXXZZYZyyzxZZXYxxyzYYZYYYXyyyzzYYXzzzxYYxx
12 END
13 # simple version (unknotted, [0,1,2]^3):
14 # YxxyzYYZXzzxyXXYZyyzxZZX
15
16 sub o { print @_ or die $!; }
17
18 o <<'END';
19 // -*- autogenerated, do not edit -*-
20
21 module Trace() {
22 END
23
24 my @p = qw(0 0 0);
25
26 $"=',';
27
28 while ($shape =~ s/^\s*(\w)//) {
29     my $ix = index('xyz', (lc $1));
30     my $sign = $1 =~ /[A-Z]/ ? +1 : -1;
31     my @q = @p;
32     $q[$ix] += $sign;
33     o "    TraceEdge([@p],[@q]);\n";
34     @p = @q;
35 }
36
37 die @p unless "@p" eq '0,0,0';
38
39 o "}\n\n";
40
41 while (<DATA>) { o $_ }
42
43 __DATA__
44
45 thick = 6;
46 edgeu = 10;
47
48 // calculated
49
50 octa_long = thick;
51 octa_short = octa_long / (1 + sqrt(2));
52
53 module OctaThing() {
54     hull(){
55         for (r = [[0,0,0], [90,0,0], [0,90,0]]) {
56             rotate(r)
57                 cube([ octa_short,octa_short, octa_long ], center=true);
58         }
59     }
60 }
61
62 module TraceEdge(p,q) {
63     hull(){
64         for (x=[p,q]) {
65             translate(x * edgeu)
66                 OctaThing();
67         }
68     }
69 }
70
71 rotate([0,0,45])
72   rotate([0,90,0])
73   Trace();
74
75