]> mj.ucw.cz Git - misc.git/blob - ucw/draw-digit-multi
Digits: Multiple on a page
[misc.git] / ucw / draw-digit-multi
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Cairo;
7
8 my $u = 72/4;
9 my $mi = 72/25.4;
10 my $pw = 210*$mi;
11 my $ph = 297*$mi;
12 my $s = Cairo::PdfSurface->create('digit.pdf', $pw, $ph);
13 my $c = Cairo::Context->create($s);
14 my $n = 0;
15
16 $c->set_line_width(2);
17 $c->set_line_cap('round');
18 $c->set_source_rgb(0, 0, 0);
19
20 my $xp = $u;
21 my $yp = $u;
22 while (<>) {
23         s/^@@ // or next;
24         chomp;
25         my @r = split /\s+/;
26         @r == 5 or next;
27
28         for my $r (@r) {
29                 my ($x1,$y1,$x2,$y2) = $r =~ /^\((\d+),(\d+)\)-\((\d+),(\d+)\)$/ or die;
30                 $c->move_to($xp + (.9*$x1+.1*$x2)*$u, $yp + (.9*$y1+.1*$y2)*$u);
31                 $c->line_to($xp + (.9*$x2+.1*$x1)*$u, $yp + (.9*$y2+.1*$y1)*$u);
32                 $c->stroke;
33         }
34
35         $xp += 5*$u;
36         if ($xp + 5*$u > $pw) {
37                 $xp = $u;
38                 $yp += 5*$u;
39                 if ($yp + 5*$u > $ph) {
40                         $c->show_page;
41                         $yp = $u;
42                 }
43         }
44         $n++;
45 }
46
47 print "Output $n matchograms.\n";