X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=commitid.scad.pl;h=983a4abc08abf4a5b8423705bb59058357f35d5b;hb=fc3343d1347461bcf1f9233db083a9dac66c7c34;hp=6a4aa1f382eff1a8afc00c36687b087d9d03f760;hpb=8f459481b4ea0cbb254247b92da74c294128bfc4;p=reprap-play.git diff --git a/commitid.scad.pl b/commitid.scad.pl index 6a4aa1f..983a4ab 100755 --- a/commitid.scad.pl +++ b/commitid.scad.pl @@ -81,9 +81,11 @@ # 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 @@ -93,6 +95,9 @@ # 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 # ------------------- @@ -100,10 +105,14 @@ # 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]. # @@ -159,6 +168,8 @@ # # 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 @@ -279,13 +290,25 @@ sub gentextmodule_demo_start_batch () { $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 ($@) { @@ -309,7 +332,7 @@ 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); @@ -545,7 +568,7 @@ sub do_some_best ($$) { 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"; @@ -587,7 +610,7 @@ END p $_ foreach @do; p "}\n"; - gen3dmodule "Commitid_$modname", @argl; + gen3dmodule "Commitid_$modname", 'max_sz', @argl; } sub do_git_best () {