chiark / gitweb /
toplevel-find: Support new //// toplevels-from: which precedes a include
[reprap-play.git] / commitid.scad.pl
index 0eac05d60559242a18db26b5e5042e645d6219e9..983a4abc08abf4a5b8423705bb59058357f35d5b 100755 (executable)
 # 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
 # -------------------
 # 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
@@ -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 ($@) {