chiark / gitweb /
commitid: Best in 3D too
[reprap-play.git] / commitid.scad.pl
index a0c33e4121c6deac5ca8c3ba6f199462748d0cc3..3b20d6275ec4a11a25f4b01e85cc0386141b1664 100755 (executable)
@@ -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 () {