X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=commitid.scad.pl;h=3b20d6275ec4a11a25f4b01e85cc0386141b1664;hb=ec68479632e04d4675682e9bdc1b87d6b720a705;hp=a0c33e4121c6deac5ca8c3ba6f199462748d0cc3;hpb=86771df366bcdd59a227dca70bb1cf6279241db8;p=reprap-play.git diff --git a/commitid.scad.pl b/commitid.scad.pl index a0c33e4..3b20d62 100755 --- a/commitid.scad.pl +++ b/commitid.scad.pl @@ -133,6 +133,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"; @@ -154,10 +163,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); @@ -390,8 +396,11 @@ sub do_git () { sub do_some_best ($$) { my ($modname, $formre) = @_; my $fullmodname = "Commitid_${modname}_2D"; - p "module $fullmodname(max_sz) {\n"; - p ' sc_max = $Commitid_max_best_scale ? $Commitid_max_best_scale : 2;'."\n"; + 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 { @@ -410,11 +419,13 @@ sub do_some_best ($$) { my $id = "${form}_r${rot}"; p " sc_$id = min(sc_max"; foreach my $xy (qw(0 1)) { - p ",max_sz[$xy]/sz_$form","[",(($xy xor $rot)+0),"]"; + p ",sz[$xy]/sz_$form","[",(($xy xor $rot)+0),"]"; } p ");\n"; - push @do, " if (sc_$id >= 1.0) {\n"; - push @do, " scale(sc_$id)\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"; @@ -427,6 +438,8 @@ sub do_some_best ($$) { END p $_ foreach @do; p "}\n"; + + gen3dmodule "Commitid_$modname", @argl; } sub do_git_best () {