Merged
Conversation
added 15 commits
December 28, 2025 23:12
Adds a complete system for generating connectable Gridfinity baseplates that tile to fill drawers of any size: - GridfinityBaseplateLayout: Calculates optimal baseplate layout given drawer and build plate dimensions - GridfinityConnectionClip: Snap-in clips to join adjacent baseplates - Extended GridfinityBaseplate with edge_modes, solid_fill, and notch support - Integer micro-cell math prevents float drift (micro_divisions: 1, 2, or 4) - 'Flooring logic' avoids tiny end pieces (min_segment_u parameter) - Configurable clip pitch along seams - Signature-based deduplication for efficient export - 49 new tests covering layout math, rendering, and integration
- Import EdgeRole, EdgeFrameMode, FillInnerMode from gf_baseplate - Add edge_role_*, edge_frame_*, fill_inner_mode_* fields to PieceSpec - Update _calculate_layout() to compute edge roles/frame modes - Update _render_piece_spec() to pass new edge system params - Update summary output to show edge roles with clearer notation - Fix lint formatting in gf_baseplate.py render() method
- Call _render_perimeter_frame() in render() to close edges (was dead code) - Move fillet to end of render() after all boolean operations - Fix notch cutter depth: remove *2 multiplier that caused slivers - Disable half-profile temporarily to eliminate sliver geometry source - Reorder render passes: body -> grid cut -> frame -> fill -> notch -> fillet
- Add _create_frame_with_profile() helper to create frame with chamfered inner edge - Update _render_perimeter_frame() to use profiled frames instead of plain boxes - Profile matches standard gridfinity chamfer (GR_BASE_TOP_CHAMF + GR_STR_H) - Bins can now properly seat against perimeter edges
- Rewrite _render_perimeter_frame() to use same profile cells as grid interior - Position profile cells along each perimeter edge - Intersect with body bounds to clip outer edges flat - Remove broken _create_frame_with_profile() helper - Bins now properly seat against all perimeter edges
- Create frame as solid band (outer body minus inner region) - Cut grid cell profiles into frame's inner faces - Result has flat outer perimeter and profiled inner edges - Bins can now properly seat against perimeter edges
… (lost edge regression)
…dding, fit tests, etc
- Add NOTCH_THROUGH_OVERCUT_MM constant for robust boolean subtraction - Add get_seam_wall_thickness_mm() for seam wall calculations - Add get_seam_cut_depth_mm() for clip engagement depth - Notch cuts are now full through-slots instead of blind pockets
- Add gf_export.py with GridfinityExporter class and SVGView enum - GridfinityExporter provides unified STEP, STL, SVG export interface - Add batch_export() for sequential export of multiple geometries - Update gf_obj.py to delegate export methods to GridfinityExporter - Update gf_baseplate_layout.py export_all() to use GridfinityExporter - Export GridfinityExporter and SVGView from package __init__.py - Remove parallel export (OCCT is not thread-safe)
New test files: - tests/test_helpers.py: 14 tests for gf_helpers.py functions - tests/test_export.py: 10 tests for GridfinityExporter and export methods - tests/test_test_prints.py: 15 tests for test print generators - tests/test_golden.py: 14 golden/regression tests for geometry validation - tests/golden_test_utils.py: utility functions for golden test infrastructure Golden test baselines in tests/golden_data/: - box_*.json, baseplate_*.json, clip_*.json, solidbox_*.json, spacer_*.json Updates to existing tests: - test_baseplate.py: additional edge mode and notch tests - test_baseplate_layout.py: clip_ct and layout tests To update baselines: UPDATE_GOLDEN=1 pytest tests/test_golden.py
Documentation: - todo.md: mark export extraction DONE, update parallel export note, add through-slot fix - README.md: add GridfinityExporter and SVGView documentation, update class list CI workflow changes: - Merge ci.yml and release-ci.yml into single ci.yml - CI now triggers only on PR to releases branch (not on push to dev) - Full test matrix (Python 3.9-3.12), linting, and build validation - Delete redundant release-ci.yml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.