chiark / gitweb /
commitid-cube-test.scad: test cube with sunken top and bottom
[reprap-play.git] / commitid.scad.pl
index e1caf36d28b3858d8228713f5a0ab3878f24c59b..093a8fbca913d2af46a375a49ea9e0bed506c2d2 100755 (executable)
@@ -3,9 +3,24 @@ use strict;
 
 $SIG{__WARN__} = sub { die @_; };
 
+#  xxx much of the comment below is TODO
+
 # We generate a physical indication of which commit was used.
 #
-# We can generate three forms:
+# We provide for a scaling factor
+#
+#    $Commitid_pixelsz = 0.4;
+#    $Commitid_depth = 1.5; // in pixels
+#
+# For each form we have
+#
+#    module Commitid_Form_2D(pixelsz=0.4)
+#    module Commitid_Form(pixelsz=0.4, depth=pixelsz)
+#
+#    function Commitid_Form_size(pixelsz=$Commitid_pixelsz) => [ xsz, ysz ]
+#         
+#
+# We can generate these forms:
 #
 #   Tiny3:
 #   Tiny4:
@@ -25,6 +40,13 @@ $SIG{__WARN__} = sub { die @_; };
 #            Tiny4Q   10
 #                     70
 #
+#   Git4
+#   Git6
+#   Git8
+#       git-rev-parse HEAD
+#       eg
+#            Git6    82f2a2
+
 #   Small4
 #   Small6
 #   Small8
@@ -34,9 +56,12 @@ $SIG{__WARN__} = sub { die @_; };
 #            Small6     1070
 #                     82f2a2
 
+sub p { print @_ or die $!; }
+
 sub parsefont () {
     my %cellmap;
-    while (<DATA>) {
+    for (;;) {
+       $_ = <DATA> // die;
        last if %cellmap && !m/\S/;
        next unless m/\S/;
        chomp;
@@ -48,16 +73,17 @@ sub parsefont () {
        next unless m/\S/;
        my @chrs = split / /, $_;
        <DATA> !~ m/\S/ or die;
-       foreach my $row (0..4) {
+       foreach my $row (reverse 0..4) {
            $_ = <DATA>;
            chomp;
            s{^}{ };
-           $_ .= ' ' x (@chrs * 4);
+           $_ .= ' ' x 8;
            m{\S/\S} and die;
            s{/(?=\s)}{L}g;
            s{/(?=\S)}{r}g;
            s{\\(?=\s)}{l}g;
            s{\\(?=\S)}{R}g;
+           p "// $_\n";
            foreach my $chr (@chrs) {
                s{^ }{} or die "$chr $_ ?";
                foreach my $col (0..2) {
@@ -66,8 +92,8 @@ sub parsefont () {
                    } elsif (s{^\S}{}) {
                        my $f = $cellmap{$&};
                        die unless $f;
-                       $f =~ s/\b\d/ sprintf '%x', $col*2 + $& /ge;
-                       $f =~ s/\d\b/ sprintf '%x', $row*2 + $& /ge;
+                       $f =~ s/\b\d/ sprintf '%05d', $col*4000 + $&*2050 /ge;
+                       $f =~ s/\d\b/ sprintf '%05d', $row*4000 + $&*2050 /ge;
                        push @{ $chrpolys{$chr} }, [ split / /, $f ];
                    } else {
                        die "$_ ?";
@@ -77,45 +103,47 @@ sub parsefont () {
            die "$_ ?" if m{\S};
        }    
     }
-    foreach my $polys (values %chrpolys) {
-       my %edges;
-       foreach my $p (@$polys) {
-           foreach my $ei (0..$#$p) {
-               my $e = $p->[$ei].$p->[($ei+1) % @$p];
-               die if $edges{$e};
-               $edges{$e} = [ $p, $ei ];
-           }
-       }
-      AGAIN: {
-           foreach my $pa (@$polys) {
-               foreach my $eai (0..$#$pa) {
-                   my $ear = $pa->[ ($eai+1) % @$pa ].$pa->[$eai];
-                   my $ebi = $edges{$ear};
-                   next unless $ebi;
-                   my $pb;
-                   ($pb, $ebi) = @$ebi;
-#                  print "# merging $eai $ebi\n";
-                   splice @$pb, $ebi, 1;
-                   splice @$pa, $eai, 1, @$pb;
-                   @$pb = ( );
-                   next AGAIN;
-               }
+
+    my @demo;
+    my $democols = 6;
+    foreach my $chr (sort keys %chrpolys) {
+       my $chrx = sprintf '%#x', ord $chr;
+       my $mod = "Commitid__chr_$chrx";
+       p "module $mod () {\n";
+       foreach my $poly (@{ $chrpolys{$chr} }) {
+           p " polygon([";
+           my $delim = "";
+           foreach my $pt (@$poly) {
+               p $delim;
+               $pt =~ s{\d{5}}{$&,};
+               $pt =~ s{\b\d}{$&.}g;
+               p "[$pt]";
+               $delim = ',';
            }
+           p "]);\n";
        }
-#      @$polys = grep { @$_ } @$polys;
+       p "}\n";
+       my $px = @demo % $democols;
+       my $py = int(@demo / $democols);
+       push @demo, " translate([$px * 1.600, $py * 2.400]) $mod ();\n";
     }
-                   
-    use Data::Dumper;
-    print Dumper(\%chrpolys);
+    p "module Commitid_FontDemo(){\n";
+    p $_ foreach @demo;
+    p "}\n";
+
+#    use Data::Dumper;
+#    print Dumper(\%chrpolys);
 }
 
 parsefont();
 
+#p "Commitid_FontDemo();\n";
+
 __DATA__
 
 # 00 20 22 02
-l 00 20 22
-r 00 20 02
+l 00 20 02
+r 00 20 22
 L 00 22 02
 R 20 22 02
 > 00 20 22 02 11
@@ -123,17 +151,17 @@ R 20 22 02
 
 0 1 2 3 4 5 6 7 8 9
 
-/#\  #  ##\ ##\ # # ### /## ### /#\ /#\
-# #  #    #   # # # #   #     # # # # #
-# #  #  /#/ ### ### ##\ ##\  // >#< \##
+/#\  r  /#\ ##\ # # ### //  ### /#\ /#\
+# # /#    #   # # # #   #     # # # # #
+# #  #  /#/ ##< \## ##\ ##\  // >#< \##
 # #  #  #     #   #   # # #  #  # #   #
-\#/  #  ### ##/   # ##/ \#/  #  \#/ ##/
+\#/ /#\ ### ##/   # ##/ \#/  #  \#/ ##/
 
 a b c d e f
 
     #         #     /##
-/## ##\ /## /## /## #
-# # # # #   # # # # ###
+/## ##\ /## /## /#\ #
+# # # # #   # # #r/ ###
 # # # # #   # # #/  #
-\## ##/ \## \## ### #
+\## ##/ \## \## \#/ #