From bdb18b72914a9217fd65e3fe6e3e3c38071ba941 Mon Sep 17 00:00:00 2001
From: Revar Desmera <revarbat@gmail.com>
Date: Mon, 31 Jul 2023 19:51:08 -0700
Subject: [PATCH 1/2] Gear Figure view fixes.

---
 gears.scad | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gears.scad b/gears.scad
index 91887ed..f90b928 100644
--- a/gears.scad
+++ b/gears.scad
@@ -270,7 +270,7 @@ function _inherit_gear_thickness(thickness) =
 // Subsection: Ring Gears (Internal Gears)
 //   A ring gear (or internal gear) is a gear where the teeth are on the inside of a circle.  Such gears must be mated
 //   to a regular (external) gear, which rotates around the inside.
-// Figure(2D,Med,NoAxes,VPT=[0.491171,1.07815,0.495977],VPD=292.705): A interior or ring gear (yellow) with a mating spur gear (blue)
+// Figure(2D,Med,NoAxes,VPT=[0.491171,1.07815,0.495977],VPR=[0,0,0],VPD=292.705): A interior or ring gear (yellow) with a mating spur gear (blue)
 //   teeth1=18;
 //   teeth2=30;
 //   ps1=undef;
@@ -290,7 +290,7 @@ function _inherit_gear_thickness(thickness) =
 //    teeth is small or the teeth counts of the ring gear and spur gear are too close together.  The mating spur gear must
 //    have few enough teeth so that the teeth don't interfere on the other side of the ring.  Very small spur gears can interfere
 //    on the tips of the ring gear's teeth.  
-// Figure(2D,Med,NoAxes,VPT=[-1.16111,0.0525612,0.495977],VPD=213.382): The red regions show interference between the two gears: the 18 tooth spur gear does not fit inside the 20 tooth ring gear. 
+// Figure(2D,Med,NoAxes,VPT=[-1.16111,0.0525612,0.495977],VPR=[0,0,0],VPD=213.382): The red regions show interference between the two gears: the 18 tooth spur gear does not fit inside the 20 tooth ring gear. 
 //    teeth1=18;
 //    teeth2=20;
 //    ps1=undef;

From b0094b65b5c9756077ed38c45929e091afdef175 Mon Sep 17 00:00:00 2001
From: Revar Desmera <revarbat@gmail.com>
Date: Thu, 3 Aug 2023 17:10:21 -0700
Subject: [PATCH 2/2] Fix for #1200

---
 skin.scad | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/skin.scad b/skin.scad
index 419706d..772478e 100644
--- a/skin.scad
+++ b/skin.scad
@@ -636,6 +636,11 @@ function skin(profiles, slices, refine=1, method="direct", sampling, caps, close
 //        ]
 //   ];
 //   linear_sweep(path, texture=tex, tex_size=[5,5], h=40);
+// Example: Textured with twist and scale.
+//   linear_sweep(regular_ngon(n=3, d=50),
+//       texture="rough", h=100, tex_scale=2,
+//       tex_size=[20,20], style="min_edge",
+//       convexity=10, scale=0.2, twist=120);
 // Example: As Function
 //   path = glued_circles(r=15, spread=40, tangent=45);
 //   vnf = linear_sweep(
@@ -664,7 +669,7 @@ function skin(profiles, slices, refine=1, method="direct", sampling, caps, close
 //  linear_sweep(circle(20), texture=tile,
 //               tex_size=[30,20],tex_scale=15,
 //               h=40,convexity=4);
-// Example: This example shoes some endcap polygons missing and a spurious triangle
+// Example: This example shows some endcap polygons missing and a spurious triangle
 //   shape = skin([rect(2/5),
 //                 rect(2/3),
 //                 rect(2/5)],
@@ -3634,14 +3639,15 @@ function _textured_linear_sweep(
                                     let(
                                         v = (i + (ti/texcnt.y)) / counts.y,
                                         sc = lerp([1, 1, 1], scale, v),
-                                        mat = down((v-0.5)*h) *
+                                        mat = up((v-0.5)*h) *
                                               scale(sc) *
                                               zrot(twist*v)
-                                    ) apply(mat, tile_rows[ti])
+                                    ) apply(mat, tile_rows[texcnt.y-ti-1])
                                 ]
                             ) vnf_vertex_array(
                                 tiles, caps=false, style=style,
-                                col_wrap=true, row_wrap=false
+                                col_wrap=true, row_wrap=false,
+                                reverse=true
                             )
                     ) vnf
                 ]),
@@ -3670,8 +3676,10 @@ function _textured_linear_sweep(
                         ]
                     ) nupath
                 ],
-                bot_vnf = !caps[0] || brgn==[[]] ? EMPTY_VNF:vnf_from_region(brgn, down(h/2), reverse=true),
-                top_vnf = !caps[1] || brgn==[[]] ? EMPTY_VNF:vnf_from_region(brgn, tmat, reverse=false)
+                bot_vnf = !caps[0] || brgn==[[]] ? EMPTY_VNF
+                    : vnf_from_region(brgn, down(h/2), reverse=true),
+                top_vnf = !caps[1] || brgn==[[]] ? EMPTY_VNF
+                    : vnf_from_region(brgn, tmat, reverse=false)
             ) vnf_join([walls_vnf, bot_vnf, top_vnf])
         ]),
         skmat = down(h/2) * skew(sxz=shift.x/h, syz=shift.y/h) * up(h/2),