From d9669daa23ac69bdd05d2afc2b1ae69644f03a1a Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 6 Feb 2016 19:56:33 +0000 Subject: [PATCH] commitid.scad.pl: Provide _M mirrored versions of everything (nfc for existing uses) --- commitid.scad.pl | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/commitid.scad.pl b/commitid.scad.pl index 0eac05d..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 @@ -285,12 +296,19 @@ sub argl_actual (@) { join ',', map { m/=/ ? $` : $_ } @_; } sub gen3dmodule ($@) { my ($modb,$size,@argl) = (@_); $size ||= "${modb}_sz()"; - p " // size = $size\n"; - p "module ${modb}(".argl_formal(@argl)."){\n"; - p " d=Commitid_depth();\n"; - p " translate([0,0,-d]) linear_extrude(height=d*2)\n"; - p " ${modb}_2D(".argl_actual(@argl).");\n"; - p "}\n"; + 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 ($@) { -- 2.30.2