X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=commitid.scad.pl;h=aced30a46fa7dfbbb2d45b81c6fb27cb80737063;hb=cb98ba852eb7e49ac77e6b949a6e7ae0471ebfab;hp=da6341a9915ae71acae84f521980bf5ddc5f9443;hpb=4a3cded2aa91641068819ffd7ef8885ca396ec14;p=reprap-play.git diff --git a/commitid.scad.pl b/commitid.scad.pl index da6341a..aced30a 100755 --- a/commitid.scad.pl +++ b/commitid.scad.pl @@ -7,18 +7,21 @@ $SIG{__WARN__} = sub { die @_; }; # We generate a physical indication of which commit was used. # -# We provide for a scaling factor -# -# $Commitid_pixelsz = 0.4; -# $Commitid_depth = 1.5; // in pixels +# We provide for scaling factors with dynamic variables: +# $Commitid_pixelsz if not set, we use 0.4 } multiplied +# $Commitid_scale if not set, we use 1.0 } together +# $Commitid_depth if not set, we use xy pixel size from above +# $Commitid_depth_scale if not set, we use 1.0 (multiplies depth above) # # For each form we have # -# module Commitid_Form_2D(pixelsz=0.4) -# module Commitid_Form(pixelsz=0.4, depth=pixelsz) +# module Commitid_Form_2D(.4) +# module Commitid_Form() +# +# And we provide # -# function Commitid_Form_size(pixelsz=$Commitid_pixelsz) => [ xsz, ysz ] -# +# function Commitid_pixelsz() // $Commitid_pixelsz * $Commitid_scale +# function Commitid_depth() // see above # # We can generate these forms: # @@ -58,6 +61,45 @@ $SIG{__WARN__} = sub { die @_; }; sub p { print @_ or die $!; } +p <<'END'; +// *** AUTOGENERATED - DO NOT EDIT *** // +function Commitid_pixelsz() = + ($Commitid_pixelsz ? $Commitid_pixelsz : 0.4) * + ($Commitid_scale ? $Commitid_scale : 1.0); +function Commitid_depth() = + ($Commitid_depth ? $Commitid_depth : Commitid_pixelsz()) * + ($Commitid_depth_scale ? $Commitid_depth_scale : 1.0); +function Commitid__scale() = + Commitid_pixelsz() / 0.1; +END + +sub chrmodname ($) { + my ($chr) = @_; + my $chrx = sprintf '%#x', ord $chr; + return "Commitid__chr_$chrx"; +} + +sub gentextmodule ($@) { + my ($modulename, @lines) = @_; + p "module $modulename(){\n"; + p " scale(Commitid__scale()){\n"; + my $y = @lines; + foreach my $line (@lines) { + $y--; + my $x = 0; + foreach my $chr (split //, $line) { + next if $chr !~ m/\S/; + p sprintf " translate([%d * 0.8, %d * 1.2]) %s();\n", + $x, $y, chrmodname $chr; + $x++; + } + } + p " }\n"; + p "}\n"; +} + +our @demo; + sub parsefont () { my %cellmap; for (;;) { @@ -71,6 +113,7 @@ sub parsefont () { my %chrpolys; while () { next unless m/\S/; + chomp; my @chrs = split / /, $_; !~ m/\S/ or die; foreach my $row (reverse 0..4) { @@ -92,8 +135,8 @@ sub parsefont () { } elsif (s{^\S}{}) { my $f = $cellmap{$&}; die unless $f; - $f =~ s/\b\d/ sprintf '%05d', $col*4000 + $&*2050 /ge; - $f =~ s/\d\b/ sprintf '%05d', $row*4000 + $&*2050 /ge; + $f =~ s/\b\d/ sprintf '%05d', $col*2000 + $&*1025 /ge; + $f =~ s/\d\b/ sprintf '%05d', $row*2000 + $&*1025 /ge; push @{ $chrpolys{$chr} }, [ split / /, $f ]; } else { die "$_ ?"; @@ -104,11 +147,10 @@ sub parsefont () { } } - my @demo; + my $demo = ''; my $democols = 6; foreach my $chr (sort keys %chrpolys) { - my $chrx = sprintf '%#x', ord $chr; - my $mod = "Commitid__chr_$chrx"; + my $mod = chrmodname $chr; p "module $mod () {\n"; foreach my $poly (@{ $chrpolys{$chr} }) { p " polygon(["; @@ -123,21 +165,14 @@ sub parsefont () { p "]);\n"; } p "}\n"; - my $px = @demo % $democols; - my $py = int(@demo / $democols); - push @demo, " translate([$px * 1.600, $py * 2.400]) $mod ();\n"; + $demo .= $chr; } - p "module Commitid_FontDemo(){\n"; - p $_ foreach @demo; - p "}\n"; - -# use Data::Dumper; -# print Dumper(\%chrpolys); + @demo = reverse $demo =~ m{.{1,$democols}}go; } parsefont(); -#p "Commitid_FontDemo();\n"; +gentextmodule('Commitid_FontDemo', @demo); __DATA__