chiark / gitweb /
treefoi: more
[reprap-play.git] / treefoil.scad.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4
5 our $shape = <<'END';
6 xyyZZYYXYxxyzYYZXzzxyXXYXXXZxxxyyXXZyyyzXXzz
7 zxxYYXXZXzzxyXXYZyyzxZZXZZZYzzzxxZZYxxxyZZyy
8 yzzXXZZYZyyzxZZXYxxyzYYZYYYXyyyzzYYXzzzxYYxx
9 END
10
11 sub o { print @_ or die $!; }
12
13 o <<'END';
14 // -*- autogenerated, do not edit -*-
15
16 module Trace() {
17 END
18
19 my @p = qw(0 0 0);
20
21 $"=',';
22
23 while ($shape =~ s/^\s*(\w)//) {
24     my $ix = index('xyz', (lc $1));
25     my $sign = $1 =~ /[A-Z]/ ? +1 : -1;
26     my @q = @p;
27     $q[$ix] += $sign;
28     o "    TraceEdge([@p],[@q]);\n";
29     @p = @q;
30 }
31
32 die @p unless "@p" eq '0,0,0';
33
34 o "}\n\n";
35
36 while (<DATA>) { o $_ }
37
38 __DATA__
39
40 thick = 8;
41
42 // calculated
43
44 octa_long = thick;
45 octa_short = octa_long / (1 + sqrt(2));
46
47 module OctaThing() {
48     foreach (r = [[0,0,0], [90,0,0], [0,90,0]]) {
49         rotate(r)
50             cube([ octa_short,octa_short, octa_long ], center=true);
51     }
52 }
53
54 OctaThing();
55
56