chiark / gitweb /
scaffold-clamp: wip straphook
[reprap-play.git] / quacks-ingredients-make-copy-gcodes
1 #!/bin/bash
2 #
3 # usage:
4 #    ./quacks-ingredients-make-copy-gcodes Tests_L
5 # Uses
6 #    quacks-ingredients-L$l,Tests_L.auto.stl
7 # to make
8 #    quacks-ingredients-L$l,Tests_L.auto.gcode
9 # and then edits them and copies them to the SD card as
10 #    PREPARED/Q$l.G
11
12 set -e
13
14 f=$1
15 shift
16
17 lhs=quacks-ingredients-L
18
19 gh () {
20         g=$lhs$l.auto.gcode
21         h=/media/sd/PREPARED/Q$l.G
22 }
23
24 for l in 1 2 3 4 5; do
25         gh
26         qi=quacks-L$l.auto.ini
27
28         cp quacks.ini $qi
29
30         case $l in
31         2|4|5)
32                 perl -i~ -pe '
33                         s/^(retraction_hop *= *.*)/retraction_hop = 0.6/m
34                 ' $qi
35                 ;;
36         esac
37
38         cura -i $qi -s $lhs$l,$f.auto.stl -o $g
39         case $l in
40         1|2|3|4)
41                 perl -i~ -pe 's/^/;/ if m/^M140 S0\b.*\n/' $g
42                 ;;
43         esac
44
45         perl -i~ -ne '
46                 $l =~ s/^/;/ if m/^M400/;
47                 $l .= "G91\nG1 Z5\nG90\n" if m/^M84/;
48                 print $l or die $!;
49                 $l = $_;
50                 END { print $l or die $!; }
51         ' $g
52 done
53
54 for l in 2 4 5; do
55         gh
56         : perl -i~ -0777 -ne '
57                 @l = split m{^(?=;LAYER:\d+\n)}m, $_;
58                 foreach my $i (0..$#l) {
59                         $l[$i] =~
60                                 s{
61                                 (       ^G1 \ Z\S+ \s*\n        
62                                   |     ^\;LAYER:\d+ \s*\n
63                                     (?: ^M10[67].* \s*\n )?
64                                 )
65                                         ^G0 \ F(\d+) \ ( X\S+ \ Y\S+ )
66                                                          \ Z(\S+) \s*\n
67                                 }{
68                                         die "$& $2" unless $2 > 9000;
69                                         $1 .
70                                         "G1 Z$4\n".
71                                         "G0 F$2 $3\n".
72                                         "G1 Z$4\n"
73                                 }mxe    or $i==0
74                                         or die "$l[$i] $i";
75                         $l[$i] =~
76                                 s{
77                                         ^G1 \ Z([0-9.]+) \s*\n
78                                 (       ^G0 \ F(\d+) \ X\S+ \ Y\S+ \s*\n
79                                         (?: ; .* \s*\n )?
80                                         ^G1 \ Z([0-9.]+) \s*\n  )
81                                 }{
82                                         die "$& $3" unless $1 >= $4;
83                                         die "$& $3" unless $3 > 9000;
84                                         my $z = $i == $#l ? $1 : $4 + 0.5;
85                                         "G0 F$3\n".
86                                         "G1 Z$z\n" .
87                                         $2
88                                 }gmxe or $i==0 or die "$l[$i] $i";
89                 }
90                 print or die $! foreach @l;
91         ' $g
92 done
93
94 exec 3>${lhs}234.auto.gcode
95 for l in 2 3; do
96         gh
97         perl -pe 's/^/;/ if m/^M104 S0\b/ || (m/^M84/..0)' $g >&3
98 done
99 for l in 4; do
100         gh
101         cat $g >&3
102 done
103
104 copies="3:5 2:234 1:1"
105 copyls=""
106 for copy in $copies; do
107         l=-P-${copy%:*}
108         ci=$lhs${copy#*:}.auto.gcode
109         copyls+=" $l"
110         gh
111         rm -f $g
112         ln -vs $ci $g
113 done
114
115 umount /media/sd >/dev/null 2>&1 ||:
116 mount /media/sd
117
118 for l in 1 2 3 4 5 234 $copyls; do
119         gh
120         cp $g $h
121 done
122
123 sleep 0.5
124
125 umount /media/sd
126 mount /media/sd
127
128 for l in 1 2 3 4 5 234 $copyls; do
129         gh
130         cmp $g $h
131         ls -l $h
132 done
133 sleep 0.5
134
135 umount /media/sd