X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=commitid.scad.pl;h=65963be2734aca3fa7918f741e683f849c9f5230;hp=e51318aaf26ba755d3be754fd6a867f64770898f;hb=c66f67af18830c44747f7bfc3819f86c36a97e47;hpb=f8a450af5183bd37b15ebb2cd85047c45066f474 diff --git a/commitid.scad.pl b/commitid.scad.pl index e51318a..65963be 100755 --- a/commitid.scad.pl +++ b/commitid.scad.pl @@ -15,7 +15,7 @@ $SIG{__WARN__} = sub { die @_; }; # --git generate git commit indications, as shown below # (this is the default if no strings are requested with -t) # -# --git=object +# --git=objid # generate git commit indication based on commit object only # (ie avoid counting commits) # @@ -34,6 +34,15 @@ $SIG{__WARN__} = sub { die @_; }; # $Commitid_scale if not set, we use 1.0 } together # $Commitid_depth if not set, we use xy pixel size from above / 2 # $Commitid_depth_scale if not set, we use 1.0 (multiplies depth above) +# $Commitid_max_best_scale if not set, we use 2.0 (max mult of xy in Best) +# +# We have auto-sizing modules: +# +# module Commitid_BestCount_2D(max_sz, margin=Commitid_pixelsz()) { ... } +# module Commitid_BestCount (max_sz, margin=Commitid_pixelsz()) { ... } +# module Commitid_BestObjid_2D(max_sz, margin=Commitid_pixelsz()) { ... } +# module Commitid_BestObjid (max_sz, margin=Commitid_pixelsz()) { ... } +# // max_sz should be [x,y] # # For each form we have # @@ -64,7 +73,10 @@ $SIG{__WARN__} = sub { die @_; }; # padded with zeroes; if too long we reduce mod 10^n # eg if the count is 123456 # Small5 3456* -# Small8 __123456 (where _ are spaces) +# Small8 _*123456 (where _ are spaces) +# the git objectid is included if it will fit +# unambiguously and usefully eg +# Small9 ab*123456 # # Small2S Small4S ... Small10S: # Small3T Small9T: @@ -129,6 +141,15 @@ sub gentextmodule_demo_start_batch () { $gtm_demo_i++; } +sub gen3dmodule ($@) { + my ($modb,@argl) = (@_); + p "module ${modb}(".(join ', ', @argl)."){\n"; + p " d=Commitid_depth();\n"; + p " translate([0,0,-d]) linear_extrude(height=d*2)\n"; + p " ${modb}_2D(".(join ',', map { m/=/ ? $` : $_ } @argl).");\n"; + p "}\n"; +} + sub gentextmodule ($@) { my ($form, @lines) = @_; my $modb = "Commitid_$form"; @@ -150,10 +171,7 @@ sub gentextmodule ($@) { } p " }\n"; p "}\n"; - p "module ${modb}(){\n"; - p " d=Commitid_depth();\n"; - p " translate([0,0,-d]) linear_extrude(height=d*2) ${modb}_2D();\n"; - p "}\n"; + gen3dmodule($modb); p sprintf "function %s_sz() = Commitid__scale() * 0.1 * [ %d, %d ];\n", $modb, 2 * ($cols * 4 - 1), 2 * (@lines * 6 - 1); @@ -355,8 +373,16 @@ sub do_git () { foreach my $sz (2..10) { gentextmodule_demo_start_batch(); - genform_plusq("Small$sz", rjustt($sz, $git_count, $git_dirty)) - if defined $git_count; + if (defined($git_count)) { + my $smallstr = rjustt($sz, $git_count, $git_dirty); + if (defined($git_object) && $sz >= length($git_count) + 3) { + $smallstr = $git_object; + $smallstr .= ($git_dirty || ' '); + $smallstr .= $git_count; + $smallstr = rjustt($sz, $smallstr); + } + genform_plusq("Small$sz", $smallstr); + } genform_plusq("Git$sz", ljustt($sz, $git_object, $git_dirty)) if defined $git_object; @@ -377,7 +403,13 @@ sub do_git () { sub do_some_best ($$) { my ($modname, $formre) = @_; - p "module Commitid_$modname(max_sz) {\n"; + my $fullmodname = "Commitid_${modname}_2D"; + my @argl = qw(max_sz margin=Commitid_pixelsz()); + p "module $fullmodname(".(join ', ', @argl).") {\n"; + my $mbs = '$Commitid_max_best_scale'; + p " sc_max = $mbs ? $mbs : 2;\n"; + p " sz = max_sz - 2*[margin,margin];\n"; + my @do; foreach my $f ( sort { $b->{Chars} <=> $a->{Chars} or @@ -389,9 +421,33 @@ sub do_some_best ($$) { } @forms ) { - p "// $f->{Form}\n"; + my $form = $f->{Form}; + p " sz_$form = Commitid_${form}_sz();\n"; + foreach my $rot (qw(0 1)) { + my $id = "${form}_r${rot}"; + p " sc_$id = min(sc_max"; + foreach my $xy (qw(0 1)) { + p ",sz[$xy]/sz_$form","[",(($xy xor $rot)+0),"]"; + } + p ");\n"; + push @do, " if (sc_$id >= 1.0"; + push @do, " && sc_$id >= sc_${form}_r1" if !$rot; + push @do, ") {\n"; + push @do, " translate([margin,margin]) scale(sc_$id)\n"; + push @do, " rotate(90) translate([0,-sz_$form"."[1]])\n" if $rot; + push @do, " Commitid_${form}_2D();\n"; + push @do, " } else"; + } } + push @do, <