1
0
mirror of https://github.com/nophead/NopSCADlib.git synced 2025-09-03 12:22:46 +02:00

Compare commits

...

65 Commits

Author SHA1 Message Date
Chris Palmer
e4f6227e9a Fixed include path in gridfinity test file. 2025-08-11 16:05:36 +01:00
Chris Palmer
4c4a40c30e Updated changelog. 2025-07-29 21:04:39 +01:00
Chris Palmer
aedccd35b3 Updated images and readme. 2025-07-29 20:51:04 +01:00
Chris Palmer
98b82873bf Fixed undef extrusion type in BOM 2025-07-29 20:48:41 +01:00
Chris Palmer
aca921d737 Fixed some indentation. 2025-07-29 20:48:13 +01:00
Alex Verschoot
018f70ae3c moved the corner_3d_connector over to the extrusion brackets 2025-07-19 15:57:09 +02:00
Alex Verschoot
89c4b96525 replaced the nut diameter with the actual nut from the vitamin list 2025-07-19 00:50:43 +02:00
Alex Verschoot
4e443fc742 used the show_threads variable instead of parameter 2025-07-18 21:00:26 +02:00
Alex Verschoot
f032bb76db added convexity to the linear extrude 2025-07-18 19:52:45 +02:00
Alex Verschoot
c23c3619e4 fixed length typo 2025-07-18 19:48:32 +02:00
Alex Verschoot
c16f0bd472 more formatting 2025-07-17 22:45:04 +02:00
Alex Verschoot
9756845c59 formatting + extra comments 2025-07-17 22:42:02 +02:00
Alex Verschoot
00eeb1b52d Added a testfile for the corner3d connector 2025-07-15 23:31:00 +02:00
Alex Verschoot
80b17a012d renamed variables + corrected horizontal directions 2025-07-15 23:13:09 +02:00
Alex Verschoot
9327c7c134 added option for grub screws 2025-07-12 22:45:13 +02:00
Alex Verschoot
55f7537ba6 made threads a toggle 2025-07-12 21:35:41 +02:00
Alex Verschoot
bfaa48dc7c Added the implementation 2025-07-12 15:04:03 +02:00
Alex Verschoot
a785ae1050 added a corner_3d_connectors page 2025-07-12 12:52:34 +02:00
Chris Palmer
20ee4026f8 Updated changelog. 2025-07-01 15:06:55 +01:00
Chris Palmer
80eb5ebc43 Merge branch 'elliotf-makerbeam-extrusions' 2025-07-01 15:03:35 +01:00
Chris Palmer
d15cf6cf35 Updated images and readme. 2025-07-01 15:03:08 +01:00
Chris Palmer
2769c3714c Merge branch 'makerbeam-extrusions' of https://github.com/elliotf/NopSCADlib into elliotf-makerbeam-extrusions 2025-07-01 14:32:07 +01:00
Chris Palmer
185bb8d6a9 Updated changelog. 2025-07-01 14:13:07 +01:00
Chris Palmer
eddebc65a2 Merge branch 'elliotf-mellow-fly-d5' 2025-07-01 14:01:49 +01:00
Chris Palmer
915ceea296 Updated images and readme. 2025-07-01 14:01:14 +01:00
Elliot Foster
5a14c55ca5 Add the Mellow Fly D5 PCB 2025-06-28 13:39:16 -05:00
Elliot Foster
ca9cc97b2a Makerbeam work in progress 2025-06-28 13:17:56 -05:00
Chris Palmer
652c5d1a26 Updated changelog. 2025-05-16 19:30:03 +01:00
Chris Palmer
3830836519 Merge branch 'pcremades-master'
Added links in the project readme to STL, DXF and SVG files.
2025-05-16 19:22:15 +01:00
Chris Palmer
9c5014b73d Updated examples. 2025-05-16 19:22:02 +01:00
pcremades
5c289bb7f5 [Fix] Fix route to svgs 2025-05-11 12:33:43 -03:00
pcremades
3211fe1f19 [Feature] Add link to DXFs/SVGs files in documentation 2025-05-09 15:02:38 -03:00
Pablo Cremades
c8f1b808cf Merge branch 'nophead:master' into master 2025-04-22 18:29:42 -03:00
pcremades
917f404c59 [Feature] Add link to STL files in documentation 2025-04-22 18:28:14 -03:00
Chris Palmer
99ff256847 Fixed example link. 2025-04-15 13:12:00 +01:00
Chris Palmer
3d370ccf72 Updated changelog. 2025-04-15 13:09:16 +01:00
Chris Palmer
bd94182ff1 Added simple Gridfinity generator and examples. 2025-04-15 13:05:59 +01:00
Chris Palmer
86df9a34d6 Added chamfer test file. 2025-04-15 12:01:45 +01:00
Chris Palmer
9758112e05 Added chamfer_hole() utility module. 2025-04-15 11:59:20 +01:00
Chris Palmer
b46f49a5ce Updated changelog. 2025-04-15 11:42:43 +01:00
Chris Palmer
330c09f4d4 Merge branch 'schiele-corexy_fix' 2025-04-15 11:41:21 +01:00
Chris Palmer
c2a56367eb Merge branch 'corexy_fix' of https://github.com/schiele/NopSCADlib into schiele-corexy_fix 2025-04-15 11:35:27 +01:00
Chris Palmer
f16dc84792 Updated changelog. 2025-04-15 11:34:43 +01:00
Chris Palmer
c065855b90 Merge branch 'pcremades-master' 2025-04-15 11:32:22 +01:00
Chris Palmer
edc7e17437 Included pcbs.scad in displays.scad.
Moved I2C_LCD_Backpack from tiny_pcbs to pcbs to prevent connector clash.
Updated images and readme.
2025-04-15 11:31:46 +01:00
Robert Schiele
7546203b03 positional parameters should not follow named parameters
Some versions of OpenSCAD (like the latest official release 2021.01 get
confused if positional parameters follow named parameters. So let's use
named parameters after the first named one was used.
2025-04-15 07:00:19 +02:00
pcremades
a9b501a2d2 Added a 1602 LCD with I2C module 2025-04-11 11:54:48 -03:00
pcremades
126343d5af Added a I2C TWI SPI Serial Interface for 1602 LCD 2025-04-11 11:39:59 -03:00
pcremades
1692fcc811 Added 1/4" square trimpot to pcb.scad 2025-04-11 11:27:14 -03:00
Chris Palmer
5c4fe8bfb9 Updated changelog. 2025-04-09 23:31:10 +01:00
Chris Palmer
33ac3820b0 Added pose_stl() module because pose() only works for assembly views. 2025-04-09 23:29:00 +01:00
Chris Palmer
6a58d37f77 Updated changelog. 2025-04-01 09:57:15 +01:00
Chris Palmer
029abc0cf8 Merge branch 'trnila-barrel_jack_cutout' 2025-04-01 09:45:06 +01:00
Chris Palmer
4b018eb9ad Merge branch 'barrel_jack_cutout' of https://github.com/trnila/NopSCADlib into trnila-barrel_jack_cutout 2025-04-01 09:33:43 +01:00
Chris Palmer
3715585002 Made pose() work on STL renders to match the documentation. 2025-04-01 09:32:00 +01:00
Daniel Trnka
5d0eda87e4 barrel_jack: added cutout 2025-03-30 23:19:42 +02:00
Chris Palmer
ad963afb8d Updated changelog. 2025-03-27 12:25:55 +00:00
Chris Palmer
dbf8e6c7ae Merge branch 'jeroenrnl-VariableNamesWithDigitsDeprecated' 2025-03-27 12:24:15 +00:00
Chris Palmer
7d281cbcdd Merge branch 'VariableNamesWithDigitsDeprecated' of https://github.com/jeroenrnl/NopSCADlib into jeroenrnl-VariableNamesWithDigitsDeprecated 2025-03-27 12:01:05 +00:00
Chris Palmer
f1a651a2d2 Updated changelog. 2025-03-27 02:00:24 +00:00
Chris Palmer
9f9aa6723e Third attempt to fix dimension image. 2025-03-27 01:59:05 +00:00
Chris Palmer
83d2d511e3 Updated changelog. 2025-03-27 01:57:19 +00:00
Chris Palmer
6b6704b823 Second attempt to fix dimension image. 2025-03-27 01:56:05 +00:00
Chris Palmer
946a3bea1c Updated changelog. 2025-03-27 01:39:25 +00:00
Jeroen Roos
fdbe0c7a9e Change variable names that start with a digit
Change names of variables from `2a` and `2c` to `ax2` (a times 2) and
`cx2`, because variable names starting with a digit are deprecated in
OpenSCAD.
2025-03-23 10:45:33 +01:00
113 changed files with 244450 additions and 59486 deletions

1
.gitignore vendored
View File

@@ -12,3 +12,4 @@ times.txt
*_diff.png
*.echo
cmd_times.txt
*.gco

View File

@@ -3,6 +3,110 @@
This changelog is generated by `changelog.py` using manually added semantic version tags to classify commits as breaking changes, additions or fixes.
### [v21.41.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.41.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.40.0...v21.41.0 "diff with v21.40.0")
* 2025-07-29 [`aedccd3`](https://github.com/nophead/NopSCADlib/commit/aedccd35b32591932d73cb8b429a1ca57152f781 "show commit") [C.P.](# "Chris Palmer") Updated images and readme.
* 2025-07-29 [`98b8287`](https://github.com/nophead/NopSCADlib/commit/98b82873bff27e592cb13be72c923cac42ab7842 "show commit") [C.P.](# "Chris Palmer") Fixed undef extrusion type in BOM
* 2025-07-29 [`aca921d`](https://github.com/nophead/NopSCADlib/commit/aca921d737c0a9e89a318385ac2945b7ed932114 "show commit") [C.P.](# "Chris Palmer") Fixed some indentation.
* 2025-07-19 [`018f70a`](https://github.com/nophead/NopSCADlib/commit/018f70ae3c51cda911471ec1922cd1dcb5c73cb0 "show commit") [A.V.](# "Alex Verschoot") moved the `corner_3d_connector` over to the extrusion brackets
* 2025-07-19 [`89c4b96`](https://github.com/nophead/NopSCADlib/commit/89c4b96525c0bdd1cd73756fd7a12f2c8144a6fd "show commit") [A.V.](# "Alex Verschoot") replaced the nut diameter with the actual nut from the vitamin list
* 2025-07-18 [`4e443fc`](https://github.com/nophead/NopSCADlib/commit/4e443fc742bbce2efc5777fb0ab0395ac199bcfb "show commit") [A.V.](# "Alex Verschoot") used the `show_threads` variable instead of parameter
* 2025-07-18 [`f032bb7`](https://github.com/nophead/NopSCADlib/commit/f032bb76db516a0265817e7c6d2233e2e847d51f "show commit") [A.V.](# "Alex Verschoot") added convexity to the linear extrude
* 2025-07-18 [`c23c361`](https://github.com/nophead/NopSCADlib/commit/c23c3619e4090db59a1c4120375a54b5f4333817 "show commit") [A.V.](# "Alex Verschoot") fixed length typo
* 2025-07-17 [`c16f0bd`](https://github.com/nophead/NopSCADlib/commit/c16f0bd47290d7215b5c66fff08b9e3f6bd34485 "show commit") [A.V.](# "Alex Verschoot") more formatting
* 2025-07-17 [`9756845`](https://github.com/nophead/NopSCADlib/commit/9756845c59a85499c6f5c5efe029783735fc4e73 "show commit") [A.V.](# "Alex Verschoot") formatting + extra comments
* 2025-07-15 [`00eeb1b`](https://github.com/nophead/NopSCADlib/commit/00eeb1b52de100200dd73b60ac605224033b0351 "show commit") [A.V.](# "Alex Verschoot") Added a testfile for the corner3d connector
* 2025-07-15 [`80b17a0`](https://github.com/nophead/NopSCADlib/commit/80b17a012db0b2fa21b77205a1faafc5d9475abe "show commit") [A.V.](# "Alex Verschoot") renamed variables + corrected horizontal directions
* 2025-07-12 [`9327c7c`](https://github.com/nophead/NopSCADlib/commit/9327c7c134a73c044e0fdba95f58e00ceaaaee05 "show commit") [A.V.](# "Alex Verschoot") added option for grub screws
* 2025-07-12 [`55f7537`](https://github.com/nophead/NopSCADlib/commit/55f7537ba62242c5ed89f48fb05cb426e382132c "show commit") [A.V.](# "Alex Verschoot") made threads a toggle
* 2025-07-12 [`bfaa48d`](https://github.com/nophead/NopSCADlib/commit/bfaa48dc7c0303d359b52a4a122ea14b74b535e2 "show commit") [A.V.](# "Alex Verschoot") Added the implementation
* 2025-07-12 [`a785ae1`](https://github.com/nophead/NopSCADlib/commit/a785ae105006c88dc7fb705e5c615d68131daf50 "show commit") [A.V.](# "Alex Verschoot") added a `corner_3d_connectors` page
### [v21.40.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.40.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.39.0...v21.40.0 "diff with v21.39.0")
* 2025-07-01 [`d15cf6c`](https://github.com/nophead/NopSCADlib/commit/d15cf6cf35cbbd790525341c461e168eda9f3964 "show commit") [C.P.](# "Chris Palmer") Updated images and readme.
* 2025-06-28 [`ca9cc97`](https://github.com/nophead/NopSCADlib/commit/ca9cc97b2a26324bef2b4683bef82eaceee1ffe9 "show commit") [E.F.](# "Elliot Foster") Makerbeam work in progress
### [v21.39.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.39.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.38.1...v21.39.0 "diff with v21.38.1")
* 2025-07-01 [`915ceea`](https://github.com/nophead/NopSCADlib/commit/915ceea296aa54e8432c98ac01d527d214740953 "show commit") [C.P.](# "Chris Palmer") Updated images and readme.
* 2025-06-28 [`5a14c55`](https://github.com/nophead/NopSCADlib/commit/5a14c55ca5fc064c0ca04f1f4058bac25f2a65be "show commit") [E.F.](# "Elliot Foster") Add the Mellow Fly D5 PCB
#### [v21.38.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.38.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.38.0...v21.38.1 "diff with v21.38.0")
* 2025-05-16 [`9c5014b`](https://github.com/nophead/NopSCADlib/commit/9c5014b73d51d5071259fb7df814b8a62016d214 "show commit") [C.P.](# "Chris Palmer") Updated examples.
* 2025-05-11 [`5c289bb`](https://github.com/nophead/NopSCADlib/commit/5c289bb7f566f3eebd8ad061645abb6dddb6ef97 "show commit") [P.](# "pcremades") `[Fix]` Fix route to svgs
* 2025-05-09 [`3211fe1`](https://github.com/nophead/NopSCADlib/commit/3211fe1f19f8d2a9ea090c8232f65ddad379cd26 "show commit") [P.](# "pcremades") `[Feature]` Add link to `DXFs/SVGs` files in documentation
* 2025-04-15 [`99ff256`](https://github.com/nophead/NopSCADlib/commit/99ff25684756ccf1ec86fd8538a03172e6ce62e9 "show commit") [C.P.](# "Chris Palmer") Fixed example link.
### [v21.38.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.38.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.37.1...v21.38.0 "diff with v21.37.1")
* 2025-04-15 [`bd94182`](https://github.com/nophead/NopSCADlib/commit/bd94182ff1ca85df7b667fc6985defb779846252 "show commit") [C.P.](# "Chris Palmer") Added simple Gridfinity generator and examples.
* 2025-04-15 [`86df9a3`](https://github.com/nophead/NopSCADlib/commit/86df9a34d641511a84026eaf0b3191437e4692be "show commit") [C.P.](# "Chris Palmer") Added chamfer test file.
* 2025-04-15 [`9758112`](https://github.com/nophead/NopSCADlib/commit/9758112e05d02c9cf156828ecd47b7770b602628 "show commit") [C.P.](# "Chris Palmer") Added `chamfer_hole()` utility module.
#### [v21.37.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.37.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.37.0...v21.37.1 "diff with v21.37.0")
* 2025-04-14 [`7546203`](https://github.com/nophead/NopSCADlib/commit/7546203b0377930a75a45e2943af296dc1758dca "show commit") [R.S.](# "Robert Schiele") positional parameters should not follow named parameters
* Some versions of OpenSCAD (like the latest official release `2021.01` get
confused if positional parameters follow named parameters. So let's use
named parameters after the first named one was used.
### [v21.37.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.37.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.36.0...v21.37.0 "diff with v21.36.0")
* 2025-04-15 [`edc7e17`](https://github.com/nophead/NopSCADlib/commit/edc7e174370ac8dcd6d4a78b31640347ab266f60 "show commit") [C.P.](# "Chris Palmer") Included `pcbs.scad` in `displays.scad`.
Moved `I2C_LCD_Backpack` from `tiny_pcbs` to pcbs to prevent connector clash.
Updated images and readme.
* 2025-04-22 [`917f404`](https://github.com/nophead/NopSCADlib/commit/917f404c591350d8b1821e9cc6422c9bdbf24b22 "show commit") [P.](# "pcremades") `[Feature]` Add link to STL files in documentation
* 2025-04-11 [`a9b501a`](https://github.com/nophead/NopSCADlib/commit/a9b501a2d2ce242c181c2cd5f5d1f86ba7150eec "show commit") [P.](# "pcremades") Added a 1602 LCD with I2C module
* 2025-04-11 [`126343d`](https://github.com/nophead/NopSCADlib/commit/126343d5af75a2aa458db112305a62b953e23694 "show commit") [P.](# "pcremades") Added a I2C TWI SPI Serial Interface for 1602 LCD
* 2025-04-11 [`1692fcc`](https://github.com/nophead/NopSCADlib/commit/1692fcc8116c9a0926231a95d0207a0085c814c5 "show commit") [P.](# "pcremades") Added `1/4"` square trimpot to `pcb.scad`
### [v21.36.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.36.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.35.6...v21.36.0 "diff with v21.35.6")
* 2025-04-09 [`33ac382`](https://github.com/nophead/NopSCADlib/commit/33ac3820b0df87df05d7c2dbb3d553e2aafa6828 "show commit") [C.P.](# "Chris Palmer") Added `pose_stl()` module because `pose()` only works for assembly views.
#### [v21.35.6](https://github.com/nophead/NopSCADlib/releases/tag/v21.35.6 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.35.5...v21.35.6 "diff with v21.35.5")
* 2025-03-30 [`5d0eda8`](https://github.com/nophead/NopSCADlib/commit/5d0eda87e44a70fdbed51407a43555a637e064f9 "show commit") [D.T.](# "Daniel Trnka") `barrel_jack:` added cutout
#### [v21.35.5](https://github.com/nophead/NopSCADlib/releases/tag/v21.35.5 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.35.4...v21.35.5 "diff with v21.35.4")
* 2025-04-01 [`3715585`](https://github.com/nophead/NopSCADlib/commit/3715585002ba56681103103faddd043b1553d095 "show commit") [C.P.](# "Chris Palmer") Made `pose()` work on STL renders to match the documentation.
#### [v21.35.4](https://github.com/nophead/NopSCADlib/releases/tag/v21.35.4 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.35.3...v21.35.4 "diff with v21.35.3")
* 2025-03-23 [`fdbe0c7`](https://github.com/nophead/NopSCADlib/commit/fdbe0c7a9eba96823683b8e1161bc160bd63231e "show commit") [J.R.](# "Jeroen Roos") Change variable names that start with a digit
* Change names of variables from `2a` and `2c` to `ax2` (a times 2) and
`cx2`, because variable names starting with a digit are deprecated in
OpenSCAD.
#### [v21.35.3](https://github.com/nophead/NopSCADlib/releases/tag/v21.35.3 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.35.2...v21.35.3 "diff with v21.35.2")
* 2025-03-27 [`9f9aa67`](https://github.com/nophead/NopSCADlib/commit/9f9aa6723eff9b7439e17758406e9f8e409828ee "show commit") [C.P.](# "Chris Palmer") Third attempt to fix dimension image.
#### [v21.35.2](https://github.com/nophead/NopSCADlib/releases/tag/v21.35.2 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.35.1...v21.35.2 "diff with v21.35.1")
* 2025-03-27 [`6b6704b`](https://github.com/nophead/NopSCADlib/commit/6b6704b823291119697bf4993eddb3f2e6873875 "show commit") [C.P.](# "Chris Palmer") Second attempt to fix dimension image.
#### [v21.35.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.35.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.35.0...v21.35.1 "diff with v21.35.0")
* 2025-03-27 [`117fb62`](https://github.com/nophead/NopSCADlib/commit/117fb626e7023ca92339947a0f84a8aee5c6429e "show commit") [C.P.](# "Chris Palmer") Fixed dimension example image address.
### [v21.35.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.35.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.34.0...v21.35.0 "diff with v21.34.0")
* 2025-03-27 [`6dc8204`](https://github.com/nophead/NopSCADlib/commit/6dc82045fffeca383381724abb6d70d7025b2ae5 "show commit") [C.P.](# "Chris Palmer") Shortened the module comments by factoring out the parameter descriptions.
Added the nut example picture.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 265 KiB

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 326 KiB

After

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 KiB

After

Width:  |  Height:  |  Size: 334 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 KiB

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 249 KiB

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 KiB

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 KiB

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

After

Width:  |  Height:  |  Size: 217 KiB

View File

@@ -17,11 +17,13 @@
"printed": {
"fan_duct.stl": {
"count": 1,
"colour": "darkorange"
"colour": "darkorange",
"camera": "0,0,0,70,0,315,500"
},
"enviro_plus_case_base.stl": {
"count": 1,
"colour": "grey"
"colour": "grey",
"camera": "0,0,0,70,0,315,500"
}
},
"routed": {}
@@ -67,10 +69,10 @@
"smd_resistor(RES0805, 3K3): SMD resistor 0805 3K3 0.125W": {
"count": 1
},
"smd_capacitor(CAP1206): SMD capacitor 1206 10uF": {
"smd_capacitor(CAP1206, value = \"10uF\"): SMD capacitor 1206 10uF": {
"count": 1
},
"smd_sot(SOT223): SOT223 package FZT851": {
"smd_sot(SOT223, \"FZT851\"): SOT223 package FZT851": {
"count": 1
}
},
@@ -115,15 +117,18 @@
"printed": {
"enviro_plus_case.stl": {
"count": 1,
"colour": "grey"
"colour": "grey",
"camera": "0,0,0,70,0,315,500"
},
"bulkhead.stl": {
"count": 1,
"colour": "[0.862745, 0.0784314, 0.235294]"
"colour": "[0.862745, 0.0784314, 0.235294]",
"camera": "0,0,0,70,0,315,500"
},
"foot.stl": {
"count": 3,
"colour": "darkorange"
"colour": "darkorange",
"camera": "0,0,0,70,0,315,500"
}
},
"routed": {}

View File

@@ -72,7 +72,7 @@ Environmental monitor using Enviro+ sensor board and a Raspberry Pi Zero.
### 3D Printed parts
| 1 x enviro_plus_case_base.stl | 1 x fan_duct.stl |
| 1 x [enviro_plus_case_base.stl](stls/enviro_plus_case_base.stl) | 1 x [fan_duct.stl](stls/fan_duct.stl) |
|---|---|
| ![enviro_plus_case_base.stl](stls/enviro_plus_case_base.png) | ![fan_duct.stl](stls/fan_duct.png)
@@ -190,7 +190,7 @@ It converts the PWM signal on GPI4 to a stead DC voltage so that the fan doesn't
### 3D Printed parts
| 1 x bulkhead.stl | 1 x enviro_plus_case.stl | 3 x foot.stl |
| 1 x [bulkhead.stl](stls/bulkhead.stl) | 1 x [enviro_plus_case.stl](stls/enviro_plus_case.stl) | 3 x [foot.stl](stls/foot.stl) |
|---|---|---|
| ![bulkhead.stl](stls/bulkhead.png) | ![enviro_plus_case.stl](stls/enviro_plus_case.png) | ![foot.stl](stls/foot.png)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

View File

@@ -0,0 +1,49 @@
[
{
"name": "main_assembly",
"big": null,
"ngb": false,
"zoomed": 0,
"count": 1,
"assemblies": {},
"vitamins": {},
"printed": {
"lathe_tool_stand.stl": {
"count": 1,
"colour": "[0, 0.572549, 0]",
"camera": "0,0,0,70,0,315,500"
},
"MT2_stand.stl": {
"count": 1,
"colour": "[0, 0.572549, 0]",
"camera": "0,0,0,70,0,315,500"
},
"chuck_stand.stl": {
"count": 1,
"colour": "[0, 0.572549, 0]",
"camera": "0,0,0,70,0,315,500"
},
"chuck_jaw_bin.stl": {
"count": 1,
"colour": "[0, 0.572549, 0]",
"camera": "0,0,0,70,0,315,500"
},
"1x1_bin.stl": {
"count": 1,
"colour": "[0, 0.572549, 0]",
"camera": "0,0,0,70,0,315,500"
},
"123_block_stand.stl": {
"count": 1,
"colour": "[0, 0.572549, 0]",
"camera": "0,0,0,70,0,315,500"
},
"faceplate_stand.stl": {
"count": 1,
"colour": "[0, 0.572549, 0]",
"camera": "0,0,0,70,0,315,500"
}
},
"routed": {}
}
]

View File

@@ -0,0 +1,15 @@
M
a
i
n
Printed:
1| 1 123_block_stand.stl
1| 1 1x1_bin.stl
1| 1 MT2_stand.stl
1| 1 chuck_jaw_bin.stl
1| 1 chuck_stand.stl
1| 1 faceplate_stand.stl
1| 1 lathe_tool_stand.stl
Assemblies:
1 main_assembly

View File

@@ -0,0 +1,9 @@
main_assembly:
Printed:
1 123_block_stand.stl
1 1x1_bin.stl
1 MT2_stand.stl
1 chuck_jaw_bin.stl
1 chuck_stand.stl
1 faceplate_stand.stl
1 lathe_tool_stand.stl

View File

@@ -0,0 +1,64 @@
<a name="TOP"></a>
# Gridfinity
Gridfinity examples
![Main Assembly](assemblies/main_assembled.png)
<span></span>
---
## Table of Contents
1. [Parts list](#Parts_list)
1. [Main Assembly](#main_assembly)
<span></span>
[Top](#TOP)
---
<a name="Parts_list"></a>
## Parts list
| <span style="writing-mode: vertical-rl; text-orientation: mixed;">Main</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">TOTALS</span> | |
|---:|---:|:---|
| | | **3D printed parts** |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;123_block_stand.stl |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1x1_bin.stl |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;MT2_stand.stl |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;chuck_jaw_bin.stl |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;chuck_stand.stl |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;faceplate_stand.stl |
| &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;lathe_tool_stand.stl |
| &nbsp;&nbsp;7&nbsp; | &nbsp;&nbsp;7&nbsp; | &nbsp;&nbsp;Total 3D printed parts count |
<span></span>
[Top](#TOP)
---
<a name="main_assembly"></a>
## Main Assembly
### 3D Printed parts
| 1 x [123_block_stand.stl](stls/123_block_stand.stl) | 1 x [1x1_bin.stl](stls/1x1_bin.stl) | 1 x [MT2_stand.stl](stls/MT2_stand.stl) |
|---|---|---|
| ![123_block_stand.stl](stls/123_block_stand.png) | ![1x1_bin.stl](stls/1x1_bin.png) | ![MT2_stand.stl](stls/MT2_stand.png)
| 1 x [chuck_jaw_bin.stl](stls/chuck_jaw_bin.stl) | 1 x [chuck_stand.stl](stls/chuck_stand.stl) | 1 x [faceplate_stand.stl](stls/faceplate_stand.stl) |
|---|---|---|
| ![chuck_jaw_bin.stl](stls/chuck_jaw_bin.png) | ![chuck_stand.stl](stls/chuck_stand.png) | ![faceplate_stand.stl](stls/faceplate_stand.png)
| 1 x [lathe_tool_stand.stl](stls/lathe_tool_stand.stl) |
|---|
| ![lathe_tool_stand.stl](stls/lathe_tool_stand.png)
### Assembly instructions
![main_assembly](assemblies/main_assembly.png)
Show all the Gridfinity parts
![main_assembled](assemblies/main_assembled.png)
<span></span>
[Top](#TOP)

View File

@@ -0,0 +1,58 @@
include <NopSCADlib/core.scad>
use <NopSCADlib/printed/gridfinity.scad>
use <NopSCADlib/utils/maths.scad>
use <NopSCADlib/utils/chamfer.scad>
tool_size = 8;
box = gridfinity_bin("123_block_stand", 2, 2, 5);
123_block = inch([3, 1, 2]);
102040_block = [20, 10, 40];
blocks = [123_block, 123_block, 102040_block];
box_mm = gridfinity_bin_size_mm(box);
wall = 1.75;
bwall = 1;
clearance = 0.5;
gap = (box_mm.y - sumv([for(b = blocks) b.y])) / (len(blocks) + 1);
module holes() {
let($b = blocks[0])
translate([0, box_mm.y / 2 - gap - $b.y / 2])
children();
let($b = blocks[1])
translate([0, box_mm.y / 2 - gap - blocks[0].y - gap - $b.y / 2])
children();
for(side = [-1, 1])
let($b = blocks[2])
translate([side * (blocks[2].x + 2 * gap) / 2,
box_mm.y / 2 - gap - blocks[0].y - gap - blocks[1].y - gap - blocks[2].y / 2 ])
children();
}
module 123_block_stand_stl()
gridfinity_bin(box) union() {
holes() {
translate_z(gridfinity_base_z() + bwall + $b.z / 2 + eps)
cube([$b.x + clearance, $b.y + clearance, $b.z + 2 * eps], true);
chamfer = 1;
translate_z(box_mm.z)
chamfer_hole(chamfer)
square([$b.x + clearance, $b.y + clearance], true);
}
translate_z(gridfinity_base_z() + bwall)
difference() {
rounded_rectangle([box_mm.x - 2 * wall, box_mm.y - 2 * wall, box_mm.z - gridfinity_base_z() - bwall - wall], gridfinity_corner_r() - wall);
holes()
rounded_rectangle([$b.x + clearance + 2 * wall, $b.y + clearance + 2 * wall, 100], wall, center = true);
}
}

View File

@@ -0,0 +1,9 @@
include <NopSCADlib/core.scad>
use <NopSCADlib/printed/gridfinity.scad>
box = gridfinity_bin("1x1_bin", 1, 1, 5);
module 1x1_bin_stl()
gridfinity_bin(box)
gridfinity_partition(box, 1, 1);

View File

@@ -0,0 +1,80 @@
//
// Stand for MT2 taper lathe tools
//
include <NopSCADlib/core.scad>
use <NopSCADlib/utils/maths.scad>
use <NopSCADlib/utils/chamfer.scad>
use <NopSCADlib/printed/gridfinity.scad>
box = gridfinity_bin("MT2_stand", 4, 2, 8);
box_mm = gridfinity_bin_size_mm(box);
wall = 1.75;
bwall = 1;
diameters1 = [43, 47, 64];
d2 = 20;
clearance = 1;
clearance2 = 4;
MT2_base = 5; // smaller diameters
MT2_D1 = 15; // diameter at the bottom of the taper at base height
MT2_half_angle = 1.4302777777777778;
hole_depth = box_mm.z - gridfinity_base_z() - bwall;
MT2_r1 = MT2_D1 / 2;
MT2_r2 = MT2_r1 + (hole_depth - MT2_base) * tan(MT2_half_angle);
gap = (box_mm.x - sumv(diameters1) - 2 * clearance) / (len(diameters1) - 1);
gap2 = 18;
module MT2_socket() {
clearance = 0.3;
translate_z(-hole_depth) {
poly_cylinder(MT2_r1 + clearance / 2, MT2_base + eps);
translate_z(MT2_base)
hull() {
poly_cylinder(MT2_r1 + clearance / 2, eps);
translate_z(hole_depth - MT2_base)
poly_cylinder(MT2_r2 + clearance / 2, eps);
}
}
chamfer_hole(1)
poly_circle(MT2_r2 + clearance / 2);
}
function pos(i) = [clearance + sumv(slice(diameters1, 0, i)) + i * gap + diameters1[i] / 2 - box_mm.x / 2, box_mm.y / 2 - clearance - diameters1[i] / 2, box_mm.z];
function pos2(i) = [clearance2 + i * gap2 + (i + 0.5) * d2 - box_mm.x / 2, -box_mm.y / 2 + clearance2 + d2 / 2, box_mm.z];
module holes()
for(i = [0 : len(diameters1) - 1]) {
translate(pos(i))
children();
translate(pos2(i))
children();
}
module MT2_stand_stl()
gridfinity_bin(box) union() {
holes()
MT2_socket();
translate_z(gridfinity_base_z() + bwall)
difference() {
rounded_rectangle([box_mm.x - 2 * wall, box_mm.y - 2 * wall, box_mm.z - gridfinity_base_z() - bwall - wall], gridfinity_corner_r() - wall);
holes()
cylinder(r = MT2_r2 + wall, h = 200, center = true);
for(x = [-box_mm.x / 2 : 20 : box_mm.x /2])
translate([x, 0])
cube([squeezed_wall, 200, 200], center = true);
}
}

View File

@@ -0,0 +1,36 @@
include <NopSCADlib/core.scad>
use <NopSCADlib/utils/chamfer.scad>
use <NopSCADlib/printed/gridfinity.scad>
box = gridfinity_bin("chuck_jaw_bin", 1, 1, 5);
box_mm = gridfinity_bin_size_mm(box);
bwall = 1;
length = 37;
width = 34;
z_bot = gridfinity_base_z() + bwall;
depth = box_mm.z - z_bot;
module chuck_jaw_bin_stl()
gridfinity_bin(box)
translate_z(box_mm.z) {
cube([length, width, depth * 2], true);
chamfer = 1;
chamfer_hole(chamfer)
square([length, width], true);
*hull() {
rounded_rectangle([length + 2 * chamfer, width + 2 * chamfer, eps], chamfer);
translate_z(-chamfer + eps / 2)
cube([length, width, eps], true);
}
}

View File

@@ -0,0 +1,52 @@
include <NopSCADlib/core.scad>
use <NopSCADlib/printed/gridfinity.scad>
use <NopSCADlib/utils/chamfer.scad>
box = gridfinity_bin("chuck_stand", 2, 2, 5);
box_mm = gridfinity_bin_size_mm(box);
bwall = 1;
chuck_d = 80;
ring_od = 50;
ring_id = 40;
ring_h = 4;
hole_pitch = (60 + 72.5) / 2;
hole_d = (72.5 - 60) / 2;
hole_depth = 15;
clearance = 0.5;
chamfer = 1;
z_bot = gridfinity_base_z() + bwall;
module chuck_stand_stl()
gridfinity_bin(box) union() {
translate_z(z_bot) {
for(a = [0 : 30 : 330])
rotate(a)
translate([0, hole_pitch / 2]) {
poly_cylinder(hole_d / 2 + clearance / 2, h = 100);
translate_z(hole_depth)
chamfer_hole(chamfer)
poly_circle(hole_d / 2 + clearance / 2);
}
translate_z(hole_depth) {
poly_cylinder(r = chuck_d / 2 + clearance / 2, h = 100);
poly_tube(or = ring_od / 2 + clearance, ir = ring_id / 2 - clearance, h = 2 * ring_h, center = true);
chamfer_hole(chamfer)
poly_circle(ring_od / 2 + clearance);
}
}
translate_z(box_mm.z)
chamfer_hole(chamfer)
poly_circle(r = chuck_d / 2 + clearance / 2);
}

View File

@@ -0,0 +1,56 @@
include <NopSCADlib/core.scad>
use <NopSCADlib/printed/gridfinity.scad>
use <NopSCADlib/utils/maths.scad>
use <NopSCADlib/utils/chamfer.scad>
tool_size = 8;
box = gridfinity_bin("faceplate_stand", 3, 1, 5);
faceplate = [112, 16, 17];
sanding_disc = [69, 6.7, 14.5];
discs = [faceplate, sanding_disc];
box_mm = gridfinity_bin_size_mm(box);
wall = 1.8;
bwall = 1;
clearance = 0.5;
gap = (box_mm.y - sumv([for(b = discs) b.z])) / (len(discs) + 1);
module holes() {
for(i = [0 : len(discs) - 1]) let($d = discs[i])
translate([0, box_mm.y / 2 - gap - (i ? discs[0].z + gap : 0) - $d.z / 2])
children();
}
module faceplate_stand_stl()
gridfinity_bin(box) union() {
holes() {
$fa = 1;
r = $d.x / 2 + clearance / 2;
z = gridfinity_base_z() + bwall + r;
translate_z(z)
rotate([90, 0, 0])
teardrop_plus(r = r, h = $d.y + clearance, center = true);
chamfer = 1;
h = z - box_mm.z + wall;
translate_z(box_mm.z)
chamfer_hole(chamfer)
square([2 * sqrt(sqr(r) - sqr(h)), $d.y + clearance], true);
}
difference() {
translate_z(gridfinity_base_z() + bwall)
rounded_rectangle([box_mm.x - 2 * wall, box_mm.y - 2 * wall, box_mm.z - gridfinity_base_z() - bwall - wall], gridfinity_corner_r() - wall);
holes() {
r = $d.x / 2 + clearance / 2;
translate_z(gridfinity_base_z() + bwall + r)
rotate([90, 0, 0])
teardrop_plus(r = r + wall, h = $d.y + clearance + 2 * wall);
}
}
}

View File

@@ -0,0 +1,45 @@
include <NopSCADlib/core.scad>
use <NopSCADlib/printed/gridfinity.scad>
use <NopSCADlib/utils/chamfer.scad>
tool_size = 8;
rows = 2;
cols = 5;
spacing = 8;
hole = tool_size + 0.2;
tool_pitch = hole + spacing;
box = gridfinity_bin("lathe_tool_stand", 2, 1, 5);
module holes()
for(x = [0 : cols - 1], y = [0 : rows - 1])
translate([x - (cols -1) / 2, y - (rows - 1) / 2] * tool_pitch)
children();
box_mm = gridfinity_bin_size_mm(box);
wall = 1.75;
bwall = 1;
module lathe_tool_stand_stl()
gridfinity_bin(box) union() {
translate_z(box_mm.z)
holes() {
cube([hole, hole, 2 * (box_mm.z - gridfinity_base_z() - bwall)], true);
chamfer = 1;
chamfer_hole(chamfer)
square([hole, hole], true);
}
translate_z(gridfinity_base_z() + bwall)
difference() {
rounded_rectangle([box_mm.x - 2 * wall, box_mm.y - 2 * wall, box_mm.z - gridfinity_base_z() - bwall - wall], gridfinity_corner_r() - wall);
holes()
rounded_rectangle([hole + 2 * wall, hole + 2 * wall, 100], wall, center = true);
}
}

View File

@@ -0,0 +1,42 @@
//
//! Gridfinity examples
//
include <NopSCADlib/core.scad>
use <lathe_tool_stand.scad>
use <MT2_stand.scad>
use <chuck_stand.scad>
use <chuck_jaw_bin.scad>
use <1x1_bin.scad>
use <123_block_stand.scad>
use <faceplate_stand.scad>
//! Show all the Gridfinity parts
module main_assembly()
assembly("main") {
$manifold = true;
lathe_tool_stand_stl();
translate([42, 63])
MT2_stand_stl();
translate([42 * 2, -42 / 2])
chuck_stand_stl();
translate([-21, -42])
chuck_jaw_bin_stl();
translate([21, -42])
1x1_bin_stl();
translate([42 * 4, -42 / 2])
123_block_stand_stl();
translate([42 * 6.5, 0])
faceplate_stand_stl();
}
main_assembly();

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 KiB

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -14,7 +14,8 @@
"printed": {
"socket_box.stl": {
"count": 1,
"colour": "dimgrey"
"colour": "dimgrey",
"camera": "0,0,0,70,0,315,500"
}
},
"routed": {}
@@ -42,7 +43,8 @@
"printed": {
"foot.stl": {
"count": 4,
"colour": "darkorange"
"colour": "darkorange",
"camera": "0,0,0,70,0,315,500"
}
},
"routed": {}

View File

@@ -70,7 +70,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
### 3D Printed parts
| 1 x socket_box.stl |
| 1 x [socket_box.stl](stls/socket_box.stl) |
|---|
| ![socket_box.stl](stls/socket_box.png)
@@ -100,7 +100,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
### 3D Printed parts
| 4 x foot.stl |
| 4 x [foot.stl](stls/foot.stl) |
|---|
| ![foot.stl](stls/foot.png)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -23,7 +23,7 @@
include <core.scad>
include <vitamins/psus.scad>
include <vitamins/pcbs.scad>
include <vitamins/displays.scad> // Includes pcbs.scad
include <vitamins/antennas.scad>
include <vitamins/batteries.scad>
@@ -34,7 +34,6 @@ include <vitamins/box_sections.scad>
include <vitamins/bulldogs.scad>
include <vitamins/cameras.scad>
include <vitamins/components.scad>
include <vitamins/displays.scad>
include <vitamins/extrusions.scad>
include <vitamins/extrusion_brackets.scad>
include <vitamins/fastons.scad>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1018 KiB

After

Width:  |  Height:  |  Size: 1.0 MiB

View File

@@ -25,7 +25,7 @@
//! STL files for all the printed parts, DXF files for CNC routed parts in a project and a manual containing assembly
//! instructions and exploded views by scraping markdown embedded in OpenSCAD comments, [see scripts](scripts/readme.md).
//!
//! A simple example project can be found [here](examples/MainsBreakOutBox/readme.md).
//! A simple example project can be found [here](examples/MainsBreakOutBox/readme.md) and more complex examples [here](examples).
//!
//! For more examples of what it can make see the [gallery](gallery/readme.md).
//!
@@ -68,6 +68,7 @@ use <tests/fastons.scad>
use <tests/fuseholder.scad>
use <tests/gear_motors.scad>
use <tests/geared_steppers.scad>
use <tests/gridfinity.scad>
use <tests/hot_ends.scad>
use <tests/IECs.scad>
use <tests/inserts.scad>
@@ -204,7 +205,11 @@ pocket_y = handle_y + 70;
translate([x5 + 65, pocket_y])
pocket_handles();
hinge_y = pocket_y + 100;
gridfinity_y = pocket_y + 100;
translate([950, gridfinity_y])
gridfinity_test();
hinge_y = gridfinity_y + 100;
translate([x5, hinge_y]) {
door_hinges()
door_latches();
@@ -221,7 +226,6 @@ box_y = pbox_y + 150;
translate([950, box_y])
box_test();
inserts_y = 0;
nuts_y = inserts_y + 20;
washers_y = nuts_y + 160;
@@ -469,7 +473,7 @@ translate([x3 + 10, hot_ends_y])
translate([x2, panel_meters_y])
panel_meters();
translate([x2, extrusions_y])
translate([x2 - 15, extrusions_y])
extrusions();
translate([x2, box_sections_y])

104
printed/gridfinity.scad Normal file
View File

@@ -0,0 +1,104 @@
//
// NopSCADlib Copyright Chris Palmer 2024
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// This file is part of NopSCADlib.
//
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
// GNU General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
//
//! Generate storage bins compatible with Zack Freedman's Gridfinity design, see <https://www.youtube.com/watch?v=ra_9zU-mnl8&t=37s>
//!
//! Based on <https://gridfinity.xyz/specification>
//!
//! More examples [here](examples/Gridfinity).
//
include <../core.scad>
use <../utils/rounded_cylinder.scad>
pitch = 42;
z_step = 7;
width = 41.5;
foot_w = 37.2;
foot_h = 1.8;
lower_chamfer = 0.8;
upper_chamfer = 2.15;
corner_r = 7.5 / 2;
foot_r = 3.2 / 2;
chamfer_r = 1.6 / 2;
function gridfinity_bin(name, grid_x, grid_y, grid_z) = [name, [grid_x, grid_y, grid_z], lower_chamfer]; //! Constructor
function gridfinity_bin_name(type) = type[0]; //! Name for the STL file
function gridfinity_bin_size(type) = type[1]; //! Size in grid units
function gridfinity_base_z() = foot_h + lower_chamfer + upper_chamfer; //! height of base
function gridfinity_corner_r() = corner_r; //! Outside corner radius
function gridfinity_bin_size_mm(type) = //! Overall size of the bin
let(s = gridfinity_bin_size(type))
[(s.x - 1) * pitch + width, (s.y - 1) * pitch + width, s.z * z_step];
module gridfinity_bin(type) { //! Create a gridfinity bin, bits to cut out are passed as a child
size = gridfinity_bin_size(type);
w1 = width - 2 * (lower_chamfer + upper_chamfer);
w2 = width - 2 * upper_chamfer;
stl(gridfinity_bin_name(type)) {
translate([-(size.x - 1) / 2 * pitch, -(size.y - 1) / 2 * pitch])
for(x = [0 : size.x - 1], y = [0 : size.y - 1])
translate([x * pitch, y * pitch]) {
hull() {
rounded_rectangle([w1, w1, eps], chamfer_r);
translate_z(lower_chamfer)
rounded_rectangle([w2, w2, foot_h + eps], foot_r);
}
hull() {
translate_z(lower_chamfer + foot_h)
rounded_rectangle([w2, w2, foot_h + eps], foot_r);
translate_z(lower_chamfer + foot_h + upper_chamfer)
rounded_rectangle([width, width, eps], corner_r);
}
}
difference() {
base_z = gridfinity_base_z();
translate_z(base_z)
rounded_rectangle([(size.x - 1) * pitch + width, (size.y - 1) * pitch + width, size.z * z_step - base_z], corner_r);
if($children)
children(0);
}
}
}
module gridfinity_partition(type, cols = 1, rows = 1, wall = 1.6, iwall = squeezed_wall, bwall = 1, corner_r = 4) { //! Passed as child to hollow out specified partitions
size = gridfinity_bin_size_mm(type);
wx = (size.x - 2 * wall - (cols - 1) * iwall) / cols;
wy = (size.y - 2 * wall - (rows - 1) * iwall) / rows;
h = size.z - gridfinity_base_z() - bwall;
for(x = [0 : cols - 1], y = [0 : rows - 1])
translate([-size.x / 2 + wall + x * (wx + iwall) + wx / 2,
-size.y / 2 + wall + y * (wy + iwall) + wy / 2,
size.z + eps])
vflip()
rounded_top_rectangle([wx, wy, h + eps], corner_r, corner_r);
}

223
readme.md
View File

@@ -6,7 +6,7 @@ There are also Python scripts to generate Bills of Materials (BOMs),
STL files for all the printed parts, DXF files for CNC routed parts in a project and a manual containing assembly
instructions and exploded views by scraping markdown embedded in OpenSCAD comments, [see scripts](scripts/readme.md).
A simple example project can be found [here](examples/MainsBreakOutBox/readme.md).
A simple example project can be found [here](examples/MainsBreakOutBox/readme.md) and more complex examples [here](examples).
For more examples of what it can make see the [gallery](gallery/readme.md).
@@ -24,32 +24,32 @@ A list of changes classified as breaking, additions or fixes is maintained in [C
<tr><td> <a href = "#7_segments">7_segments</a> </td><td> <a href = "#iecs">IECs</a> </td><td> <a href = "#radials">Radials</a> </td><td> <a href = "#box">Box</a> </td><td> <a href = "#annotation">Annotation</a> </td><td> <a href = "#bom">BOM</a> </td></tr>
<tr><td> <a href = "#antennas">Antennas</a> </td><td> <a href = "#inserts">Inserts</a> </td><td> <a href = "#rails">Rails</a> </td><td> <a href = "#butt_box">Butt_box</a> </td><td> <a href = "#bezier">Bezier</a> </td><td> <a href = "#clip">Clip</a> </td></tr>
<tr><td> <a href = "#axials">Axials</a> </td><td> <a href = "#jack">Jack</a> </td><td> <a href = "#ring_terminals">Ring_terminals</a> </td><td> <a href = "#cable_clip">Cable_clip</a> </td><td> <a href = "#catenary">Catenary</a> </td><td> <a href = "#global">Global</a> </td></tr>
<tr><td> <a href = "#bldc_motors">BLDC_motors</a> </td><td> <a href = "#ldrs">LDRs</a> </td><td> <a href = "#rockers">Rockers</a> </td><td> <a href = "#cable_grommets">Cable_grommets</a> </td><td> <a href = "#core_xy">Core_xy</a> </td><td> <a href = "#polyholes">Polyholes</a> </td></tr>
<tr><td> <a href = "#ball_bearings">Ball_bearings</a> </td><td> <a href = "#led_meters">LED_meters</a> </td><td> <a href = "#rod">Rod</a> </td><td> <a href = "#camera_housing">Camera_housing</a> </td><td> <a href = "#dimension">Dimension</a> </td><td> <a href = "#rounded_rectangle">Rounded_rectangle</a> </td></tr>
<tr><td> <a href = "#batteries">Batteries</a> </td><td> <a href = "#leds">LEDs</a> </td><td> <a href = "#rod_ends">Rod_ends</a> </td><td> <a href = "#carriers">Carriers</a> </td><td> <a href = "#dogbones">Dogbones</a> </td><td> <a href = "#sphere">Sphere</a> </td></tr>
<tr><td> <a href = "#bearing_blocks">Bearing_blocks</a> </td><td> <a href = "#leadnuts">Leadnuts</a> </td><td> <a href = "#sbr_rails">SBR_rails</a> </td><td> <a href = "#corner_block">Corner_block</a> </td><td> <a href = "#fillet">Fillet</a> </td><td> <a href = "#teardrops">Teardrops</a> </td></tr>
<tr><td> <a href = "#belts">Belts</a> </td><td> <a href = "#light_strips">Light_strips</a> </td><td> <a href = "#sk_brackets">SK_brackets</a> </td><td> <a href = "#door_hinge">Door_hinge</a> </td><td> <a href = "#gears">Gears</a> </td><td></td></tr>
<tr><td> <a href = "#blowers">Blowers</a> </td><td> <a href = "#linear_bearings">Linear_bearings</a> </td><td> <a href = "#smds">SMDs</a> </td><td> <a href = "#door_latch">Door_latch</a> </td><td> <a href = "#hanging_hole">Hanging_hole</a> </td><td></td></tr>
<tr><td> <a href = "#box_sections">Box_sections</a> </td><td> <a href = "#magnets">Magnets</a> </td><td> <a href = "#ssrs">SSRs</a> </td><td> <a href = "#drag_chain">Drag_chain</a> </td><td> <a href = "#horiholes">Horiholes</a> </td><td></td></tr>
<tr><td> <a href = "#bulldogs">Bulldogs</a> </td><td> <a href = "#mains_sockets">Mains_sockets</a> </td><td> <a href = "#screws">Screws</a> </td><td> <a href = "#fan_guard">Fan_guard</a> </td><td> <a href = "#layout">Layout</a> </td><td></td></tr>
<tr><td> <a href = "#buttons">Buttons</a> </td><td> <a href = "#microswitches">Microswitches</a> </td><td> <a href = "#sealing_strip">Sealing_strip</a> </td><td> <a href = "#fixing_block">Fixing_block</a> </td><td> <a href = "#maths">Maths</a> </td><td></td></tr>
<tr><td> <a href = "#cable_strips">Cable_strips</a> </td><td> <a href = "#microview">Microview</a> </td><td> <a href = "#servo_motors">Servo_motors</a> </td><td> <a href = "#flat_hinge">Flat_hinge</a> </td><td> <a href = "#offset">Offset</a> </td><td></td></tr>
<tr><td> <a href = "#cameras">Cameras</a> </td><td> <a href = "#modules">Modules</a> </td><td> <a href = "#shaft_couplings">Shaft_couplings</a> </td><td> <a href = "#foot">Foot</a> </td><td> <a href = "#pcb_utils">PCB_utils</a> </td><td></td></tr>
<tr><td> <a href = "#circlips">Circlips</a> </td><td> <a href = "#nuts">Nuts</a> </td><td> <a href = "#sheets">Sheets</a> </td><td> <a href = "#handle">Handle</a> </td><td> <a href = "#quadrant">Quadrant</a> </td><td></td></tr>
<tr><td> <a href = "#components">Components</a> </td><td> <a href = "#o_ring">O_ring</a> </td><td> <a href = "#spades">Spades</a> </td><td> <a href = "#knob">Knob</a> </td><td> <a href = "#round">Round</a> </td><td></td></tr>
<tr><td> <a href = "#dip">DIP</a> </td><td> <a href = "#opengrab">Opengrab</a> </td><td> <a href = "#spools">Spools</a> </td><td> <a href = "#led_bezel">LED_bezel</a> </td><td> <a href = "#rounded_cylinder">Rounded_cylinder</a> </td><td></td></tr>
<tr><td> <a href = "#d_connectors">D_connectors</a> </td><td> <a href = "#pcb">PCB</a> </td><td> <a href = "#springs">Springs</a> </td><td> <a href = "#pcb_mount">PCB_mount</a> </td><td> <a href = "#rounded_polygon">Rounded_polygon</a> </td><td></td></tr>
<tr><td> <a href = "#displays">Displays</a> </td><td> <a href = "#pcbs">PCBs</a> </td><td> <a href = "#stepper_motors">Stepper_motors</a> </td><td> <a href = "#psu_shroud">PSU_shroud</a> </td><td> <a href = "#rounded_triangle">Rounded_triangle</a> </td><td></td></tr>
<tr><td> <a href = "#extrusion_brackets">Extrusion_brackets</a> </td><td> <a href = "#psus">PSUs</a> </td><td> <a href = "#swiss_clips">Swiss_clips</a> </td><td> <a href = "#pocket_handle">Pocket_handle</a> </td><td> <a href = "#sector">Sector</a> </td><td></td></tr>
<tr><td> <a href = "#extrusions">Extrusions</a> </td><td> <a href = "#panel_meters">Panel_meters</a> </td><td> <a href = "#terminals">Terminals</a> </td><td> <a href = "#press_fit">Press_fit</a> </td><td> <a href = "#splines">Splines</a> </td><td></td></tr>
<tr><td> <a href = "#fans">Fans</a> </td><td> <a href = "#photo_interrupters">Photo_interrupters</a> </td><td> <a href = "#toggles">Toggles</a> </td><td> <a href = "#printed_box">Printed_box</a> </td><td> <a href = "#sweep">Sweep</a> </td><td></td></tr>
<tr><td> <a href = "#fastons">Fastons</a> </td><td> <a href = "#pillars">Pillars</a> </td><td> <a href = "#transformers">Transformers</a> </td><td> <a href = "#printed_pulleys">Printed_pulleys</a> </td><td> <a href = "#thread">Thread</a> </td><td></td></tr>
<tr><td> <a href = "#fuseholder">Fuseholder</a> </td><td> <a href = "#pillow_blocks">Pillow_blocks</a> </td><td> <a href = "#ttracks">Ttracks</a> </td><td> <a href = "#ribbon_clamp">Ribbon_clamp</a> </td><td> <a href = "#tube">Tube</a> </td><td></td></tr>
<tr><td> <a href = "#gear_motors">Gear_motors</a> </td><td> <a href = "#pin_headers">Pin_headers</a> </td><td> <a href = "#tubings">Tubings</a> </td><td> <a href = "#ssr_shroud">SSR_shroud</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#geared_steppers">Geared_steppers</a> </td><td> <a href = "#potentiometers">Potentiometers</a> </td><td> <a href = "#variacs">Variacs</a> </td><td> <a href = "#screw_knob">Screw_knob</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#green_terminals">Green_terminals</a> </td><td> <a href = "#pulleys">Pulleys</a> </td><td> <a href = "#veroboard">Veroboard</a> </td><td> <a href = "#socket_box">Socket_box</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#ht_pipes">HT_pipes</a> </td><td></td><td> <a href = "#washers">Washers</a> </td><td> <a href = "#strap_handle">Strap_handle</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#hot_ends">Hot_ends</a> </td><td></td><td> <a href = "#wire">Wire</a> </td><td></td><td></td><td></td></tr>
<tr><td> <a href = "#bldc_motors">BLDC_motors</a> </td><td> <a href = "#ldrs">LDRs</a> </td><td> <a href = "#rockers">Rockers</a> </td><td> <a href = "#cable_grommets">Cable_grommets</a> </td><td> <a href = "#chamfer">Chamfer</a> </td><td> <a href = "#polyholes">Polyholes</a> </td></tr>
<tr><td> <a href = "#ball_bearings">Ball_bearings</a> </td><td> <a href = "#led_meters">LED_meters</a> </td><td> <a href = "#rod">Rod</a> </td><td> <a href = "#camera_housing">Camera_housing</a> </td><td> <a href = "#core_xy">Core_xy</a> </td><td> <a href = "#rounded_rectangle">Rounded_rectangle</a> </td></tr>
<tr><td> <a href = "#batteries">Batteries</a> </td><td> <a href = "#leds">LEDs</a> </td><td> <a href = "#rod_ends">Rod_ends</a> </td><td> <a href = "#carriers">Carriers</a> </td><td> <a href = "#dimension">Dimension</a> </td><td> <a href = "#sphere">Sphere</a> </td></tr>
<tr><td> <a href = "#bearing_blocks">Bearing_blocks</a> </td><td> <a href = "#leadnuts">Leadnuts</a> </td><td> <a href = "#sbr_rails">SBR_rails</a> </td><td> <a href = "#corner_block">Corner_block</a> </td><td> <a href = "#dogbones">Dogbones</a> </td><td> <a href = "#teardrops">Teardrops</a> </td></tr>
<tr><td> <a href = "#belts">Belts</a> </td><td> <a href = "#light_strips">Light_strips</a> </td><td> <a href = "#sk_brackets">SK_brackets</a> </td><td> <a href = "#door_hinge">Door_hinge</a> </td><td> <a href = "#fillet">Fillet</a> </td><td></td></tr>
<tr><td> <a href = "#blowers">Blowers</a> </td><td> <a href = "#linear_bearings">Linear_bearings</a> </td><td> <a href = "#smds">SMDs</a> </td><td> <a href = "#door_latch">Door_latch</a> </td><td> <a href = "#gears">Gears</a> </td><td></td></tr>
<tr><td> <a href = "#box_sections">Box_sections</a> </td><td> <a href = "#magnets">Magnets</a> </td><td> <a href = "#ssrs">SSRs</a> </td><td> <a href = "#drag_chain">Drag_chain</a> </td><td> <a href = "#hanging_hole">Hanging_hole</a> </td><td></td></tr>
<tr><td> <a href = "#bulldogs">Bulldogs</a> </td><td> <a href = "#mains_sockets">Mains_sockets</a> </td><td> <a href = "#screws">Screws</a> </td><td> <a href = "#fan_guard">Fan_guard</a> </td><td> <a href = "#horiholes">Horiholes</a> </td><td></td></tr>
<tr><td> <a href = "#buttons">Buttons</a> </td><td> <a href = "#microswitches">Microswitches</a> </td><td> <a href = "#sealing_strip">Sealing_strip</a> </td><td> <a href = "#fixing_block">Fixing_block</a> </td><td> <a href = "#layout">Layout</a> </td><td></td></tr>
<tr><td> <a href = "#cable_strips">Cable_strips</a> </td><td> <a href = "#microview">Microview</a> </td><td> <a href = "#servo_motors">Servo_motors</a> </td><td> <a href = "#flat_hinge">Flat_hinge</a> </td><td> <a href = "#maths">Maths</a> </td><td></td></tr>
<tr><td> <a href = "#cameras">Cameras</a> </td><td> <a href = "#modules">Modules</a> </td><td> <a href = "#shaft_couplings">Shaft_couplings</a> </td><td> <a href = "#foot">Foot</a> </td><td> <a href = "#offset">Offset</a> </td><td></td></tr>
<tr><td> <a href = "#circlips">Circlips</a> </td><td> <a href = "#nuts">Nuts</a> </td><td> <a href = "#sheets">Sheets</a> </td><td> <a href = "#gridfinity">Gridfinity</a> </td><td> <a href = "#pcb_utils">PCB_utils</a> </td><td></td></tr>
<tr><td> <a href = "#components">Components</a> </td><td> <a href = "#o_ring">O_ring</a> </td><td> <a href = "#spades">Spades</a> </td><td> <a href = "#handle">Handle</a> </td><td> <a href = "#quadrant">Quadrant</a> </td><td></td></tr>
<tr><td> <a href = "#dip">DIP</a> </td><td> <a href = "#opengrab">Opengrab</a> </td><td> <a href = "#spools">Spools</a> </td><td> <a href = "#knob">Knob</a> </td><td> <a href = "#round">Round</a> </td><td></td></tr>
<tr><td> <a href = "#d_connectors">D_connectors</a> </td><td> <a href = "#pcb">PCB</a> </td><td> <a href = "#springs">Springs</a> </td><td> <a href = "#led_bezel">LED_bezel</a> </td><td> <a href = "#rounded_cylinder">Rounded_cylinder</a> </td><td></td></tr>
<tr><td> <a href = "#displays">Displays</a> </td><td> <a href = "#pcbs">PCBs</a> </td><td> <a href = "#stepper_motors">Stepper_motors</a> </td><td> <a href = "#pcb_mount">PCB_mount</a> </td><td> <a href = "#rounded_polygon">Rounded_polygon</a> </td><td></td></tr>
<tr><td> <a href = "#extrusion_brackets">Extrusion_brackets</a> </td><td> <a href = "#psus">PSUs</a> </td><td> <a href = "#swiss_clips">Swiss_clips</a> </td><td> <a href = "#psu_shroud">PSU_shroud</a> </td><td> <a href = "#rounded_triangle">Rounded_triangle</a> </td><td></td></tr>
<tr><td> <a href = "#extrusions">Extrusions</a> </td><td> <a href = "#panel_meters">Panel_meters</a> </td><td> <a href = "#terminals">Terminals</a> </td><td> <a href = "#pocket_handle">Pocket_handle</a> </td><td> <a href = "#sector">Sector</a> </td><td></td></tr>
<tr><td> <a href = "#fans">Fans</a> </td><td> <a href = "#photo_interrupters">Photo_interrupters</a> </td><td> <a href = "#toggles">Toggles</a> </td><td> <a href = "#press_fit">Press_fit</a> </td><td> <a href = "#splines">Splines</a> </td><td></td></tr>
<tr><td> <a href = "#fastons">Fastons</a> </td><td> <a href = "#pillars">Pillars</a> </td><td> <a href = "#transformers">Transformers</a> </td><td> <a href = "#printed_box">Printed_box</a> </td><td> <a href = "#sweep">Sweep</a> </td><td></td></tr>
<tr><td> <a href = "#fuseholder">Fuseholder</a> </td><td> <a href = "#pillow_blocks">Pillow_blocks</a> </td><td> <a href = "#ttracks">Ttracks</a> </td><td> <a href = "#printed_pulleys">Printed_pulleys</a> </td><td> <a href = "#thread">Thread</a> </td><td></td></tr>
<tr><td> <a href = "#gear_motors">Gear_motors</a> </td><td> <a href = "#pin_headers">Pin_headers</a> </td><td> <a href = "#tubings">Tubings</a> </td><td> <a href = "#ribbon_clamp">Ribbon_clamp</a> </td><td> <a href = "#tube">Tube</a> </td><td></td></tr>
<tr><td> <a href = "#geared_steppers">Geared_steppers</a> </td><td> <a href = "#potentiometers">Potentiometers</a> </td><td> <a href = "#variacs">Variacs</a> </td><td> <a href = "#ssr_shroud">SSR_shroud</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#green_terminals">Green_terminals</a> </td><td> <a href = "#pulleys">Pulleys</a> </td><td> <a href = "#veroboard">Veroboard</a> </td><td> <a href = "#screw_knob">Screw_knob</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#ht_pipes">HT_pipes</a> </td><td></td><td> <a href = "#washers">Washers</a> </td><td> <a href = "#socket_box">Socket_box</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#hot_ends">Hot_ends</a> </td><td></td><td> <a href = "#wire">Wire</a> </td><td> <a href = "#strap_handle">Strap_handle</a> </td><td></td><td></td></tr>
<tr><td> <a href = "#hygrometer">Hygrometer</a> </td><td></td><td> <a href = "#zipties">Zipties</a> </td><td></td><td></td><td></td></tr>
</table>
@@ -1106,7 +1106,7 @@ LCD displays.
| 1 | `display(BigTreeTech_TFT35v3_0)` | BigTreeTech TFT35 v3.0 |
| 1 | `display(HDMI5)` | HDMI display 5" |
| 1 | `display(TFT128x160)` | LCD TFT ST7735 display 128x160 |
| 1 | `display(LCD1602A)` | LCD display 1602A |
| 2 | `display(LCD1602A)` | LCD display 1602A |
| 1 | `display(LCD2004A)` | LCD display 2004A |
| 1 | `display(LCDS7282B)` | LCD display S-7282B |
| 1 | `display(SSD1963_4p3)` | LCD display SSD1963 4.3" |
@@ -1128,6 +1128,19 @@ Brackets for joining extrusions at a corner.
### Properties
| Function | Description |
|:--- |:--- |
| `extrusion_corner_bracket_3D_inner_height(type)` | The depth offset of the dip in the cuboid |
| `extrusion_corner_bracket_3D_inner_side_length(type)` | The length of the dip in the cuboid sides |
| `extrusion_corner_bracket_3D_nut_dia(type)` | The width of bottom part of the nut |
| `extrusion_corner_bracket_3D_nut_nyloc_thickness(type)` | The total thickness of the nut |
| `extrusion_corner_bracket_3D_nut_screw(type)` | The screw (most likely Mx_grub_screw from <NopSCADlib/vitamins/screws.scad>) |
| `extrusion_corner_bracket_3D_nut_screws_hor(type)` | The positions of the screw holes on the horizontal arms, expressed in %/100 of the nut arm |
| `extrusion_corner_bracket_3D_nut_screws_ver(type)` | The positions of the screw holes on the vertical arms, expressed in %/100 of the nut arm |
| `extrusion_corner_bracket_3D_nut_sx(type)` | The length of the nuts |
| `extrusion_corner_bracket_3D_nut_thickness(type)` | The thickness of the top part of the nut |
| `extrusion_corner_bracket_3D_nut_ty1(type)` | The total width of the nut |
| `extrusion_corner_bracket_3D_nut_ty2(type)` | The width of the top edge of the nut |
| `extrusion_corner_bracket_3D_outer_height(type)` | The height of the cuboid |
| `extrusion_corner_bracket_3D_outer_side_length(type)` | The length of the base cuboid sides |
| `extrusion_corner_bracket_base_thickness(type)` | Thickness of base of bracket |
| `extrusion_corner_bracket_extrusion(type)` | Default extrusion this bracket is for |
| `extrusion_corner_bracket_hole_offset(type)` | Hole offset from corner |
@@ -1139,12 +1152,20 @@ Brackets for joining extrusions at a corner.
| `extrusion_inner_corner_bracket_size(type)` | Size of inner bracket |
| `extrusion_inner_corner_bracket_tnut(type)` | The sliding t-nut it is based on |
### Functions
| Function | Description |
|:--- |:--- |
| `extrusion_corner_bracket_3D_get_x_offset(type)` | helper function to position the x beam |
| `extrusion_corner_bracket_3D_get_x_rot(type)` | helper function to rotate the y beam |
| `extrusion_corner_bracket_3D_get_y_offset(type)` | helper function to position the y beam |
| `extrusion_corner_bracket_3D_get_y_rot(type)` | helper function to rotate the y beam |
### Modules
| Module | Description |
|:--- |:--- |
| `extrusion_corner_bracket(type)` | Corner bracket for extrusion |
| `extrusion_corner_bracket_3D(type, grub_screws = true)` | draw the specified extrusion_corner_bracket_3D |
| `extrusion_corner_bracket_assembly(type, part_thickness = undef, screw_type = undef, nut_type = undef, max_screw_depth = undef, extrusion = undef)` | Assembly with fasteners in place |
| `extrusion_corner_bracket_hole_positions(type)` | Place children at hole positions |
| `extrusion_inner_corner_bracket(type, grub_screws = true, backwards = false, extrusion = undef)` | Inner corner bracket for extrusion |
![extrusion_brackets](tests/png/extrusion_brackets.png)
@@ -1152,21 +1173,30 @@ Brackets for joining extrusions at a corner.
### Vitamins
| Qty | Module call | BOM entry |
| ---:|:--- |:---|
| 3 | `extrusion(E2020, 40, cornerHole = true)` | Extrusion E2020 x 40mm |
| 2 | `extrusion(E2020t, 20.5)` | Extrusion E2020t x 20.5mm |
| 1 | `extrusion(E2020t, 28)` | Extrusion E2020t x 28mm |
| 2 | `extrusion(E2020t, 39.5)` | Extrusion E2020t x 39.5mm |
| 1 | `extrusion(E2020t, 48)` | Extrusion E2020t x 48mm |
| 3 | `extrusion(E3030, 40, cornerHole = true)` | Extrusion E3030 x 40mm |
| 3 | `extrusion(E4040, 40, cornerHole = true)` | Extrusion E4040 x 40mm |
| 1 | `extrusion(E4040t, 27.4, cornerHole = true)` | Extrusion E4040t x 27.4mm |
| 1 | `extrusion(E4040t, 40, cornerHole = true)` | Extrusion E4040t x 40mm |
| 1 | `extrusion(E4040t, 60.4, cornerHole = true)` | Extrusion E4040t x 60.4mm |
| 1 | `extrusion(E4040t, 80, cornerHole = true)` | Extrusion E4040t x 80mm |
| 2 | `extrusion_corner_bracket(E20_corner_bracket)` | Extrusion corner bracket 20mm for E2020t |
| 2 | `extrusion_corner_bracket(E40_corner_bracket)` | Extrusion corner bracket 35mm for E4040t |
| 2 | `extrusion_corner_bracket_3D(extrusion_corner_bracket_3D_2020)` | Extrusion corner bracket 3D mm for E2020 |
| 2 | `extrusion_corner_bracket_3D(extrusion_corner_bracket_3D_3030)` | Extrusion corner bracket 3D mm for E3030 |
| 2 | `extrusion_corner_bracket_3D(extrusion_corner_bracket_3D_4040)` | Extrusion corner bracket 3D mm for E4040 |
| 4 | `extrusion_inner_corner_bracket(E20_inner_corner_bracket)` | Extrusion inner corner bracket for E2020t |
| 2 | `extrusion_inner_corner_bracket(E40_inner_corner_bracket)` | Extrusion inner corner bracket for E4040t |
| 4 | `sliding_t_nut(M4_sliding_t_nut)` | Nut M4 sliding T |
| 4 | `sliding_t_nut(M8_sliding_ball_t_nut)` | Nut M8 sliding T with spring loaded ball |
| 4 | `screw(M4_cap_screw, 8)` | Screw M4 cap x 8mm |
| 12 | `screw(M4_grub_screw, 5)` | Screw M4 grub x 5mm |
| 20 | `screw(M6_grub_screw, 6.2)` | Screw M6 grub x 6.2mm |
| 20 | `screw(M6_grub_screw, 9.5)` | Screw M6 grub x 9.5mm |
| 4 | `screw(M8_cap_screw, 12)` | Screw M8 cap x 12mm |
| 4 | `washer(M4_washer)` | Washer M4 x 9mm x 0.8mm |
| 4 | `washer(M8_washer)` | Washer M8 x 17mm x 1.6mm |
@@ -1210,24 +1240,26 @@ Aluminium extrusion.
### Modules
| Module | Description |
|:--- |:--- |
| `extrusion(type, length, center = true, cornerHole = false)` | Draw the specified extrusion |
| `extrusion(type, length, center = true, cornerHole = true)` | Draw the specified extrusion |
![extrusions](tests/png/extrusions.png)
### Vitamins
| Qty | Module call | BOM entry |
| ---:|:--- |:---|
| 1 | `extrusion(E1515, 80)` | Extrusion E1515 x 80mm |
| 1 | `extrusion(E2020, 80)` | Extrusion E2020 x 80mm |
| 1 | `extrusion(E2020t, 80)` | Extrusion E2020t x 80mm |
| 1 | `extrusion(E2040, 80)` | Extrusion E2040 x 80mm |
| 1 | `extrusion(E2060, 80)` | Extrusion E2060 x 80mm |
| 1 | `extrusion(E2080, 80)` | Extrusion E2080 x 80mm |
| 1 | `extrusion(E1515, 80, cornerHole = true)` | Extrusion E1515 x 80mm |
| 1 | `extrusion(E2020, 80, cornerHole = true)` | Extrusion E2020 x 80mm |
| 1 | `extrusion(E2020t, 80, cornerHole = true)` | Extrusion E2020t x 80mm |
| 1 | `extrusion(E2040, 80, cornerHole = true)` | Extrusion E2040 x 80mm |
| 1 | `extrusion(E2060, 80, cornerHole = true)` | Extrusion E2060 x 80mm |
| 1 | `extrusion(E2080, 80, cornerHole = true)` | Extrusion E2080 x 80mm |
| 1 | `extrusion(E3030, 80, cornerHole = true)` | Extrusion E3030 x 80mm |
| 1 | `extrusion(E3060, 80, cornerHole = true)` | Extrusion E3060 x 80mm |
| 1 | `extrusion(E4040, 80, cornerHole = true)` | Extrusion E4040 x 80mm |
| 1 | `extrusion(E4040t, 80, cornerHole = true)` | Extrusion E4040t x 80mm |
| 1 | `extrusion(E4080, 80, cornerHole = true)` | Extrusion E4080 x 80mm |
| 1 | `extrusion(Makerbeam, 80, cornerHole = true)` | Extrusion Makerbeam x 80mm |
| 1 | `extrusion(MakerbeamXL, 80, cornerHole = true)` | Extrusion MakerbeamXL x 80mm |
<a href="#top">Top</a>
@@ -3000,12 +3032,14 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `pcb(EnviroPlus)` | Enviro+ |
| 1 | `pcb(ExtruderPCB)` | Extruder connection PCB - not shown |
| 1 | `pcb(HW803_1WAY_RELAY)` | HW-803 5V 1 way relay module |
| 1 | `pcb(I2C_LCD_Backpack)` | I2C / SPI character LCD backpack |
| 1 | `pcb(KY_040)` | KY-040 rotart encoder breakout |
| 1 | `pcb(Keyes5p1)` | Keyes5.1 Arduino Uno expansion board - not shown |
| 1 | `pcb(L9110S)` | L9110S 2-Channel motor driver module |
| 1 | `pcb(LIPO_fuel_gauge)` | LIPO fuel gauge |
| 1 | `pcb(MP1584EN)` | MP1584EN 3A buck converter |
| 1 | `pcb(MT3608)` | MT3608 boost converter module |
| 1 | `pcb(MELLOW_FLY_D5)` | Mellow FLY D5 |
| 1 | `pcb(Melzi)` | Melzi electronics - not shown |
| 6 | | Micro SD card |
| 1 | | Micro SD card - not shown |
@@ -3014,7 +3048,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `molex_254(3)` | Molex KK header 3 way - not shown |
| 20 | `nut(M2_nut, nyloc = true)` | Nut M2 x 1.6mm nyloc |
| 38 | `nut(M2p5_nut, nyloc = true)` | Nut M2.5 x 2.2mm nyloc |
| 48 | `nut(M3_nut, nyloc = true)` | Nut M3 x 2.4mm nyloc |
| 52 | `nut(M3_nut, nyloc = true)` | Nut M3 x 2.4mm nyloc |
| 8 | `nut(M4_nut, nyloc = true)` | Nut M4 x 3.2mm nyloc |
| 1 | `pcb(OPZ2)` | Orange Pi Zero 2 |
| 1 | `pcb(PI_IO)` | PI_IO V2 - not shown |
@@ -3038,17 +3072,17 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 4 | `screw(M2_cap_screw, 25)` | Screw M2 cap x 25mm |
| 2 | `screw(M2p5_cap_screw, 20)` | Screw M2.5 cap x 20mm |
| 8 | `screw(M2p5_cap_screw, 30)` | Screw M2.5 cap x 30mm |
| 8 | `screw(M2p5_cap_screw, 35)` | Screw M2.5 cap x 35mm |
| 4 | `screw(M2p5_cap_screw, 40)` | Screw M2.5 cap x 40mm |
| 4 | `screw(M2p5_cap_screw, 35)` | Screw M2.5 cap x 35mm |
| 8 | `screw(M2p5_cap_screw, 40)` | Screw M2.5 cap x 40mm |
| 4 | `screw(M2p5_dome_screw, 25)` | Screw M2.5 dome x 25mm |
| 4 | `screw(M2p5_pan_screw, 20)` | Screw M2.5 pan x 20mm |
| 8 | `screw(M2p5_pan_screw, 30)` | Screw M2.5 pan x 30mm |
| 19 | `screw(M3_cap_screw, 16)` | Screw M3 cap x 16mm |
| 13 | `screw(M3_cap_screw, 20)` | Screw M3 cap x 20mm |
| 4 | `screw(M2p5_pan_screw, 30)` | Screw M2.5 pan x 30mm |
| 4 | `screw(M2p5_pan_screw, 35)` | Screw M2.5 pan x 35mm |
| 18 | `screw(M3_cap_screw, 16)` | Screw M3 cap x 16mm |
| 18 | `screw(M3_cap_screw, 20)` | Screw M3 cap x 20mm |
| 5 | `screw(M3_cap_screw, 25)` | Screw M3 cap x 25mm |
| 11 | `screw(M3_cap_screw, 35)` | Screw M3 cap x 35mm |
| 4 | `screw(M4_cap_screw, 20)` | Screw M4 cap x 20mm |
| 4 | `screw(M4_cap_screw, 25)` | Screw M4 cap x 25mm |
| 8 | `screw(M4_cap_screw, 25)` | Screw M4 cap x 25mm |
| 1 | `pcb(XIAO)` | Seeeduino XIAO |
| 1 | `pcb(9DOF_stick)` | Sparkfun 9 degrees of freedom IMU |
| 1 | `pcb(TP4056)` | TP4056 Li-lon Battery charger module |
@@ -3059,7 +3093,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `pcb(WD2002SJ)` | WD2002SJ Buck Boost DC-DC converter |
| 20 | `washer(M2_washer)` | Washer M2 x 5mm x 0.3mm |
| 38 | `washer(M2p5_washer)` | Washer M2.5 x 5.9mm x 0.5mm |
| 48 | `washer(M3_washer)` | Washer M3 x 7mm x 0.5mm |
| 52 | `washer(M3_washer)` | Washer M3 x 7mm x 0.5mm |
| 8 | `washer(M4_washer)` | Washer M4 x 9mm x 0.8mm |
| 1 | `pcb(ZC_A0591)` | ZC-A0591 ULN2003 driver PCB |
@@ -3067,30 +3101,32 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| Qty | Filename |
| ---:|:--- |
| 4 | pcb_spacer20100.stl |
| 4 | pcb_spacer20150.stl |
| 4 | pcb_spacer20160.stl |
| 4 | pcb_spacer2070.stl |
| 4 | pcb_spacer2080.stl |
| 4 | pcb_spacer2090.stl |
| 2 | pcb_spacer25110.stl |
| 4 | pcb_spacer25140.stl |
| 4 | pcb_spacer25180.stl |
| 4 | pcb_spacer25150.stl |
| 4 | pcb_spacer25190.stl |
| 4 | pcb_spacer25200_2.stl |
| 4 | pcb_spacer25200.stl |
| 4 | pcb_spacer25210_2.stl |
| 4 | pcb_spacer25250.stl |
| 4 | pcb_spacer25220_2.stl |
| 4 | pcb_spacer25260.stl |
| 4 | pcb_spacer25270.stl |
| 4 | pcb_spacer25280.stl |
| 4 | pcb_spacer2580.stl |
| 5 | pcb_spacer30130.stl |
| 4 | pcb_spacer30220.stl |
| 1 | pcb_spacer30130.stl |
| 4 | pcb_spacer30140.stl |
| 4 | pcb_spacer30230.stl |
| 3 | pcb_spacer30240.stl |
| 4 | pcb_spacer30240.stl |
| 3 | pcb_spacer30250.stl |
| 10 | pcb_spacer3050.stl |
| 9 | pcb_spacer3060.stl |
| 8 | pcb_spacer3060.stl |
| 9 | pcb_spacer3070.stl |
| 4 | pcb_spacer3080.stl |
| 5 | pcb_spacer3080.stl |
| 4 | pcb_spacer3090.stl |
| 4 | pcb_spacer40100.stl |
| 4 | pcb_spacer4090.stl |
| 4 | pcb_spacer40110.stl |
<a href="#top">Top</a>
@@ -4299,8 +4335,8 @@ SK shaft support brackets
### Vitamins
| Qty | Module call | BOM entry |
| ---:|:--- |:---|
| 2 | `extrusion(E2020, 20)` | Extrusion E2020 x 20mm |
| 2 | `extrusion(E3030, 20)` | Extrusion E3030 x 20mm |
| 2 | `extrusion(E2020, 20, cornerHole = true)` | Extrusion E2020 x 20mm |
| 2 | `extrusion(E3030, 20, cornerHole = true)` | Extrusion E3030 x 20mm |
| 2 | `sliding_t_nut(M4_hammer_nut)` | Nut M4 hammer |
| 2 | `sliding_t_nut(M4_sliding_t_nut)` | Nut M4 sliding T |
| 2 | `sliding_t_nut(M5_sliding_t_nut)` | Nut M5 sliding T |
@@ -6279,6 +6315,49 @@ inserts don't grip well in rubber.
| 1 | insert_foot_assembly |
<a href="#top">Top</a>
---
<a name="gridfinity"></a>
## Gridfinity
Generate storage bins compatible with Zack Freedman's Gridfinity design, see <https://www.youtube.com/watch?v=ra_9zU-mnl8&t=37s>
Based on <https://gridfinity.xyz/specification>
More examples [here](examples/Gridfinity).
[printed/gridfinity.scad](printed/gridfinity.scad) Implementation.
[tests/gridfinity.scad](tests/gridfinity.scad) Code for this example.
### Properties
| Function | Description |
|:--- |:--- |
| `gridfinity_bin_name(type)` | Name for the STL file |
| `gridfinity_bin_size(type)` | Size in grid units |
### Functions
| Function | Description |
|:--- |:--- |
| `gridfinity_base_z()` | height of base |
| `gridfinity_bin(name, grid_x, grid_y, grid_z)` | Constructor |
| `gridfinity_bin_size_mm(type)` | Overall size of the bin |
| `gridfinity_corner_r()` | Outside corner radius |
### Modules
| Module | Description |
|:--- |:--- |
| `gridfinity_bin(type)` | Create a gridfinity bin, bits to cut out are passed as a child |
| `gridfinity_partition(type, cols = 1, rows = 1, wall = 1.6, iwall = squeezed_wall, bwall = 1, corner_r = 4)` | Passed as child to hollow out specified partitions |
![gridfinity](tests/png/gridfinity.png)
### Printed
| Qty | Filename |
| ---:|:--- |
| 1 | chuck_stand.stl |
<a href="#top">Top</a>
---
@@ -7179,6 +7258,27 @@ The coordinates of the lowest point on the curve can be retrieved by calling `ca
![catenary](tests/png/catenary.png)
<a href="#top">Top</a>
---
<a name="chamfer"></a>
## Chamfer
45 degree chamfer the entrance to holes.
If the hole shape is concave then it must be described as a list of 2D convex children.
[utils/chamfer.scad](utils/chamfer.scad) Implementation.
[tests/chamfer.scad](tests/chamfer.scad) Code for this example.
### Modules
| Module | Description |
|:--- |:--- |
| `chamfer_hole(depth = 1)` | Chamfer a hole given a 2D outline as a child |
![chamfer](tests/png/chamfer.png)
<a href="#top">Top</a>
---
@@ -7253,7 +7353,7 @@ allows flexible positioning of the motors.
## Dimension
Modules for adding dimensions to assembly views.
<img src="https://github.com/nophead/NopSCADlib/raw/master/docs/sliding_t_nut.png" width="500", height="378">
![](docs/sliding_t_nut_small.png)
* If `text` is empty, will display the measured distance.
* `offset` will determine how much space is between the measured point and the dimension.
@@ -7847,6 +7947,8 @@ The `pose()` module allows assembly views in the readme to be posed differently
* To get the parameter values make the GUI window square, pose the view with the mouse and then copy the viewport parameters from the Edit menu and paste them into the pose invocation.
* Two `pose()` modules can be chained to allow different poses for exploded and assembled views.
The `pose_stl()` module allows an STL child to be posed for its rendered image used in the readme for the project.
[utils/core/bom.scad](utils/core/bom.scad) Implementation.
[tests/BOM.scad](tests/BOM.scad) Code for this example.
@@ -7870,8 +7972,9 @@ The `pose()` module allows assembly views in the readme to be posed differently
| `no_explode()` | Prevent children being exploded |
| `no_pose()` | Force children not to be posed even if parent is |
| `not_on_bom(on = false)` | Specify the following child parts are not on the BOM, for example when they are on a PCB that comes assembled |
| `pose(a = [55, 0, 25], t = [0, 0, 0], exploded = undef, d = undef)` | Pose an STL or assembly for rendering to png by specifying rotation `a`, translation `t` and optionally `d`, `exploded = true for` just the exploded view or `false` for unexploded only. |
| `pose(a = [55, 0, 25], t = [0, 0, 0], exploded = undef, d = undef)` | Pose an assembly for rendering to png by specifying rotation `a`, translation `t` and optionally `d`, `exploded = true for` just the exploded view or `false` for unexploded only. |
| `pose_hflip(exploded = undef)` | Pose an STL or assembly for rendering to png by flipping around the Y axis, `exploded = true for` just the exploded view or `false` for unexploded only. |
| `pose_stl(a = [70, 0, 315], t = [0, 0, 0], d = 500)` | Pose an STL for its render, `a`, `t`, & `d` are camera parameters. |
| `pose_vflip(exploded = undef)` | Pose an STL or assembly for rendering to png by flipping around the X axis, `exploded = true for` just the exploded view or `false` for unexploded only. |
| `stl(name)` | Name an stl that will appear on the BOM, there needs to a module named `<name>_stl` to make it |
| `stl_colour(colour = pp1_colour, alpha = 1)` | Colour an stl where it is placed in an assembly. `alpha` can be used to make it appear transparent. |

View File

@@ -69,7 +69,10 @@ class Part:
self.count = 1
for arg in args:
arg = arg.replace('true', 'True').replace('false', 'False').replace('undef', 'None')
exec('self.' + arg)
try:
exec('self.' + arg)
except:
print(arg)
def data(self):
return self.__dict__
@@ -107,7 +110,7 @@ class BOM:
match = re.match(r'^(.*?\.stl|.*?\.dxf|.*?\.svg)\((.*)\)$', s) #look for name.stl(...), name.dxf(...) or name.svg(...)
if match:
s = match.group(1)
args = [match.group(2)]
args = match.group(2).split('|')
if s[-4:] == ".stl":
parts = self.printed
else:

View File

@@ -61,11 +61,14 @@ def render(target, type):
things = { 'stl' : 'printed', 'dxf' : 'routed', 'svg' : 'routed' }[type]
colours = {}
cameras = {}
for ass in flat_bom:
for part in ass[things]:
obj = ass[things][part]
if "colour" in obj:
colours[part] = obj["colour"]
if "camera" in obj:
cameras[part] = obj["camera"]
#
# Remove unused png files
#
@@ -87,13 +90,16 @@ def render(target, type):
png_maker_name = tmp_dir + "/png.scad"
pp1 = [0, 146/255, 0]
colour = pp1
camera = "0,0,0,70,0,315,500"
if part in cameras:
camera = cameras[part]
if part in colours:
colour = colours[part]
if not '[' in colour:
colour = '"' + colour + '"'
with open(png_maker_name, "w") as f:
f.write('color(%s) import("%s");\n' % (colour, reltmp(part_file, target)))
cam = "--camera=0,0,0,70,0,315,500" if type == 'stl' else "--camera=0,0,0,0,0,0,500"
cam = "--camera=" + camera if type == 'stl' else "--camera=0,0,0,0,0,0,500"
render = "--preview" if type == 'stl' or colour != pp1 else "--render"
tmp_name = tmp_dir + '/' + part[:-4] + '.png'
dummy_deps_name = tmp_dir + '/tmp.deps' # work around for OpenSCAD issue #3879

View File

@@ -353,7 +353,7 @@ def views(target, do_assemblies = None):
print('### 3D Printed parts', file = doc_file)
keys = sorted(list(printed.keys()))
for i, p in enumerate(keys):
print('%s %d x %s |' % ('\n|' if not (i % 3) else '', printed[p]["count"], p), file = doc_file, end = '')
print('%s %d x [%s](stls/%s) |' % ('\n|' if not (i % 3) else '', printed[p]["count"], p, p), file = doc_file, end = '')
if (i % 3) == 2 or i == len(printed) - 1:
n = (i % 3) + 1
print('\n|%s' % ('---|' * n), file = doc_file)
@@ -368,7 +368,10 @@ def views(target, do_assemblies = None):
print("### CNC Routed parts", file = doc_file)
keys = sorted(list(routed.keys()))
for i, r in enumerate(keys):
print('%s %d x %s |' % ('\n|' if not (i % 3) else '', routed[r]["count"], r), file = doc_file, end = '')
if(r.endswith('dxf')):
print('%s %d x [%s](dxfs/%s) |' % ('\n|' if not (i % 3) else '', routed[r]["count"], r, r), file = doc_file, end = '')
elif(r.endswith('svg')):
print('%s %d x [%s](svgs/%s) |' % ('\n|' if not (i % 3) else '', routed[r]["count"], r, r), file = doc_file, end = '')
if (i % 3) == 2 or i == len(routed) - 1:
n = (i % 3) + 1
print('\n|%s' % ('---|' * n), file = doc_file)
@@ -379,7 +382,7 @@ def views(target, do_assemblies = None):
elif (part[-4:] == ".svg"):
print('| ![%s](svgs/%s) %s' % (part, part.replace('.svg','.png'), '|\n' if j == j - 1 else ''), end = '', file = doc_file)
else:
print("Unkown file type ", part[-4:], " for file ", part)
print("Unknown file type ", part[-4:], " for file ", part)
print('\n', file = doc_file)
print('\n', file = doc_file)

View File

@@ -22,7 +22,7 @@ use <../utils/layout.scad>
include <../vitamins/leds.scad>
module leds()
layout(echoit([for(l = LEDs) max(led_diameter(l))]), 5)
layout([for(l = LEDs) max(led_diameter(l))], 5)
led(LEDs[$i], ["green", "blue", "red", "orange"][$i % 4]);
if($preview)

37
tests/chamfer.scad Normal file
View File

@@ -0,0 +1,37 @@
//
// NopSCADlib Copyright Chris Palmer 2025
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// This file is part of NopSCADlib.
//
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
// GNU General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../core.scad>
use <../utils/chamfer.scad>
module chamfer() {
difference() {
h = 1;
rounded_rectangle([20, 20, h], 2);
translate_z(h)
chamfer_hole(h + eps) {
circle(2);
translate([-1, 0])
square([2, 5]);
}
}
}
chamfer();

View File

@@ -161,7 +161,7 @@ module coreXY_motor_in_back_test2() {
lower_drive_pulley_offset = [20, 5];
coreXY(coreXY_GT2_20_16, size, pos, separation, x_gap = 0, plain_idler_offset = [20, 0], upper_drive_pulley_offset, lower_drive_pulley_offset, show_pulleys = true, left_lower = false, motor_back = true);
coreXY(coreXY_GT2_20_16, size, pos, separation, x_gap = 0, plain_idler_offset = [20, 0], upper_drive_pulley_offset = upper_drive_pulley_offset, lower_drive_pulley_offset = lower_drive_pulley_offset, show_pulleys = true, left_lower = false, motor_back = true);
translate (
[ size.x - separation.x/2 - lower_drive_pulley_offset.x

View File

@@ -24,76 +24,109 @@ include <../vitamins/washers.scad>
include <../vitamins/nuts.scad>
module inner_bracket_test(bracket, backwards = false)
rotate([90, 0, 180]) {
extrusion = extrusion_inner_corner_bracket_extrusion(bracket);
eWidth = extrusion_width(extrusion);
size = extrusion_inner_corner_bracket_size(bracket);
tnut = extrusion_inner_corner_bracket_tnut(bracket);
rotate([90, 0, 180]) {
extrusion = extrusion_inner_corner_bracket_extrusion(bracket);
eWidth = extrusion_width(extrusion);
size = extrusion_inner_corner_bracket_size(bracket);
tnut = extrusion_inner_corner_bracket_tnut(bracket);
translate([backwards ? -eWidth : 0, 0])
extrusion_inner_corner_bracket(bracket, backwards = backwards);
translate([backwards ? -eWidth : 0, 0])
extrusion_inner_corner_bracket(bracket, backwards=backwards);
translate([-eWidth / 2, 0])
rotate([-90, 0, 0])
extrusion(extrusion, size.x - nut_thickness(tnut) - extrusion_tab_thickness(extrusion), false, cornerHole = eWidth > 20);
translate([-eWidth / 2, 0])
rotate([-90, 0, 0])
extrusion(extrusion, size.x - nut_thickness(tnut) - extrusion_tab_thickness(extrusion), false, cornerHole=eWidth > 20);
translate([-eWidth, -eWidth / 2])
rotate([0, 90, 0])
extrusion(extrusion, eWidth + size.y - nut_thickness(tnut) - extrusion_tab_thickness(extrusion), false, cornerHole = eWidth > 20);
}
translate([-eWidth, -eWidth / 2])
rotate([0, 90, 0])
extrusion(extrusion, eWidth + size.y - nut_thickness(tnut) - extrusion_tab_thickness(extrusion), false, cornerHole=eWidth > 20);
}
module bracket_test(bracket)
rotate([90, 0, 180]) {
extrusion = extrusion_corner_bracket_extrusion(bracket);
eWidth = extrusion_width(extrusion);
size = extrusion_corner_bracket_size(bracket);
extrusion_corner_bracket_assembly(bracket);
translate([-eWidth / 2, 0])
rotate([-90, 0, 0])
extrusion(extrusion, size.y, false, cornerHole = eWidth > 20);
translate([-eWidth, -eWidth / 2])
rotate([0, 90, 0])
extrusion(extrusion, eWidth + size.x, false, cornerHole = eWidth > 20);
}
module extrusion_brackets(examples = false) {
extrusion_inner_corner_bracket(E20_inner_corner_bracket);
translate([30, 0])
extrusion_inner_corner_bracket(E20_inner_corner_bracket, grub_screws = false);
translate([60, 0])
extrusion_corner_bracket_assembly(E20_corner_bracket);
translate([110, 0])
extrusion_inner_corner_bracket(E40_inner_corner_bracket);
translate([140, 0])
extrusion_corner_bracket_assembly(E40_corner_bracket);
if(examples) {
translate([20, 50, 10])
inner_bracket_test(E20_inner_corner_bracket, true);
translate([20, 80, 10])
inner_bracket_test(E20_inner_corner_bracket);
translate([20, 120, 10])
bracket_test(E20_corner_bracket);
translate([100, 70, 10])
inner_bracket_test(E40_inner_corner_bracket);
translate([100, 130, 10])
bracket_test(E40_corner_bracket);
}
module corner_3d_connector(with_profiles = false, corner_connector_type, extrusion_type) {
extrusion_length = 40;
extrusion_corner_bracket_3D(corner_connector_type, grub_screws=true);
if (with_profiles) {
translate([0, 0, extrusion_length / 2])
extrusion(extrusion_type, extrusion_length);
translate(extrusion_corner_bracket_3D_get_y_offset(corner_connector_type))
rotate(extrusion_corner_bracket_3D_get_y_rot(corner_connector_type))
translate([0, 0, extrusion_length / 2])
extrusion(extrusion_type, extrusion_length);
translate(extrusion_corner_bracket_3D_get_x_offset(corner_connector_type))
rotate(extrusion_corner_bracket_3D_get_x_rot(corner_connector_type))
translate([0, 0, extrusion_length / 2])
extrusion(extrusion_type, extrusion_length);
}
}
if($preview)
let($show_threads = true)
extrusion_brackets(true);
module corner_3d_connectors(with_profiles = false) {
corner_3d_connector(with_profiles, extrusion_corner_bracket_3D_2020, E2020);
translate([80, 0, 0])
corner_3d_connector(with_profiles, extrusion_corner_bracket_3D_3030, E3030);
translate([180, 0, 0])
corner_3d_connector(with_profiles, extrusion_corner_bracket_3D_4040, E4040);
}
module bracket_test(bracket)
rotate([90, 0, 180]) {
extrusion = extrusion_corner_bracket_extrusion(bracket);
eWidth = extrusion_width(extrusion);
size = extrusion_corner_bracket_size(bracket);
extrusion_corner_bracket_assembly(bracket);
translate([-eWidth / 2, 0])
rotate([-90, 0, 0])
extrusion(extrusion, size.y, false, cornerHole=eWidth > 20);
translate([-eWidth, -eWidth / 2])
rotate([0, 90, 0])
extrusion(extrusion, eWidth + size.x, false, cornerHole=eWidth > 20);
}
module extrusion_brackets(examples = false) {
extrusion_inner_corner_bracket(E20_inner_corner_bracket);
translate([30, 0])
extrusion_inner_corner_bracket(E20_inner_corner_bracket, grub_screws=false);
translate([60, 0])
extrusion_corner_bracket_assembly(E20_corner_bracket);
translate([110, 0])
extrusion_inner_corner_bracket(E40_inner_corner_bracket);
translate([140, 0])
extrusion_corner_bracket_assembly(E40_corner_bracket);
if (examples) {
translate([20, 50, 10])
inner_bracket_test(E20_inner_corner_bracket, true);
translate([20, 80, 10])
inner_bracket_test(E20_inner_corner_bracket);
translate([20, 120, 10])
bracket_test(E20_corner_bracket);
translate([100, 70, 10])
inner_bracket_test(E40_inner_corner_bracket);
translate([100, 130, 10])
bracket_test(E40_corner_bracket);
}
//the 3d connectors
translate([0, -30, 0])
corner_3d_connectors();
if (examples) {
translate([0, -110, 0])
corner_3d_connectors(true);
}
}
if ($preview)
let ($show_threads = true)
extrusion_brackets(true);

View File

@@ -35,10 +35,10 @@ module extrusions()
rotate(90)
layout(heights, gap)
rotate(-90)
extrusion(list[$i], 80, cornerHole = extrusion_width(list[$i]) > 20);
extrusion(list[$i], 80);
}
else
extrusion(e, 80, cornerHole = extrusion_width(e) > 20);
extrusion(e, 80);
if ($preview)
extrusions();

76
tests/gridfinity.scad Normal file
View File

@@ -0,0 +1,76 @@
//
// NopSCADlib Copyright Chris Palmer 2025
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// This file is part of NopSCADlib.
//
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
// GNU General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../core.scad>
include <../printed/gridfinity.scad>
use <../utils/chamfer.scad>
box = gridfinity_bin("chuck_stand", 2, 2, 5);
box_mm = gridfinity_bin_size_mm(box);
bwall = 1;
chuck_d = 80;
ring_od = 50;
ring_id = 40;
ring_h = 4;
hole_pitch = (60 + 72.5) / 2;
hole_d = (72.5 - 60) / 2;
hole_depth = 15;
clearance = 0.5;
chamfer = 1;
z_bot = gridfinity_base_z() + bwall;
module chuck_stand_stl()
gridfinity_bin(box) union() {
translate_z(z_bot) {
for(a = [0 : 30 : 330])
rotate(a)
translate([0, hole_pitch / 2]) {
poly_cylinder(hole_d / 2 + clearance / 2, h = 100);
translate_z(hole_depth)
chamfer_hole(chamfer)
poly_circle(hole_d / 2 + clearance / 2);
}
translate_z(hole_depth) {
poly_cylinder(r = chuck_d / 2 + clearance / 2, h = 100);
poly_tube(or = ring_od / 2 + clearance, ir = ring_id / 2 - clearance, h = 2 * ring_h, center = true);
chamfer_hole(chamfer)
poly_circle(ring_od / 2 + clearance);
}
}
translate_z(box_mm.z)
chamfer_hole(chamfer)
poly_circle(r = chuck_d / 2 + clearance / 2);
}
module gridfinity_test()
stl_colour(pp1_colour) chuck_stand_stl();
gridfinity_test();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 63 KiB

BIN
tests/png/chamfer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 77 KiB

BIN
tests/png/gridfinity.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 KiB

After

Width:  |  Height:  |  Size: 241 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Some files were not shown because too many files have changed in this diff Show More