From 2efb9cfab8015cd4cd7230e840163c7fc49c028b Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 27 Jul 2024 12:28:09 -0400 Subject: [PATCH] add proper negative extrusion handling (normals and chamfer reversal) --- src/geo/polygon.js | 19 +++++++++++++++++++ src/main/mesh.js | 7 ++++--- src/mesh/sketch.js | 2 +- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/geo/polygon.js b/src/geo/polygon.js index b7e64a4d..c2583f6e 100644 --- a/src/geo/polygon.js +++ b/src/geo/polygon.js @@ -2184,9 +2184,22 @@ class Polygon { return earcut.map(face => face.points.map(p => [ p.x, p.y, p.z ])).flat().flat(); } + let inv = z < 0; + + if (inv) { + z = -z; + } + let chamfer = opt.chamfer || 0; let chamfer_top = opt.chamfer_top || chamfer; let chamfer_bottom = opt.chamfer_bottom || chamfer; + + if (inv) { + let tmp = chamfer_top; + chamfer_top = chamfer_bottom; + chamfer_bottom = tmp; + } + let zadd = (typeof opt === 'number' ? opt : opt.zadd || 0); // z bottom let obj = []; // flat output vertex array (float-x,float-y,float-z,...) let top_face = earcut; @@ -2251,6 +2264,12 @@ class Polygon { obj.appendAll(inner.ribbonZ(rib, z_side_bottom, true)); } + if (inv) { + for (let i=2; i