Skip to content

Fix fully covered region detection for inverted pyramid shapes#166

Merged
jgphilpott merged 5 commits intomainfrom
copilot/fix-inverted-pyramid-skin-patch
Feb 28, 2026
Merged

Fix fully covered region detection for inverted pyramid shapes#166
jgphilpott merged 5 commits intomainfrom
copilot/fix-inverted-pyramid-skin-patch

Conversation

Copy link
Contributor

Copilot AI commented Feb 28, 2026

  • Understand the issue: inverted pyramid transition layers not generating O-shape skin + center FILL
  • Identify root cause: identifyFullyCoveredRegions in cavity.coffee only handles smaller-region-from-above case
  • Add test for inverted pyramid fully covered region detection
  • Fix identifyFullyCoveredRegions to also handle smaller-region-from-below case
  • Regenerate pyramid gcode examples
  • Run tests to verify fix (31/31 exposure tests passing)
  • Refactor two near-identical passes into shared findCoveredRegions helper (review comment 2867625981)
  • Remove unused layer52Started variable from test (review comment 2867625986)
  • touchesBoundary guard centralized in helper, consistently applied to candidate in both passes (review comment 2867625988)

✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Co-authored-by: jgphilpott <4128208+jgphilpott@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix skin patch generation for inverted pyramid examples Fix fully covered region detection for inverted pyramid shapes Feb 28, 2026
@jgphilpott jgphilpott marked this pull request as ready for review February 28, 2026 16:30
Copilot AI review requested due to automatic review settings February 28, 2026 16:30
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates cavity “fully covered region” detection so transition layers also handle inverted step geometries (smaller region below the transition), producing the intended O-shaped skin + center infill behavior for inverted pyramids and similar shapes.

Changes:

  • Add a symmetric second pass in identifyFullyCoveredRegions to detect fully covered regions when the smaller covering region is below the current layer.
  • Add a regression test that slices an inverted two-slab mesh and asserts center-region behavior on the transition layer.
  • Regenerate a large set of example/benchmark G-code outputs and bump three patch version.

Reviewed changes

Copilot reviewed 86 out of 87 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
src/slicer/skin/exposure/cavity.coffee Adds a second-pass fully-covered-region detection for inverted geometries.
src/slicer/skin/exposure/cavity.test.coffee Adds a regression test for inverted-pyramid transition-layer behavior.
resources/gcode/support/tree/dome/upright.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/support/normal/dome/upright.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/skin/pyramid/cylindrical-inverted.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/skin/pyramid/block-inverted.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/skin/dome/upright.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/triangles/sphere/0%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/triangles/sphere/10%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/triangles/sphere/20%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/triangles/sphere/30%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/triangles/sphere/40%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/triangles/sphere/50%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/triangles/sphere/60%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/triangles/sphere/70%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/triangles/sphere/80%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/triangles/sphere/90%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/triangles/sphere/100%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/spiral/sphere/0%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/spiral/sphere/10%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/spiral/sphere/20%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/spiral/sphere/30%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/spiral/sphere/40%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/spiral/sphere/50%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/spiral/sphere/60%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/spiral/sphere/70%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/spiral/sphere/80%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/spiral/sphere/90%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/spiral/sphere/100%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/lightning/sphere/0%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/lightning/sphere/10%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/lightning/sphere/20%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/lightning/sphere/30%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/lightning/sphere/40%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/lightning/sphere/50%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/lightning/sphere/60%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/lightning/sphere/70%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/lightning/sphere/80%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/lightning/sphere/90%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/lightning/sphere/100%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/hexagons/sphere/0%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/hexagons/sphere/10%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/hexagons/sphere/20%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/hexagons/sphere/30%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/hexagons/sphere/40%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/hexagons/sphere/50%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/hexagons/sphere/60%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/hexagons/sphere/70%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/hexagons/sphere/80%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/hexagons/sphere/90%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/hexagons/sphere/100%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/gyroid/sphere/0%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/gyroid/sphere/10%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/gyroid/sphere/20%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/gyroid/sphere/30%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/gyroid/sphere/40%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/gyroid/sphere/50%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/gyroid/sphere/60%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/gyroid/sphere/70%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/gyroid/sphere/80%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/gyroid/sphere/90%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/gyroid/sphere/100%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/grid/sphere/0%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/grid/sphere/10%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/grid/sphere/20%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/grid/sphere/30%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/grid/sphere/40%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/grid/sphere/50%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/grid/sphere/60%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/grid/sphere/70%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/grid/sphere/80%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/grid/sphere/90%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/grid/sphere/100%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/concentric/sphere/0%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/concentric/sphere/10%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/concentric/sphere/20%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/concentric/sphere/30%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/concentric/sphere/40%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/concentric/sphere/50%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/concentric/sphere/60%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/concentric/sphere/70%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/concentric/sphere/80%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/concentric/sphere/90%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/infill/concentric/sphere/100%.gcode Regenerated G-code (LFS pointer updated).
resources/gcode/benchmarks/benchy.low-poly.gcode Regenerated benchmark G-code (LFS pointer updated).
package.json Bumps three dependency patch version.
package-lock.json Updates lockfile for three@0.183.2.

@jgphilpott
Copy link
Owner

@copilot apply changes based on the comments in this thread

…d layer52Started

Co-authored-by: jgphilpott <4128208+jgphilpott@users.noreply.github.com>
@jgphilpott jgphilpott merged commit 3a64932 into main Feb 28, 2026
1 check passed
@jgphilpott jgphilpott deleted the copilot/fix-inverted-pyramid-skin-patch branch February 28, 2026 17:04
Copilot AI mentioned this pull request Mar 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants