# General form of provided openscad modules
# -----------------------------------------
#
-# module Commitid_MODULE_2D(...) A collection of polygons forming characters
-# module Commitid_MODULE(...) The above, extruded up and down in Z
-# function Commitid_MODULE_sz() A 2-vector giving the X,Y size
+# module Commitid_MODULE_2D(...) Collection of polygons forming characters
+# module Commitid_MODULE(...) The above, extruded up and down in Z
+# module Commitid_MODULE_M_2D(...) Mirror writing
+# module Commitid_MODULE_M(...) 3D mirror writing
+# function Commitid_MODULE_sz() A 2-vector giving the X,Y size
#
# Except for *Best* modules, the XY origin is in the bottom left
# corner without any margin. Likewise Commitid_MODULE_sz does not
# the model. This means it's convenient to either add or subtract from
# a workpiece whose face is in the XY plane.
#
+# The _M versions are provided to avoid doing inconvenient translation
+# and rotation to get the flipped version in the right place.
+#
#
# Autoscaling modules
# -------------------
# These modules take a specification of the available XY space, and
# select and generate a suitable specific identification layout:
#
-# 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())
+# module Commitid_BestCount_2D (max_sz, margin=Commitid_pixelsz())
+# module Commitid_BestCount (max_sz, margin=Commitid_pixelsz())
+# module Commitid_BestCount_M_2D(max_sz, margin=Commitid_pixelsz())
+# module Commitid_BestCount_M (max_sz, margin=Commitid_pixelsz())
+# module Commitid_BestObjid_2D (max_sz, margin=Commitid_pixelsz())
+# module Commitid_BestObjid (max_sz, margin=Commitid_pixelsz())
+# module Commitid_BestObjid_M_2D(max_sz, margin=Commitid_pixelsz())
+# module Commitid_BestObjid_M (max_sz, margin=Commitid_pixelsz())
#
# max_sz should be [x,y].
#
#
# module Commitid_LAYOUT_2D()
# module Commitid_LAYOUT()
+# module Commitid_LAYOUT_M_2D()
+# module Commitid_LAYOUT_M()
# function Commitid_LAYOUT_sz()
#
# Here LAYOUT is one of the following (giving for example, `module
$gtm_demo_i++;
}
+sub argl_formal (@) { join ', ', @_; }
+sub argl_actual (@) { join ',', map { m/=/ ? $` : $_ } @_; }
+
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";
+ my ($modb,$size,@argl) = (@_);
+ $size ||= "${modb}_sz()";
+ p "module ${modb}_M_2D(".argl_formal(@argl)."){\n";
+ p " translate([${size}[0],0])\n";
+ p " mirror([1,0,0])\n";
+ p " ${modb}_2D(".argl_actual(@argl).");\n";
+ p "};\n";
+ foreach my $mir ('','_M') {
+ my $mm = "${modb}${mir}";
+ p "module ${mm}(".argl_formal(@argl)."){\n";
+ p " d=Commitid_depth();\n";
+ p " translate([0,0,-d]) linear_extrude(height=d*2)\n";
+ p " ${mm}_2D(".argl_actual(@argl).");\n";
+ p "}\n";
+ }
}
sub gentextmodule ($@) {
}
p " }\n";
p "}\n";
- gen3dmodule($modb);
+ gen3dmodule($modb,'');
p sprintf "function %s_sz() = Commitid__scale() * 0.1 * [ %d, %d ];\n",
$modb, 2 * ($cols * 4 - 1), 2 * (@lines * 6 - 1);
if ($do_git =~ m/o/) {
$git_object = gitoutput qw(rev-parse HEAD);
}
+ print STDERR join ' ', map { $_ // '?' }
+ "-- commitid", $git_object, $git_dirty, $git_count, "--\n";
foreach my $sz (2..10) {
gentextmodule_demo_start_batch();
my ($modname, $formre) = @_;
my $fullmodname = "Commitid_${modname}_2D";
my @argl = qw(max_sz margin=Commitid_pixelsz());
- p "module $fullmodname(".(join ', ', @argl).") {\n";
+ p "module $fullmodname(".argl_formal(@argl).") {\n";
my $mbs = '$Commitid_max_best_scale';
p " sc_max = $mbs ? $mbs : 2;\n";
p " sz = max_sz - 2*[margin,margin];\n";
p $_ foreach @do;
p "}\n";
- gen3dmodule "Commitid_$modname", @argl;
+ gen3dmodule "Commitid_$modname", 'max_sz', @argl;
}
sub do_git_best () {
0 1 2 3 4 5 6 7 8 9
-/#\ r /#\ ##\ # # ### // ### /#\ /#\
+/#\ r /#\ ##\ # # ### /#/ ### /#\ /#\
# # /# # # # # # # # # # # #
# # # /#/ ##< \## ##\ ##\ // >#< \##
# # # # # # # # # # # # #