chiark / gitweb /
filamentspool: ArmEnd nondove commitid
[reprap-play.git] / commitid.scad.pl
index c1d3a4c9ea36c31dc07f5241210419de990015bb..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
@@ -283,12 +294,21 @@ sub argl_formal (@) { join ', ', @_; }
 sub argl_actual (@) { join ',', map { m/=/ ? $` : $_ } @_; }
 
 sub gen3dmodule ($@) {
-    my ($modb,@argl) = (@_);
-    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";
+    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 ($@) {
@@ -312,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);
@@ -590,7 +610,7 @@ END
     p $_ foreach @do;
     p "}\n";
 
-    gen3dmodule "Commitid_$modname", @argl;
+    gen3dmodule "Commitid_$modname", 'max_sz', @argl;
 }
 
 sub do_git_best () {