1
0
mirror of https://github.com/nophead/NopSCADlib.git synced 2025-09-05 21:02:51 +02:00

Compare commits

...

209 Commits

Author SHA1 Message Date
Chris Palmer
4e233e5e9d Updated readme and images 2020-03-02 19:45:28 +00:00
Martin Budden
675953d334 Allow no center hole in extrusion. 2020-03-02 19:06:53 +00:00
Martin Budden
9527fa1c1f Added E1515 extrusion. 2020-03-02 18:51:27 +00:00
Chris
3f209cbdd3 Merge pull request #60 from nophead/issue_57
Fix for issue #57, now searches multiple directories.
2020-03-02 18:38:36 +00:00
Chris Palmer
7b76aceaad Changed microswitch include to a use. 2020-03-02 14:15:51 +00:00
Chris Palmer
4edd08977f Added green_terminals and pin_headers to lib.scad.
Removed terminal_254() because it can't work.
2020-03-02 13:51:59 +00:00
Chris Palmer
a1d385f9ec Updated gallery images 2020-03-02 13:49:41 +00:00
Chris Palmer
fc17b52518 Added missing includes in lib.scad: extrusion_brackets and kp_pillow_blocks.
Since kp_pillow_blocks includes ball bearings, they were also missing.
2020-03-02 09:52:31 +00:00
Chris Palmer
9fbdb82991 bom.py now shows errors and warnings. 2020-03-02 09:38:37 +00:00
Chris Palmer
7706716fa2 Updated readme for threads. 2020-03-01 20:08:19 +00:00
Chris Palmer
c815c1592d SHOW_THREADS renamed NOPSCADLIB_SHOW_THREADS for #61 2020-03-01 19:10:40 +00:00
Chris Palmer
e32ef88c90 Small optimisation to views.py 2020-03-01 19:09:18 +00:00
Chris Palmer
702c450a27 Small optimisation to exports.py 2020-03-01 18:35:53 +00:00
Chris Palmer
343351155c Made library search order deterministic by sorting the result of os.listdir() 2020-03-01 17:53:20 +00:00
Chris Palmer
c41b1fa115 Fix for issue #57, now searches multiple directories. 2020-03-01 10:55:52 +00:00
Chris Palmer
1a197ac823 Fixed missing screw holes in blowers. 2020-02-29 20:34:05 +00:00
Chris Palmer
ab592e049c Screws.scad is now included in core.scad, so doesn't need to be included
anywhere else. utils/core/core.scad is the old version without fasteners to
be used internally in the library.
2020-02-29 17:52:36 +00:00
Chris Palmer
9b104e4fe7 Changed the default printed part colour, pp1_colour to RepRap logo green. 2020-02-29 10:30:15 +00:00
Chris Palmer
f0b4d767e9 Replaced "lime" with pp1_colour. 2020-02-29 10:26:25 +00:00
Chris Palmer
82baed4c8f Updated images and readme. 2020-02-29 09:00:20 +00:00
Chris Palmer
acb2cb2a48 Changed PSU list order to get all the shrouds together. 2020-02-29 08:55:40 +00:00
Chris Palmer
cf94972b18 Merge branch 'psu_vents' of https://github.com/martinbudden/NopSCADlib into martinbudden-psu_vents 2020-02-29 08:48:33 +00:00
Chris Palmer
7c0a48d0c1 Added parametric printed box 2020-02-29 01:27:17 +00:00
Martin Budden
a5a640e273 Added facility to add vents to PSU. Added vents to S_300_12. 2020-02-28 21:21:11 +00:00
Chris Palmer
95c4359421 Better test coverage of stepper earth tag position. 2020-02-28 14:27:35 +00:00
Chris Palmer
bcff26a27b Added threads to stepper motors and made the test show them. 2020-02-28 12:02:24 +00:00
Chris Palmer
07b00fabe0 Added a guard against and empty BOM in views.py. 2020-02-28 09:22:50 +00:00
Chris Palmer
8ed0f3c1af Updated readme and images. 2020-02-28 09:05:59 +00:00
Martin Budden
0e8e387d35 Improved S_300_12 PSU. 2020-02-28 03:05:45 +00:00
Chris Palmer
0c17620adb Removed echo from extrusion_bracket.scad 2020-02-28 01:59:00 +00:00
Chris Palmer
6470f1b004 Extrusions now default to centered. New parts added to the libtest picture.
Extrusion bracket examples rotated for clearer view and made optional.
Added missing description for scs_bearing_blocks.
Extrusion no longer shows centre parameter but does show no default cornerHole.
2020-02-27 17:55:03 +00:00
Chris Palmer
29ba402530 Updated image 2020-02-27 11:22:02 +00:00
Chris Palmer
aed4a699f2 Merge branch 'kp_pillow_block_fix' of https://github.com/martinbudden/NopSCADlib into martinbudden-kp_pillow_block_fix 2020-02-27 11:18:54 +00:00
Chris Palmer
10b846c0d5 Updated images 2020-02-27 11:17:07 +00:00
Martin Budden
2de479d691 Fixed incomplete webbing on side of kp_pillow_block. 2020-02-27 10:44:00 +00:00
Chris Palmer
054dab5025 Merge branch 'linear_rail_groove' of https://github.com/martinbudden/NopSCADlib into martinbudden-linear_rail_groove 2020-02-27 10:35:09 +00:00
Chris Palmer
b559319b03 Ensured all Markdown table heading markers have at least three dashes. 2020-02-27 10:15:37 +00:00
Martin Budden
a487ca0f20 Added groove to linear_rail. 2020-02-27 09:47:36 +00:00
Chris Palmer
a2ce3f1278 Updated readme 2020-02-27 09:44:54 +00:00
Chris Palmer
01eb6931d9 Merge branch 'extrusion_center' of https://github.com/martinbudden/NopSCADlib into martinbudden-extrusion_center 2020-02-27 09:41:01 +00:00
Chris Palmer
c09a74b4c9 Added center option to spring and documented the origin of rods, etc. 2020-02-27 09:39:05 +00:00
Martin Budden
aab7f3d683 Added center parameter. Added cornerhole dimensions to E20. 2020-02-27 09:03:23 +00:00
Chris Palmer
ad719dad5a Added copyright boiler plate and description.
Updated images and readme.
2020-02-26 19:43:02 +00:00
Chris Palmer
00690b61d2 Merge branch 'extrusion_corner_brackets' of https://github.com/martinbudden/NopSCADlib into martinbudden-extrusion_corner_brackets 2020-02-26 19:23:39 +00:00
Chris Palmer
1a24e0d87e Added image and updated readme. 2020-02-26 15:55:22 +00:00
Chris Palmer
171c9a6a34 Merge branch 'pcb_additions' of https://github.com/martinbudden/NopSCADlib into martinbudden-pcb_additions 2020-02-26 15:39:12 +00:00
Chris Palmer
8bb4b3881e Fixed test, image and readme updated. 2020-02-26 15:24:33 +00:00
Chris Palmer
79f8bc66e1 Merge branch 'Drachenkaetzchen-patch-1' of https://github.com/Drachenkaetzchen/NopSCADlib into Drachenkaetzchen-Drachenkaetzchen-patch-1 2020-02-26 14:58:27 +00:00
Chris Palmer
33c9d158ef REmoved fans.scad from lib.scad as already included from psus.scad. 2020-02-26 14:03:46 +00:00
Chris Palmer
d2874a0531 Moved washers.scad from screws.scad to nuts.scad.
Moved screw_insert() from inserts.scad to screw.scad.
Changed most includes of inserts.scad to use insert.scad.
Removed linear_bearings, iecs, rockers and microswitches from lib.scad as
already included by other vitamins.
2020-02-26 13:46:11 +00:00
Felicia Hummel
b6fd795a25 Updated readme to reflect the pillow block changes 2020-02-26 13:02:17 +01:00
Felicia Hummel
ad0882db40 Added 15mm and 18mm variants for the KP08 blocks 2020-02-26 12:57:53 +01:00
Chris Palmer
8afb08aaa4 Updated image 2020-02-26 10:23:05 +00:00
Martin Budden
e87dffd92c More pcb component examples. Allowed more colour setting. 2020-02-26 07:19:55 +00:00
Martin Budden
c364bf06b2 Code tidy. 2020-02-25 22:34:13 +00:00
Martin Budden
1668f9c54c Naming update. 2020-02-25 22:23:44 +00:00
Martin Budden
e0dd174010 Parameterisation of extrusion brackets. 2020-02-25 22:19:20 +00:00
Martin Budden
f104bd42e5 Added back jst_xh connector to ramps endstop. 2020-02-25 21:38:53 +00:00
Martin Budden
8342ba87e9 Update as per code review. 2020-02-25 21:07:29 +00:00
Martin Budden
0e58e92fbc Allowed parameterised green terminals on PCBs. 2020-02-25 21:01:04 +00:00
Martin Budden
1af2e18594 Added usb_Ax1 and potentiometer. 2020-02-25 20:39:37 +00:00
Martin Budden
598527edbe Added a test pcb. 2020-02-25 20:13:15 +00:00
Martin Budden
9c666f8f47 Merge branch 'pin_header_color' into pcb_additions 2020-02-25 19:07:58 +00:00
Martin Budden
bc1f135e40 Added ability to set socket color. 2020-02-25 17:06:16 +00:00
Martin Budden
ce36729e50 Allow pin header base colour to be set on PCB. 2020-02-25 17:05:48 +00:00
Martin Budden
1dca024e64 Internal and external corner brackets for 20nn extrusion. 2020-02-25 16:53:51 +00:00
Chris Palmer
c1833f0820 Updated image and readme. 2020-02-25 13:42:31 +00:00
Chris Palmer
6a7f7dcbbf Merge branch 'sk_bracket_screw_length' of https://github.com/martinbudden/NopSCADlib into martinbudden-sk_bracket_screw_length 2020-02-25 12:34:19 +00:00
Chris Palmer
5d3f1115bb Updated readme and images 2020-02-25 11:11:05 +00:00
Chris Palmer
9f9adeb6ca Merge branch 'teardrop_chamfer' of https://github.com/martinbudden/NopSCADlib into martinbudden-teardrop_chamfer 2020-02-25 09:44:38 +00:00
Chris Palmer
f9b06c855c Merge branch 'martinbudden-kp_pillow_block' 2020-02-25 09:32:55 +00:00
Chris Palmer
05bfe9b159 Updated and images. 2020-02-25 09:32:40 +00:00
Martin Budden
f961874ce3 Added kp_pillow_blocks. 2020-02-25 07:55:47 +00:00
Martin Budden
7a6210f442 Add optional chamfer to teardrops. Defaults to no chamfer. 2020-02-25 07:46:57 +00:00
Martin Budden
5bae0aaa51 Better sk_bracket screw length calculation. 2020-02-25 07:33:07 +00:00
Chris Palmer
8649d59e8a Merge branch 'martinbudden-print_search_path' 2020-02-25 00:05:12 +00:00
Chris Palmer
e9bc300b8d Fix for printed directory not present. 2020-02-24 23:58:22 +00:00
Chris Palmer
dcb1e74894 Merge branch 'print_search_path' of https://github.com/martinbudden/NopSCADlib into martinbudden-print_search_path 2020-02-24 19:02:50 +00:00
Chris Palmer
42b9479094 Merge branch 'martinbudden-tnuts_and_hammer_nuts' 2020-02-24 18:37:40 +00:00
Chris Palmer
f46f35e909 Updated readme 2020-02-24 18:37:25 +00:00
Chris Palmer
0513b151b2 Merge branch 'tnuts_and_hammer_nuts' of https://github.com/martinbudden/NopSCADlib into martinbudden-tnuts_and_hammer_nuts 2020-02-24 18:22:05 +00:00
Chris Palmer
dcf258f11a Brass colour now distinct from gold. 2020-02-24 18:15:20 +00:00
Martin Budden
4ff6c7d0a8 Unified tnuts and hammer nuts. 2020-02-24 17:40:39 +00:00
Chris Palmer
2edb6d4df2 Shorter screws when using T-nut but mignt not be a suitable standard size. 2020-02-24 12:01:40 +00:00
Chris Palmer
26e8497018 Merge branch 'martinbudden-sk_brackets_tidy' 2020-02-24 11:42:07 +00:00
Chris Palmer
bfde879ce2 Updated readme and images. 2020-02-24 11:41:39 +00:00
Chris Palmer
4641e3a642 More nut and screw types 2020-02-24 11:40:30 +00:00
Chris Palmer
42cfed8846 Set default part thickness to 2. 2020-02-24 11:38:31 +00:00
Chris Palmer
8c339a18c4 Removed washers from T-nuts and used the lack to detect them. 2020-02-24 11:23:10 +00:00
Chris Palmer
065ec0a430 Corrected nut placement 2020-02-24 11:18:34 +00:00
Chris Palmer
e7eea0520c T nut thickness no longer includes the stem to simplyfy placement and screw
length calculations.
2020-02-24 11:14:30 +00:00
Chris Palmer
5cb994b58b Retabulated nut table 2020-02-24 10:21:37 +00:00
Chris Palmer
573425055a Fixed origin of T-nuts to be consistent with others.
I.e the mating face is at Z = 0.
2020-02-24 09:11:59 +00:00
Chris Palmer
66a7a9bfe0 Used named elements of size. 2020-02-24 08:57:22 +00:00
Chris Palmer
0335545334 Merge branch 'sk_brackets_tidy' of https://github.com/martinbudden/NopSCADlib into martinbudden-sk_brackets_tidy 2020-02-24 08:38:16 +00:00
Chris Palmer
fa91acbaad Merge branch 'martinbudden-scs_bearing_blocks' 2020-02-24 00:03:42 +00:00
Chris Palmer
8bad05e721 Added to lib.scad 2020-02-24 00:00:32 +00:00
Chris Palmer
9d6727d371 Added images and readme 2020-02-23 23:57:18 +00:00
Chris Palmer
8902d83f0a Merge branch 'scs_bearing_blocks' of https://github.com/martinbudden/NopSCADlib into martinbudden-scs_bearing_blocks 2020-02-23 23:40:02 +00:00
Martin Budden
e40b10f5a0 Added comment. 2020-02-23 23:08:34 +00:00
Martin Budden
66a8d1d583 Tidy of sk_brackets as per scs_bearing_blocks code review. 2020-02-23 22:56:47 +00:00
Martin Budden
d066648a76 Renamed sheet_thickness to part_thickness. 2020-02-23 22:34:59 +00:00
Chris Palmer
b8546414c0 Fixed leadscrew when center = false. 2020-02-23 21:54:26 +00:00
Martin Budden
581c2f8a96 Used accessor functions internally. 2020-02-23 21:49:35 +00:00
Martin Budden
e9ee88dfe9 Updates as per code review. 2020-02-23 21:41:47 +00:00
Martin Budden
b07a8ad245 Added SCS bearing blocks, SCSnUU and SCSnLUU variants 2020-02-23 21:06:38 +00:00
Chris Palmer
ab17de3b0b Merge branch 'martinbudden-green_terminals' 2020-02-23 19:53:10 +00:00
Chris Palmer
0b8141844c Updated readme. 2020-02-23 19:52:18 +00:00
Chris Palmer
7d0548b033 Merge branch 'green_terminals' of https://github.com/martinbudden/NopSCADlib into martinbudden-green_terminals 2020-02-23 19:49:16 +00:00
Martin Budden
ad3e8d85af Added scad/printed to stl search path. 2020-02-23 17:54:28 +00:00
Chris Palmer
8435a350d0 Merge branch 'martinbudden-sk_brackets' 2020-02-23 17:32:54 +00:00
Chris Palmer
3e5d4b1c8e Added to lib.scad. 2020-02-23 17:12:47 +00:00
Chris Palmer
20f830a008 Added image and updated readme. 2020-02-23 16:46:27 +00:00
Chris Palmer
10bd8ff354 Merge branch 'sk_brackets' of https://github.com/martinbudden/NopSCADlib into martinbudden-sk_brackets 2020-02-23 16:22:11 +00:00
Chris Palmer
4459cca3ea Merge branch 'martinbudden-screw_length_formatting' 2020-02-23 16:16:30 +00:00
Chris Palmer
95bbebd42d Updated readme. 2020-02-23 16:16:09 +00:00
Martin Budden
cc84a5a536 Added comments and ability to set colour to green terminals. 2020-02-23 15:38:02 +00:00
Chris Palmer
28c795e9f4 Merge branch 'screw_length_formatting' of https://github.com/martinbudden/NopSCADlib into martinbudden-screw_length_formatting 2020-02-23 15:24:43 +00:00
Chris Palmer
9a0477d16b Merge branch 'martinbudden-pcb_microswitch2' 2020-02-23 15:22:43 +00:00
Chris Palmer
0583da2eb7 Added images 2020-02-23 15:22:25 +00:00
Chris
9a08fe9b5c Merge branch 'master' into pcb_microswitch2 2020-02-23 15:10:13 +00:00
Chris Palmer
8ab7993148 Merge branch 'martinbudden-rocker_color' 2020-02-23 15:03:23 +00:00
Chris Palmer
16dd8d6d17 Added images and readme. 2020-02-23 15:02:39 +00:00
Chris Palmer
08c268145e Merge branch 'rocker_color' of https://github.com/martinbudden/NopSCADlib into martinbudden-rocker_color 2020-02-23 14:52:11 +00:00
Chris Palmer
ba7e64233a Clarified path settings in usage.md. 2020-02-23 14:46:39 +00:00
Chris Palmer
7090c714ce Merge branch 'martinbudden-pcb_buzzer' 2020-02-23 14:34:04 +00:00
Martin Budden
c5038db6d9 Added support for tNuts in sk_brackets. 2020-02-23 14:32:40 +00:00
Chris Palmer
654f094304 Merge branch 'martinbudden-spool_filament' 2020-02-23 14:28:57 +00:00
Chris Palmer
1e5e5860e1 Made more realistic and added a test. 2020-02-23 14:28:39 +00:00
Martin Budden
a08216d0b8 Added SK shaft support brackets. 2020-02-23 13:57:14 +00:00
Chris Palmer
3d8a9ec8aa Merge branch 'spool_filament' of https://github.com/martinbudden/NopSCADlib into martinbudden-spool_filament 2020-02-23 10:04:23 +00:00
Chris Palmer
7ec059142f Updated readme. 2020-02-23 10:01:28 +00:00
Chris Palmer
7f0d96b824 Merge branch 'pcb_buzzer' of https://github.com/martinbudden/NopSCADlib into martinbudden-pcb_buzzer 2020-02-22 23:06:08 +00:00
Chris Palmer
9e826c1a09 Merge branch 'martinbudden-belt_colors' 2020-02-22 23:02:03 +00:00
Chris Palmer
2c1dbe04a9 Added images and readme. 2020-02-22 23:01:50 +00:00
Chris Palmer
d644d6b698 Merge branch 'belt_colors' of https://github.com/martinbudden/NopSCADlib into martinbudden-belt_colors 2020-02-22 22:47:42 +00:00
Chris Palmer
8db4cc2cb5 Merge branch 'martinbudden-pcb_jst_xh' 2020-02-22 22:40:31 +00:00
Chris Palmer
509a87939c Updated images and readme 2020-02-22 22:40:09 +00:00
Chris Palmer
40607e6cfc Merge branch 'pcb_jst_xh' of https://github.com/martinbudden/NopSCADlib into martinbudden-pcb_jst_xh 2020-02-22 22:28:16 +00:00
Chris Palmer
599fbba6c2 Reduced dependecies in pcb_mount test. 2020-02-22 22:24:45 +00:00
Chris Palmer
52729d012c Merge branch 'martinbudden-rail_carriage_coloring' 2020-02-22 22:16:50 +00:00
Chris Palmer
6097e07094 Updated images and readme. 2020-02-22 22:16:09 +00:00
Chris Palmer
9d71438a3c Merge branch 'rail_carriage_coloring' of https://github.com/martinbudden/NopSCADlib into martinbudden-rail_carriage_coloring 2020-02-22 21:59:15 +00:00
Chris Palmer
ffa1ab940b Merge branch 'martinbudden-tnuts' 2020-02-22 21:51:16 +00:00
Chris Palmer
3174013e1a Updated images and readme. 2020-02-22 21:51:05 +00:00
Chris Palmer
c4eea38a2b Added threads 2020-02-22 21:27:51 +00:00
Chris Palmer
0cd89279a5 Merge branch 'tnuts' of https://github.com/martinbudden/NopSCADlib into martinbudden-tnuts 2020-02-22 21:12:13 +00:00
Chris Palmer
92051e0b28 Merge branch 'martinbudden-gitattributes' 2020-02-22 21:05:26 +00:00
Chris Palmer
f4b22e35c7 Merge branch 'gitattributes' of https://github.com/martinbudden/NopSCADlib into martinbudden-gitattributes 2020-02-22 21:02:24 +00:00
Chris Palmer
17ecfc07f3 Merge branch 'martinbudden-screw_knob_typo' 2020-02-22 20:58:55 +00:00
Chris Palmer
9658205efd Updated readme 2020-02-22 20:58:43 +00:00
Chris Palmer
53140a4cc1 Merge branch 'screw_knob_typo' of https://github.com/martinbudden/NopSCADlib into martinbudden-screw_knob_typo 2020-02-22 20:55:17 +00:00
Chris Palmer
2798d39538 Merge branch 'martinbudden-iec_switched_fused' 2020-02-22 20:51:58 +00:00
Chris Palmer
8be0cc98ea Updated the images and readme. 2020-02-22 20:51:15 +00:00
Chris Palmer
6a5f31edd8 Merge branch 'iec_switched_fused' of https://github.com/martinbudden/NopSCADlib into martinbudden-iec_switched_fused 2020-02-22 20:01:25 +00:00
Chris Palmer
e068918e21 Added screw threads to most things that are threaded.
Added a mechanism for tests.py and views.py to have command line options.
2020-02-22 19:44:01 +00:00
Chris Palmer
1614f50b73 Merged master 2020-02-22 18:32:35 +00:00
Martin Budden
32522b28d7 Added hammer nuts. 2020-02-19 06:42:11 +00:00
Martin Budden
1936c95d06 Added IEC 320 C14 switched fused inlet module. 2020-02-18 08:24:16 +00:00
Martin Budden
16060629c0 Added sliding t nuts. Sizes M3, M4 and M5. 2020-02-18 07:48:01 +00:00
Martin Budden
b7b5c837bd Used tube for buzzer. 2020-02-17 19:40:49 +00:00
Martin Budden
a793cb6d43 Added ability to use microswitch on a pcb. 2020-02-17 06:58:09 +00:00
Martin Budden
dc4e24b63a Simplified drawing of filament. 2020-02-16 23:06:07 +00:00
Martin Budden
8f85ac73dc Added space before screw length when length < 10 to ensure correct ordering.
This means 5mm, 6mm etc comes before 10mm in BOM.
2020-02-16 21:15:44 +00:00
Martin Budden
3ab934d83e Typo in screw_knob. foe corrected to for. 2020-02-07 19:58:37 +00:00
Martin Budden
d1324a670e Added JST-XH connector for pcbs. 2020-01-30 05:45:29 +00:00
Martin Budden
f5fdec613c Allow setting of color of rocker switch. Defaults to current colors. 2020-01-29 17:46:32 +00:00
Martin Budden
c55b8b6d1c Parameterised belt colors. 2020-01-29 17:40:34 +00:00
Martin Budden
56ec8e03ad Added PCB buzzer. 2020-01-29 17:37:01 +00:00
Martin Budden
728b7adf38 Add ability to display filament on spool. 2020-01-14 11:26:21 +00:00
Martin Budden
75747687d9 Parameterised coloring of linear rail carriage. 2020-01-12 10:20:10 +00:00
Martin Budden
03c97e8b6a Changed rail carriage coloring to be green with red endpiece to match common form. 2020-01-11 14:54:00 +00:00
Chris Palmer
8ac06b53e7 Updated readme and images for linear_bearings change. 2020-01-11 08:57:33 +00:00
Martin Budden
de76eb46e7 Initial commit. Set default text file line endings to LF. 2020-01-11 08:21:38 +00:00
Chris
2c77f184a2 Merge pull request #12 from martinbudden/linear_bearings
Added LM16UU and long form (LMxLUU) of linear bearings plus external grooves.
2020-01-11 08:10:49 +00:00
Martin Budden
4d3d9dfdfe Added LM16UU and long form (LMxLUU) of linear bearings.
Added external grooves.
2020-01-10 22:11:53 +00:00
Chris Palmer
f7a972f946 Added pictures and documentation for extrusions. 2020-01-10 20:10:17 +00:00
Chris
4e81fcbd4f Merge pull request #10 from martinbudden/extrusions
Initial submission of E2020 aluminium extrusion.
2020-01-10 19:32:49 +00:00
Martin Budden
1f038decd4 Initial submission of aluminium extrusion. Supports 2020, 2040, 2060, 2080, 3030, 3060, 4040, 4080 types.
Added extrusions to main picture.
2020-01-10 19:24:24 +00:00
Chris
da958fe112 Merge pull request #11 from martinbudden/e3d_naked
E3d Resistor wire drawn even if naked=true.
2020-01-10 13:26:43 +00:00
Martin Budden
61493eaa34 Resistor wire drawn even if naked=true. 2020-01-10 12:26:56 +00:00
Chris
804c00bdcb Merge pull request #8 from martinbudden/rocker_typo
Fixed typo where 'rocker' was spelt 'rocket'.
2020-01-10 10:28:21 +00:00
Chris
11ea68681f Merge pull request #9 from martinbudden/e3d_tab_formatting
Tabs used instead of spaces in module e3d_resistor.
2020-01-10 10:27:40 +00:00
Chris Palmer
d703ae4997 Added male screw threads. 2020-01-10 10:26:12 +00:00
Martin Budden
ed97d226f8 Tabs used instead of spaces in module e3d_resistor. 2020-01-10 08:49:03 +00:00
Martin Budden
4107a2c848 Fixed typo where 'rocker' was spelt 'rocket'. 2020-01-10 08:26:20 +00:00
Chris Palmer
f7ef075434 Fixed hex pillar thread length.
Reordered screws.
Random pixel changes.
2019-12-30 12:45:51 +00:00
Chris Palmer
6f93b6af9a pcb_component_position() can now be passed an index to differentiate between
multiple components of the same type.

Added pcb_grid_pos() function.
2019-11-15 13:30:27 +00:00
Chris Palmer
53f416eef1 Added more detail to the Environ+ pcb.
Changed the RPI0 SD height to be more accurate.
2019-11-15 13:28:02 +00:00
Chris Palmer
6354219627 Added tiny 17x8mm fan. 2019-11-15 13:25:32 +00:00
Chris Palmer
56e2b71bda Updated readme for last PR 2019-10-22 18:01:51 +01:00
Chris
8f5503586d Merge pull request #6 from limitz/e3d_resistor_wire_rotate
E3d resistor wire rotate
2019-10-22 17:57:14 +01:00
Chris
1cd9edfe87 Merge pull request #5 from limitz/blower_typo
Small typo fix for blower RB5015 in source (string) and documentation
2019-10-22 17:54:17 +01:00
Chris Palmer
a85fdaf176 Added printed pcb_mount to hold PCBs without mounting holes. 2019-10-22 17:47:46 +01:00
Chris Palmer
18294b4b81 Added Enviro+ PCB 2019-10-22 16:32:26 +01:00
Chris Palmer
ad62ce362c Can now force fan screws to be the full depth and nuts then get washers. 2019-10-22 16:21:58 +01:00
Chris Palmer
9f27f26894 Added pcb_component_position() function. 2019-10-22 16:17:22 +01:00
Chris Palmer
2eaa4bfc21 Readme changes for last commit. 2019-10-22 16:16:12 +01:00
Chris Palmer
1944039f22 Added crimp version of ring terminal. 2019-10-22 16:12:58 +01:00
Chris Palmer
1c221ad612 Added S-7282B LCD display 2019-10-22 16:12:00 +01:00
Chris Palmer
85adf7b4f4 Readme changes for last commit. 2019-10-22 16:09:46 +01:00
Chris Palmer
64bde2cb3a Added right angle pin headers. 2019-10-22 16:08:15 +01:00
Chris Palmer
c34469e852 Added more sizes of cable grommets. 2019-10-22 15:37:10 +01:00
Chris Palmer
dbc3c36f44 Can now override the front panel width of a butt_box to make it wider. 2019-10-22 15:36:37 +01:00
Chris Palmer
8c51183ba6 Added volume and area functions to butt_box. 2019-10-22 15:34:08 +01:00
Chris Palmer
a9c4e60cac Added another spool size 2019-10-22 15:27:49 +01:00
Eddy Pronk
d041b18025 Adds an option resistor_wire_rotate 2019-10-21 17:51:19 +02:00
Eddy Pronk
e85887fec4 Small typo fix for blower RB5015 in source (string) and documentation 2019-10-21 17:17:11 +02:00
Chris Palmer
ededb514b8 Fixed some missing commas in pin_header vitamin calls. 2019-09-15 18:28:42 +01:00
326 changed files with 4459 additions and 999 deletions

16
.gitattributes vendored Normal file
View File

@@ -0,0 +1,16 @@
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto eol=lf
# Declare text files that are normalized and converted on checkout.
*.scad text
*.py text
*.md text
# Handle Windows batch and command files
*.{bat,[bB][aA][tT]} text eol=crlf
*.{cmd,[cC][mM][dD]} text eol=crlf
# Denote files that are binary and should not be modified.
*.png binary
*.jpg binary

1
.gitignore vendored
View File

@@ -7,6 +7,7 @@ tests/bom/
*.log *.log
*.html *.html
bounds.json bounds.json
options.json
times.txt times.txt
*_diff.png *_diff.png
*.echo *.echo

View File

@@ -18,22 +18,10 @@
// //
// //
// Include this file to use the miniumum library // Include this file to use the miniumum library plus screws, nuts and washers
// //
include <global_defs.scad> include <utils/core/core.scad>
// //
// Global functions and modules // Fasteners used by a lot of other vitamins
// //
use <utils/core/global.scad> include <vitamins/screws.scad>
module use_stl(name) { //! Import an STL to make a build platter
stl(name);
import(str("../stls/", name, ".stl"));
}
module use_dxf(name) { //! Import a DXF to make a build panel
dxf(name);
import(str("../dxfs/", name, ".dxf"));
}

BIN
docs/metric_threads.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -26,7 +26,7 @@ OpenSCAD has to be setup to find libraries by setting the ```OPENSCADPATH``` env
in the directory it points to. This can be done with ```git clone https://github.com/nophead/NopSCADlib.git``` while in that directory or, if you don't want to use GIT, in the directory it points to. This can be done with ```git clone https://github.com/nophead/NopSCADlib.git``` while in that directory or, if you don't want to use GIT,
by downloading https://github.com/nophead/NopSCADlib/archive/master.zip and unzipping it to a directory called NopSCADlib. by downloading https://github.com/nophead/NopSCADlib/archive/master.zip and unzipping it to a directory called NopSCADlib.
The ```NopSCADlib/scripts``` directory needs to be added to the executable search path. The ```NopSCADlib/scripts``` directory needs to be added to the executable search path, ```PATH``` on Windows and ```path``` on Linux and Mac.
The installation can be tested by opening ```NopSCADlib/libtest.scad``` in the OpenSCAD GUI. It should render all the objects in the library in about 1 minute. The installation can be tested by opening ```NopSCADlib/libtest.scad``` in the OpenSCAD GUI. It should render all the objects in the library in about 1 minute.
@@ -116,8 +116,8 @@ get shared if other files in the project include ```lib.scad``` as well, or if y
One downside is that any change to the library will mean all the project files need regenerating. One downside is that any change to the library will mean all the project files need regenerating.
A more optimised approach for large projects is to include [NopSCADlib/core.scad](../core.scad) instead. A more optimised approach for large projects is to include [NopSCADlib/core.scad](../core.scad) instead.
That only has the a small set of utilities and the global settings in [global_defs.scad](../global_defs.scad). Any vitamins used need to be included explicitly. That only has the a small set of utilities and the global settings in [global_defs.scad](../global_defs.scad) plus screws, nuts and washers that are required by a lot of other vitamins.
One can copy the include or use line from [NopSCADlib/lib.scad](../lib.scad). Any other vitamins used need to be included explicitly. One can copy the includes or use a line from [NopSCADlib/lib.scad](../lib.scad).
### Parametric parts. ### Parametric parts.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 108 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: 104 KiB

After

Width:  |  Height:  |  Size: 105 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: 130 KiB

After

Width:  |  Height:  |  Size: 137 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: 179 KiB

After

Width:  |  Height:  |  Size: 187 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: 121 KiB

After

Width:  |  Height:  |  Size: 124 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: 130 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

@@ -30,7 +30,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
<a name="Parts_list"></a> <a name="Parts_list"></a>
## Parts list ## Parts list
| <span style="writing-mode: vertical-rl; text-orientation: mixed;">Base</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Feet</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Mains&nbsp;In</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Main</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">TOTALS</span> | | | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Base</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Feet</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Mains&nbsp;In</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">Main</span> | <span style="writing-mode: vertical-rl; text-orientation: mixed;">TOTALS</span> | |
|--:|--:|--:|--:|--:|:--| |---:|---:|---:|---:|---:|:---|
| | | | | | **Vitamins** | | | | | | | **Vitamins** |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;2&nbsp; | &nbsp;&nbsp;2&nbsp; | &nbsp;&nbsp; 4mm shielded jack socket blue | | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;2&nbsp; | &nbsp;&nbsp;2&nbsp; | &nbsp;&nbsp; 4mm shielded jack socket blue |
| &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp; 4mm shielded jack socket brown | | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;.&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp;1&nbsp; | &nbsp;&nbsp; 4mm shielded jack socket brown |
@@ -61,14 +61,14 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
## Base Assembly ## Base Assembly
### Vitamins ### Vitamins
|Qty|Description| |Qty|Description|
|--:|:----------| |---:|:----------|
|2| Heatfit insert M3| |2| Heatfit insert M3|
### 3D Printed parts ### 3D Printed parts
| 1 x socket_box.stl | | 1 x socket_box.stl |
|--| |---|
| ![socket_box.stl](stls/socket_box.png) | ![socket_box.stl](stls/socket_box.png)
@@ -88,7 +88,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
## Feet Assembly ## Feet Assembly
### Vitamins ### Vitamins
|Qty|Description| |Qty|Description|
|--:|:----------| |---:|:----------|
|4| Nut M3 x 2.4mm nyloc| |4| Nut M3 x 2.4mm nyloc|
|4| Screw M3 dome x 10mm| |4| Screw M3 dome x 10mm|
|8| Washer M3 x 7mm x 0.5mm| |8| Washer M3 x 7mm x 0.5mm|
@@ -97,7 +97,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
### 3D Printed parts ### 3D Printed parts
| 4 x foot.stl | | 4 x foot.stl |
|--| |---|
| ![foot.stl](stls/foot.png) | ![foot.stl](stls/foot.png)
@@ -105,7 +105,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
### Sub-assemblies ### Sub-assemblies
| 1 x base_assembly | | 1 x base_assembly |
|--| |---|
| ![base_assembled](assemblies/base_assembled_tn.png) | ![base_assembled](assemblies/base_assembled_tn.png)
@@ -124,7 +124,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
## Mains In Assembly ## Mains In Assembly
### Vitamins ### Vitamins
|Qty|Description| |Qty|Description|
|--:|:----------| |---:|:----------|
|3| Heatshrink sleeving ID 3.2mm x 15mm - not shown| |3| Heatshrink sleeving ID 3.2mm x 15mm - not shown|
|1| IEC inlet for ATX| |1| IEC inlet for ATX|
|2| Nut M3 x 2.4mm nyloc| |2| Nut M3 x 2.4mm nyloc|
@@ -138,7 +138,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
### Sub-assemblies ### Sub-assemblies
| 1 x feet_assembly | | 1 x feet_assembly |
|--| |---|
| ![feet_assembled](assemblies/feet_assembled_tn.png) | ![feet_assembled](assemblies/feet_assembled_tn.png)
@@ -163,7 +163,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
## Main Assembly ## Main Assembly
### Vitamins ### Vitamins
|Qty|Description| |Qty|Description|
|--:|:----------| |---:|:----------|
|2| 4mm shielded jack socket blue| |2| 4mm shielded jack socket blue|
|1| 4mm shielded jack socket brown| |1| 4mm shielded jack socket brown|
|2| 4mm shielded jack socket green| |2| 4mm shielded jack socket green|
@@ -178,7 +178,7 @@ Earth leakage can be measured Canadian CSA style by disconnected the neutral lin
### Sub-assemblies ### Sub-assemblies
| 1 x mains_in_assembly | | 1 x mains_in_assembly |
|--| |---|
| ![mains_in_assembled](assemblies/mains_in_assembled_tn.png) | ![mains_in_assembled](assemblies/mains_in_assembled_tn.png)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 107 KiB

BIN
gallery/EnviroPlus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 KiB

After

Width:  |  Height:  |  Size: 280 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 291 KiB

After

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 286 KiB

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 KiB

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 KiB

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

After

Width:  |  Height:  |  Size: 198 KiB

View File

@@ -6,6 +6,13 @@ Arduino thermostat to control a beer fridge to use it as an environmental chambe
![](ArduinoThermostat.png) ![](ArduinoThermostat.png)
<a name="TOP"></a>
## EnviroPlus
Environmental monitor using Enviro+ sensor board and a Raspberry Pi Zero.
![](EnviroPlus.png)
<a name="TOP"></a> <a name="TOP"></a>
## FilamentDryBox ## FilamentDryBox
A small fan oven with a spool holder to keep the filament warm and dry. A small fan oven with a spool holder to keep the filament warm and dry.

View File

@@ -34,11 +34,12 @@ layer_height = is_undef($layer_height) ? 0.25 : $layer_height; // lay
extrusion_width = is_undef($extrusion_width) ? 0.5 : $extrusion_width; // filament width when printing extrusion_width = is_undef($extrusion_width) ? 0.5 : $extrusion_width; // filament width when printing
nozzle = is_undef($nozzle) ? 0.45 : $nozzle; // 3D printer nozzle nozzle = is_undef($nozzle) ? 0.45 : $nozzle; // 3D printer nozzle
cnc_bit_r = is_undef($cnc_bit_r) ? 1.2 : $cnc_bit_r; // miniumum tool radius when milling 2D objects cnc_bit_r = is_undef($cnc_bit_r) ? 1.2 : $cnc_bit_r; // miniumum tool radius when milling 2D objects
pp1_colour = is_undef($pp1_colour) ? "lime" : $pp1_colour; // printed part colour 1 pp1_colour = is_undef($pp1_colour) ? [0, 146/255, 0] : $pp1_colour; // printed part colour 1, RepRap logo colour
pp2_colour = is_undef($pp2_colour) ? "red" : $pp2_colour; // printed part colour 2 pp2_colour = is_undef($pp2_colour) ? "red" : $pp2_colour; // printed part colour 2
pp3_colour = is_undef($pp3_colour) ? "blue" : $pp3_colour; // printed part colour 3 pp3_colour = is_undef($pp3_colour) ? "blue" : $pp3_colour; // printed part colour 3
pp4_colour = is_undef($pp4_colour) ? "darkorange" : $pp4_colour;// printed part colour 4 pp4_colour = is_undef($pp4_colour) ? "darkorange" : $pp4_colour;// printed part colour 4
show_rays = is_undef($show_rays) ? false : $show_rays; // show camera sight lines and light direction show_rays = is_undef($show_rays) ? false : $show_rays; // show camera sight lines and light direction
show_threads = is_undef($show_threads) ? false : $show_threads; // show screw threads
// Minimum wall is about two filaments wide but we extrude it closer to get better bonding // Minimum wall is about two filaments wide but we extrude it closer to get better bonding
squeezed_wall = $preview ? 2 * extrusion_width - layer_height * (1 - PI / 4) squeezed_wall = $preview ? 2 * extrusion_width - layer_height * (1 - PI / 4)
@@ -59,7 +60,9 @@ grey60 = [0.6, 0.6, 0.6];
grey70 = [0.7, 0.7, 0.7]; grey70 = [0.7, 0.7, 0.7];
grey80 = [0.8, 0.8, 0.8]; grey80 = [0.8, 0.8, 0.8];
grey90 = [0.9, 0.9, 0.9]; grey90 = [0.9, 0.9, 0.9];
brass = "gold"; gold = [255/255, 215/255, 0/255];
brass = [255/255, 220/255, 100/255];
silver = [0.75, 0.75, 0.75];
/* /*
* Enums * Enums

View File

@@ -22,46 +22,45 @@
// //
include <core.scad> include <core.scad>
include <vitamins/fans.scad> include <vitamins/psus.scad>
include <vitamins/pcbs.scad>
include <vitamins/batteries.scad>
include <vitamins/blowers.scad>
include <vitamins/bulldogs.scad>
include <vitamins/buttons.scad>
include <vitamins/components.scad>
include <vitamins/displays.scad>
include <vitamins/extrusions.scad>
include <vitamins/extrusion_brackets.scad>
include <vitamins/geared_steppers.scad>
include <vitamins/green_terminals.scad>
include <vitamins/hot_ends.scad>
include <vitamins/inserts.scad> include <vitamins/inserts.scad>
include <vitamins/kp_pillow_blocks.scad>
include <vitamins/ldrs.scad>
include <vitamins/leadnuts.scad>
include <vitamins/leds.scad>
include <vitamins/light_strips.scad>
include <vitamins/mains_sockets.scad>
include <vitamins/modules.scad>
include <vitamins/pillars.scad>
include <vitamins/pin_headers.scad>
include <vitamins/pulleys.scad>
include <vitamins/ring_terminals.scad> include <vitamins/ring_terminals.scad>
include <vitamins/rails.scad> include <vitamins/rails.scad>
include <vitamins/belts.scad>
include <vitamins/pulleys.scad>
include <vitamins/sheets.scad>
include <vitamins/stepper_motors.scad>
include <vitamins/components.scad>
include <vitamins/hot_ends.scad>
include <vitamins/tubings.scad>
include <vitamins/zipties.scad>
include <vitamins/linear_bearings.scad>
include <vitamins/rod.scad> include <vitamins/rod.scad>
include <vitamins/leadnuts.scad> include <vitamins/scs_bearing_blocks.scad>
include <vitamins/bulldogs.scad> include <vitamins/sheets.scad>
include <vitamins/pillars.scad> include <vitamins/sk_brackets.scad>
include <vitamins/psus.scad> include <vitamins/spools.scad>
include <vitamins/iecs.scad>
include <vitamins/rockers.scad>
include <vitamins/ssrs.scad> include <vitamins/ssrs.scad>
include <vitamins/d_connectors.scad> include <vitamins/stepper_motors.scad>
include <vitamins/buttons.scad>
include <vitamins/pcbs.scad>
include <vitamins/modules.scad>
include <vitamins/displays.scad>
include <vitamins/blowers.scad>
include <vitamins/leds.scad>
include <vitamins/toggles.scad> include <vitamins/toggles.scad>
include <vitamins/transformers.scad> include <vitamins/transformers.scad>
include <vitamins/tubings.scad>
include <vitamins/variacs.scad> include <vitamins/variacs.scad>
include <vitamins/springs.scad> include <vitamins/zipties.scad>
include <vitamins/batteries.scad>
include <vitamins/microswitches.scad>
include <vitamins/ball_bearings.scad>
include <vitamins/light_strips.scad>
include <vitamins/spools.scad>
include <vitamins/mains_sockets.scad>
include <vitamins/ldrs.scad>
include <vitamins/geared_steppers.scad>
use <vitamins/jack.scad> use <vitamins/jack.scad>
use <vitamins/meter.scad> use <vitamins/meter.scad>
@@ -90,3 +89,4 @@ use <utils/layout.scad>
use <utils/round.scad> use <utils/round.scad>
use <utils/offset.scad> use <utils/offset.scad>
use <utils/sector.scad> use <utils/sector.scad>
use <utils/thread.scad>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 KiB

After

Width:  |  Height:  |  Size: 783 KiB

View File

@@ -32,6 +32,8 @@ use <tests/cable_strips.scad>
use <tests/components.scad> use <tests/components.scad>
use <tests/d_connectors.scad> use <tests/d_connectors.scad>
use <tests/displays.scad> use <tests/displays.scad>
use <tests/extrusions.scad>
use <tests/extrusion_brackets.scad>
use <tests/fans.scad> use <tests/fans.scad>
use <tests/fuseholder.scad> use <tests/fuseholder.scad>
use <tests/geared_steppers.scad> use <tests/geared_steppers.scad>
@@ -39,6 +41,7 @@ use <tests/hot_ends.scad>
use <tests/iecs.scad> use <tests/iecs.scad>
use <tests/inserts.scad> use <tests/inserts.scad>
use <tests/jack.scad> use <tests/jack.scad>
use <tests/kp_pillow_blocks.scad>
use <tests/leadnuts.scad> use <tests/leadnuts.scad>
use <tests/leds.scad> use <tests/leds.scad>
use <tests/ldrs.scad> use <tests/ldrs.scad>
@@ -59,8 +62,10 @@ use <tests/ring_terminals.scad>
use <tests/rockers.scad> use <tests/rockers.scad>
use <tests/rod.scad> use <tests/rod.scad>
use <tests/screws.scad> use <tests/screws.scad>
use <tests/scs_bearing_blocks.scad>
use <tests/sealing_strip.scad> use <tests/sealing_strip.scad>
use <tests/sheets.scad> use <tests/sheets.scad>
use <tests/sk_brackets.scad>
use <tests/spades.scad> use <tests/spades.scad>
use <tests/springs.scad> use <tests/springs.scad>
use <tests/ssrs.scad> use <tests/ssrs.scad>
@@ -82,17 +87,25 @@ use <tests/door_hinge.scad>
use <tests/door_latch.scad> use <tests/door_latch.scad>
use <tests/fan_guard.scad> use <tests/fan_guard.scad>
use <tests/fixing_block.scad> use <tests/fixing_block.scad>
use <tests/flat_hinge.scad>
use <tests/foot.scad> use <tests/foot.scad>
use <tests/handle.scad> use <tests/handle.scad>
use <tests/pcb_mount.scad>
use <tests/printed_box.scad>
use <tests/ribbon_clamp.scad> use <tests/ribbon_clamp.scad>
use <tests/screw_knob.scad> use <tests/screw_knob.scad>
use <tests/socket_box.scad> use <tests/socket_box.scad>
use <tests/strap_handle.scad> use <tests/strap_handle.scad>
use <tests/ssr_shroud.scad> use <tests/ssr_shroud.scad>
use <tests/psu_shroud.scad> use <tests/psu_shroud.scad>
use <tests/flat_hinge.scad>
x5 = 800; x0 = 0;
x1 = x0 + 100;
x2 = x1 + 90;
x3 = x2 + 130;
x4 = x3 + 200;
x5 = 850;
x6 = x5 + 150;
cable_grommets_y = 0; cable_grommets_y = 0;
@@ -131,16 +144,20 @@ translate([x5 + 60, cable_grommets_y + 200])
translate([x5, cable_grommets_y + 250]) translate([x5, cable_grommets_y + 250])
handle(); handle();
translate([900, 600]) translate([950, 600])
box_test(); box_test();
translate([850, 1170]) translate([890, 730])
printed_boxes();
translate([850, 1260])
bbox_test(); bbox_test();
x0 = 0;
inserts_y = 0; inserts_y = 0;
nuts_y = inserts_y + 20; nuts_y = inserts_y + 20;
washers_y = nuts_y + 60; washers_y = nuts_y + 100;
screws_y = washers_y + 120; screws_y = washers_y + 120;
o_rings_y = screws_y + 130; o_rings_y = screws_y + 130;
springs_y = o_rings_y + 20; springs_y = o_rings_y + 20;
@@ -151,7 +168,7 @@ leadnuts_y = pillars_y + 40;
pulleys_y = leadnuts_y +40; pulleys_y = leadnuts_y +40;
hot_ends_y = pulleys_y + 60; hot_ends_y = pulleys_y + 60;
linear_bearings_y = hot_ends_y + 50; linear_bearings_y = hot_ends_y + 50;
sheets_y = linear_bearings_y + 50; sheets_y = linear_bearings_y + 100;
pcbs_y = sheets_y + 40; pcbs_y = sheets_y + 40;
displays_y = pcbs_y + 150; displays_y = pcbs_y + 150;
fans_y = displays_y + 100; fans_y = displays_y + 100;
@@ -230,7 +247,6 @@ translate([x0, psus_y]) {
psu_shrouds(); psu_shrouds();
} }
x1 = x0 + 100;
zipties_y = 0; zipties_y = 0;
bulldogs_y = zipties_y + 40; bulldogs_y = zipties_y + 40;
@@ -240,7 +256,6 @@ translate([x1, zipties_y])
translate([x1, bulldogs_y]) translate([x1, bulldogs_y])
bulldogs(); bulldogs();
x2 = x1 + 90;
leds_y = 0; leds_y = 0;
carriers_y = leds_y + 40; carriers_y = leds_y + 40;
spades_y = carriers_y + 40; spades_y = carriers_y + 40;
@@ -248,7 +263,7 @@ buttons_y = spades_y + 40;
jacks_y = buttons_y + 40; jacks_y = buttons_y + 40;
microswitches_y = jacks_y + 40; microswitches_y = jacks_y + 40;
rockers_y = microswitches_y + 40; rockers_y = microswitches_y + 40;
toggles_y = rockers_y + 40; toggles_y = rockers_y + 60;
components_y = toggles_y + 40; components_y = toggles_y + 40;
translate([x2, leds_y]) translate([x2, leds_y])
@@ -287,8 +302,6 @@ translate([x2, toggles_y])
translate([x2, components_y]) translate([x2, components_y])
components(); components();
x3 = x2 + 150;
veroboard_y = 0; veroboard_y = 0;
d_connectors_y = veroboard_y + 110; d_connectors_y = veroboard_y + 110;
iecs_y = d_connectors_y + 80; iecs_y = d_connectors_y + 80;
@@ -297,6 +310,7 @@ ssrs_y = modules_y + 80;
blowers_y = ssrs_y + 60; blowers_y = ssrs_y + 60;
batteries_y = blowers_y + 100; batteries_y = blowers_y + 100;
steppers_y = batteries_y + 70; steppers_y = batteries_y + 70;
extrusions_y = steppers_y + 100;
translate([x3, veroboard_y]) translate([x3, veroboard_y])
veroboard_test(); veroboard_test();
@@ -304,6 +318,9 @@ translate([x3, veroboard_y])
translate([x3 + 70, veroboard_y + 30]) translate([x3 + 70, veroboard_y + 30])
geared_steppers(); geared_steppers();
translate([x3 + 140, veroboard_y + 20])
pcb_mounts();
translate([x3, d_connectors_y]) translate([x3, d_connectors_y])
d_connectors(); d_connectors();
@@ -334,16 +351,22 @@ translate([x3, batteries_y])
translate([x2, steppers_y]) // interloper translate([x2, steppers_y]) // interloper
stepper_motors(); stepper_motors();
translate([x2, extrusions_y]) {
extrusions();
}
translate([x3, transformers_y]) translate([x3, transformers_y])
transformers(); transformers();
x4 = x3 + 220;
belts_y = 0; belts_y = 0;
rails_y = belts_y + 200; rails_y = belts_y + 200;
cable_strips_y = rails_y + 300; extrusion_brackets_y = rails_y + 250;
sk_brackets_y = extrusion_brackets_y + 80;
kp_pillow_blocks_y = sk_brackets_y + 50;
scs_bearing_blocks_y = kp_pillow_blocks_y + 60;
translate([x4 + 112, belts_y + 58]) { translate([x4 + 130, belts_y + 58]) {
belt_test(); belt_test();
translate([0, 60]) translate([0, 60])
@@ -353,9 +376,22 @@ translate([x4 + 112, belts_y + 58]) {
translate([x4, rails_y + 130]) translate([x4, rails_y + 130])
rails(); rails();
translate([x4, cable_strips_y]) translate([780, 0])
cable_strips(); rotate(90)
cable_strips();
translate([x4, kp_pillow_blocks_y])
kp_pillow_blocks();
translate([x4, sk_brackets_y])
sk_brackets();
translate([x4, extrusion_brackets_y])
extrusion_brackets();
translate([x4, scs_bearing_blocks_y])
scs_bearing_blocks();
x6 = x5 + 150;
translate([x6, 125]) translate([x6, 125])
light_strips(); light_strips();

View File

@@ -31,12 +31,11 @@
//! //!
//! Normally the side sheets are the same type but they can be overridden individually as long as the substitute has the same thickness. //! Normally the side sheets are the same type but they can be overridden individually as long as the substitute has the same thickness.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../vitamins/sheet.scad> use <../vitamins/sheet.scad>
use <../vitamins/screw.scad> use <../vitamins/screw.scad>
use <../vitamins/washer.scad> use <../vitamins/washer.scad>
use <../vitamins/insert.scad>
include <../vitamins/inserts.scad>
use <../utils/quadrant.scad> use <../utils/quadrant.scad>
bezel_clearance = 0.2; bezel_clearance = 0.2;

View File

@@ -50,6 +50,10 @@ function bbox_name(type) = type[8] ? type[8] : "bbox"; //! Optional name i
function bbox_skip_blocks(type)= type[9] ? type[9] : []; //! List of fixing blocks to skip, used to allow a hinged panel for example function bbox_skip_blocks(type)= type[9] ? type[9] : []; //! List of fixing blocks to skip, used to allow a hinged panel for example
function star_washers(type) = type[10] ? type[10] : is_undef(type[10]); //! Set to false to remove star washers. function star_washers(type) = type[10] ? type[10] : is_undef(type[10]); //! Set to false to remove star washers.
function bbox_volume(type) = bbox_width(type) * bbox_depth(type) * bbox_height(type) / 1000000; //! Internal volume in litres
function bbox_area(type) = let(w = bbox_width(type), d = bbox_depth(type), h = bbox_height(type)) //! Internal surdface area in m^2
2 * (w * d + w * h + d * h) / 1000000;
module bbox_shelf_blank(type) { //! 2D template for a shelf module bbox_shelf_blank(type) { //! 2D template for a shelf
dxf(str(bbox_name(type), "_shelf")); dxf(str(bbox_name(type), "_shelf"));
@@ -165,7 +169,7 @@ module bbox_right_blank(type, sheet = false) { //! 2D template for the right sid
} }
} }
module bbox_front_blank(type, sheet = false) { //! 2D template for the front module bbox_front_blank(type, sheet = false, width = 0) { //! 2D template for the front
dxf(str(bbox_name(type), "_front")); dxf(str(bbox_name(type), "_front"));
t = sheet_thickness(bbox_sheets(type)); t = sheet_thickness(bbox_sheets(type));
@@ -174,7 +178,7 @@ module bbox_front_blank(type, sheet = false) { //! 2D template for the front
difference() { difference() {
translate([0, (bt - bb) / 2]) translate([0, (bt - bb) / 2])
sheet_2D(subst_sheet(type, sheet), bbox_width(type) + 2 * t, bbox_height(type) + bb + bt); sheet_2D(subst_sheet(type, sheet), max(bbox_width(type) + 2 * t, width), bbox_height(type) + bb + bt);
drill_holes(type, rotate([-90, 0, 0]) * translate([0, bbox_depth(type) / 2])); drill_holes(type, rotate([-90, 0, 0]) * translate([0, bbox_depth(type) / 2]));
} }
@@ -205,7 +209,7 @@ module _bbox_assembly(type, top = true, base = true, left = true, right = true,
width = bbox_width(type); width = bbox_width(type);
depth = bbox_depth(type); depth = bbox_depth(type);
height = bbox_height(type); height = bbox_height(type);
echo("Box:", width, depth, height); echo("Box:", width, depth, height, volume = bbox_volume(type), area = bbox_area(type));
t = sheet_thickness(bbox_sheets(type)); t = sheet_thickness(bbox_sheets(type));
bt = sheet_thickness(bbox_base_sheet(type)); bt = sheet_thickness(bbox_base_sheet(type));

View File

@@ -21,7 +21,7 @@
//! Printed cable grommets for passing cables through panels avoiding sharp edges and in the case //! Printed cable grommets for passing cables through panels avoiding sharp edges and in the case
//! of conductive panels, an extra layer of insulation. //! of conductive panels, an extra layer of insulation.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../vitamins/cable_strip.scad> use <../vitamins/cable_strip.scad>
base = 1.25; base = 1.25;
@@ -195,12 +195,15 @@ module mouse_grommet_assembly(r, thickness)
module ribbon_grommet_20_3_stl() ribbon_grommet(20, 3); module ribbon_grommet_20_3_stl() ribbon_grommet(20, 3);
module mouse_grommet_15_3_stl() mouse_grommet(1.5, 3); module mouse_grommet_15_3_stl() mouse_grommet(1.5, 3);
module mouse_grommet_20_3_stl() mouse_grommet(2, 3); module mouse_grommet_20_3_stl() mouse_grommet(2, 3);
module mouse_grommet_25_3_stl() mouse_grommet(2.5, 3);
module mouse_grommet_30_3_stl() mouse_grommet(3, 3); module mouse_grommet_30_3_stl() mouse_grommet(3, 3);
module round_grommet_bottom_30_stl() round_grommet_bottom(3); module round_grommet_bottom_30_stl() round_grommet_bottom(3);
module round_grommet_bottom_40_stl() round_grommet_bottom(4); module round_grommet_bottom_40_stl() round_grommet_bottom(4);
module round_grommet_bottom_50_stl() round_grommet_bottom(5);
module round_grommet_bottom_60_stl() round_grommet_bottom(6); module round_grommet_bottom_60_stl() round_grommet_bottom(6);
module round_grommet_top_30_3_stl() round_grommet_top(3, 3); module round_grommet_top_30_3_stl() round_grommet_top(3, 3);
module round_grommet_top_40_3_stl() round_grommet_top(4, 3); module round_grommet_top_40_3_stl() round_grommet_top(4, 3);
module round_grommet_top_50_3_stl() round_grommet_top(5, 3);
module round_grommet_top_60_3_stl() round_grommet_top(6, 3); module round_grommet_top_60_3_stl() round_grommet_top(6, 3);

View File

@@ -22,7 +22,7 @@
// //
$extrusion_width = 0.5; $extrusion_width = 0.5;
include <../core.scad> include <../utils/core/core.scad>
module ESP12F_carrier_stl() { //! Generate the STL for an ESP12 carrier module ESP12F_carrier_stl() { //! Generate the STL for an ESP12 carrier
stl("ESP12F_carrier"); stl("ESP12F_carrier");

View File

@@ -31,8 +31,7 @@
//! Star washers can be omitted by setting ```star_washers``` to false. //! Star washers can be omitted by setting ```star_washers``` to false.
// //
include <../core.scad> include <../core.scad>
include <../vitamins/screws.scad> use <../vitamins/insert.scad>
include <../vitamins/inserts.scad>
use <../utils/rounded_cylinder.scad> use <../utils/rounded_cylinder.scad>
use <../utils/maths.scad> use <../utils/maths.scad>

View File

@@ -24,7 +24,6 @@
//! Rubber door [sealing strip](#sealing_strip) is used to make it airtight and a [door_latch](#door_latch) holds it closed. //! Rubber door [sealing strip](#sealing_strip) is used to make it airtight and a [door_latch](#door_latch) holds it closed.
// //
include <../core.scad> include <../core.scad>
include <../vitamins/screws.scad>
width = 18; width = 18;
thickness = 4; thickness = 4;
@@ -142,7 +141,7 @@ module door_hinge_assembly(top, door_thickness = 6) { //! The moving assembly th
translate([0, pin_y - (thickness + door_thickness / 2), dir * width / 2]) { translate([0, pin_y - (thickness + door_thickness / 2), dir * width / 2]) {
rotate([90, 0, 180]) rotate([90, 0, 180])
color("red") door_hinge(door_thickness); color(pp2_colour) door_hinge(door_thickness);
rotate([90, 0, 0]) rotate([90, 0, 0])
door_hinge_hole_positions() door_hinge_hole_positions()
@@ -166,7 +165,7 @@ module door_hinge_static_assembly(top, sheet_thickness = 3) { //! The stationary
translate([pin_x, 0, -dir * (stat_width / 2 + washer_thickness(screw_washer(pin_screw)))]) translate([pin_x, 0, -dir * (stat_width / 2 + washer_thickness(screw_washer(pin_screw)))])
rotate([90, 0, 0]) { rotate([90, 0, 0]) {
color("lime") door_hinge_stat_stl(); color(pp1_colour) door_hinge_stat_stl();
door_hinge_stat_hole_positions() { door_hinge_stat_hole_positions() {
screw_and_washer(stat_screw, stat_screw_length); screw_and_washer(stat_screw, stat_screw_length);

View File

@@ -22,7 +22,6 @@
// //
include <../core.scad> include <../core.scad>
use <../utils/hanging_hole.scad> use <../utils/hanging_hole.scad>
include <../vitamins/screws.scad>
length = 35; length = 35;
width = 12; width = 12;
@@ -66,7 +65,7 @@ module door_latch_assembly(sheet_thickness = 3) { //! The assembly for a specifi
translate([0, -height - washer_thickness(washer)]) translate([0, -height - washer_thickness(washer)])
rotate([-90, 0, 0]) { rotate([-90, 0, 0]) {
color("lime") render() door_latch_stl(); color(pp1_colour) render() door_latch_stl();
translate_z(nut_trap_depth) translate_z(nut_trap_depth)
vflip() vflip()

View File

@@ -31,8 +31,7 @@
//! Star washers can be omitted by setting ```star_washers``` to false. //! Star washers can be omitted by setting ```star_washers``` to false.
// //
include <../core.scad> include <../core.scad>
include <../vitamins/screws.scad> use <../vitamins/insert.scad>
include <../vitamins/inserts.scad>
use <../utils/maths.scad> use <../utils/maths.scad>
def_screw = M3_cap_screw; def_screw = M3_cap_screw;

View File

@@ -30,7 +30,6 @@
//! This allows the hinges and one set of screws to belong to one assembly and the other set of screws to another assembly. //! This allows the hinges and one set of screws to belong to one assembly and the other set of screws to another assembly.
// //
include <../core.scad> include <../core.scad>
include <../vitamins/screws.scad>
function hinge_width(type) = type[1]; //! Width function hinge_width(type) = type[1]; //! Width
function hinge_depth(type) = type[2]; //! Depth of each leaf function hinge_depth(type) = type[2]; //! Depth of each leaf

View File

@@ -22,8 +22,7 @@
//! inserts don't grip well in rubber. //! inserts don't grip well in rubber.
// //
include <../core.scad> include <../core.scad>
include <../vitamins/screws.scad> use <../vitamins/insert.scad>
include <../vitamins/inserts.scad>
foot = [25, 12, 3, 2, M4_cap_screw, 10]; foot = [25, 12, 3, 2, M4_cap_screw, 10];
insert_foot = [20, 10, 0, 2, M3_cap_screw, 10]; insert_foot = [20, 10, 0, 2, M3_cap_screw, 10];

View File

@@ -21,8 +21,7 @@
//! Printed handle that can be printed without needing support material due to its truncated teardrop profile. //! Printed handle that can be printed without needing support material due to its truncated teardrop profile.
// //
include <../core.scad> include <../core.scad>
include <../vitamins/screws.scad> use <../vitamins/insert.scad>
include <../vitamins/inserts.scad>
dia = 18; dia = 18;
length = 90; // inside length length = 90; // inside length

123
printed/pcb_mount.scad Normal file
View File

@@ -0,0 +1,123 @@
//
// NopSCADlib Copyright Chris Palmer 2019
// 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/>.
//
//
//! A frame to mount a PCB by its corners when it has no mounting holes.
//! The stl must be given a parameterless wrapper in the project that uses it.
//
include <../core.scad>
use <../vitamins/pcb.scad>
clearance = 0.2;
min_wall = extrusion_width * 2;
wall = 2;
overlap = 2;
screw = M3_cap_screw;
screw_clearance_r = 3.1 / 2;
pillar_r = corrected_radius(screw_clearance_r) + wall;
function pillar_x_pitch(pcb) = pcb_length(pcb) + 2 * clearance + 2 * (pillar_r - overlap) / sqrt(2); //! x pitch of screw pillars
function pillar_y_pitch(pcb) = pcb_width(pcb) + 2 * clearance + 2 * (pillar_r - overlap) / sqrt(2); //! y pitch of screw pillars
function pcb_mount_length(pcb) = pillar_x_pitch(pcb) + 2 * pillar_r; //! Outside length of the mount
function pcb_mount_width(pcb) = pillar_y_pitch(pcb) + 2 * pillar_r; //! Outside width of the mount
frame_w = 3;
frame_t = 2;
washer_thickness = 1.25;
module pcb_mount_screw_positions(pcb) //! Positions of the screws and pillars
for(x = [-1, 1], y = [-1, 1])
translate([x * pillar_x_pitch(pcb) / 2, y * pillar_y_pitch(pcb) / 2])
children();
module pcb_mount_holes(pcb, h = 0) //! Drill holes for PCB mount
pcb_mount_screw_positions(pcb)
drill(screw_clearance_radius(screw), h);
module pcb_mount_ring()
difference() {
circle(pillar_r);
poly_circle(screw_clearance_r);
}
module pcb_mount_washer_stl() //! A plastic washer to clamp a PCB
linear_extrude(height = washer_thickness)
pcb_mount_ring();
module pcb_mount(pcb, height = 5, washers = true) { //! Make the STL of a pcb mount for the specified PCB.
stl(str("pcb_mount_", pcb[0], "_", height));
y_pitch = pcb_width(pcb) > 4 * pillar_r + 4 ? pillar_r + 1
: pcb_width(pcb) / 2 + frame_w + 1 + pillar_r;
if(washers)
for(x = [-1, 1], y = [-1, 1])
translate([x * (pillar_r + 1), y * y_pitch, 0])
pcb_mount_washer_stl();
for(x = [-1, 1])
translate([x * pillar_x_pitch(pcb) / 2, 0, frame_t / 2])
cube([frame_w, pillar_y_pitch(pcb) - 2 * wall, frame_t], center = true);
for(y = [-1, 1])
translate([0, y * pillar_y_pitch(pcb) / 2, frame_t / 2])
cube([pillar_x_pitch(pcb) - 2 * wall, frame_w, frame_t], center = true);
pcb_mount_screw_positions(pcb)
linear_extrude(height = height)
pcb_mount_ring();
linear_extrude(height = height + pcb_thickness(pcb) - layer_height)
difference() {
pcb_mount_screw_positions(pcb)
pcb_mount_ring();
square([pcb_length(pcb) + 2 * clearance, pcb_width(pcb) + 2 * clearance], center = true);
}
}
module pcb_mount_assembly(pcb, thickness, height = 5) { //! A PCB mount assembly with fasteners
translate_z(height)
pcb(pcb);
color(pp1_colour) pcb_mount(pcb, washers = false);
washer = screw_washer(screw);
nut = screw_nut(screw);
t = pcb_thickness(pcb);
screw_length = screw_longer_than(height + t + washer_thickness + thickness + washer_thickness(washer) + nut_thickness(nut, true));
pcb_mount_screw_positions(pcb) {
translate_z(height + t) {
color(pp2_colour) pcb_mount_washer_stl();
translate_z(washer_thickness)
screw(screw, screw_length);
}
translate_z(-thickness)
vflip()
nut_and_washer(nut, true);
}
}

229
printed/printed_box.scad Normal file
View File

@@ -0,0 +1,229 @@
//
// NopSCADlib Copyright Chris Palmer 2020
// 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/>.
//
//
//! A fully parametric 3D printed case that can be customised with cutouts and additions specified by children.
//!
//! The walls can be made wavy, which possibly reduces warping when printing and looks nice, however if holes need to be made
//! in the sides you can't print a wavy bridge. Any holes need to be surrounded by a 45&deg; chamfer to make the bridges straight.
//! See the mounting points for the feet in the first example.
//!
//! It can also have printed feet on the base with the screws doubling up to hold the base on.
//
include <../core.scad>
use <../vitamins/insert.scad>
use <foot.scad>
function pbox_name(type) = type[0]; //! Name to allow more than one box in a project
function pbox_wall(type) = type[1]; //! Wall thickness
function pbox_top(type) = type[2]; //! Top thickness
function pbox_base(type) = type[3]; //! Base thickness, can be zero for no base
function pbox_foot(type) = type[4]; //! Printed foot, can be false to suppress feet
function pbox_base_screw(type) = type[5]; //! Screw type if no feet
function pbox_radius(type) = type[6]; //! Internal corner radius
function pbox_ridges(type) = type[7]; //! Ridge wavelength and amplitude
function pbox_width(type) = type[8]; //! Internal width
function pbox_depth(type) = type[9]; //! Internal depth
function pbox_height(type) = type[10]; //! Internal height
base_outset = 1; // How much the base overlaps the inner dimensions
base_overlap = 2; // The width of ledge the base sits on
height_overlap = 1; // How far the edges sit below the base
function pbox_inclusion(type) = pbox_base(type) ? base_overlap - base_outset : 0; //! How far the ledge for the base extends inwards
function pbox_total_height(type) = //! Total height including base overlap
let(base = pbox_base(type),
foot = pbox_foot(type),
washer = pbox_washer(type),
screw = pbox_screw(type))
pbox_height(type) + pbox_top(type) + base + (base ? height_overlap : 0) + (foot || !base ? 0 : washer_thickness(washer) + screw_head_height(screw));
function pbox_screw(type) = //! Foot screw if got feet else base_screw
let(foot = pbox_foot(type)) foot ? foot_screw(foot) : pbox_base_screw(type);
function pbox_insert(type) = screw_insert(pbox_screw(type)); //! The insert for the base screws
function pbox_washer(type) = screw_washer(pbox_screw(type)); //! The washer for the base screws
function pbox_screw_length(type, panel_thickness = 0) = //! Length of the base screw
let(foot = pbox_foot(type))
screw_shorter_than(pbox_base(type) + washer_thickness(pbox_washer(type))
+ insert_length(pbox_insert(type))
+ (foot ? foot_thickness(foot) : panel_thickness));
function pbox_mid_offset(type) = pbox_ridges(type).y + pbox_wall(type) / 2; // Offset to wall midpoint
function pbox_screw_inset(type) = //! How far the base screws are inset
let(foot = pbox_foot(type),
r = foot ? foot_diameter(foot) / 2 : washer_radius(pbox_washer(type)),
R = pbox_radius(type)
) max(r, R - (R - r) / sqrt(2));
module pbox_screw_positions(type) {
foot = pbox_foot(type);
inset = pbox_screw_inset(type);
for(x = [-1, 1], y = [-1, 1])
translate([x * (pbox_width(type) / 2 - inset), y * (pbox_depth(type) / 2 - inset)])
rotate((y > 0 ? -x * 45 : -x * 135) + 90)
children();
}
module pbox_mid_shape(type) {
ridges = pbox_ridges(type);
offset = ridges.y + pbox_wall(type) / 2;
rad = pbox_radius(type) + offset;
w = pbox_width(type) + 2 * offset;
d = pbox_depth(type) + 2 * offset;
module waves(length) {
l = length - 2 * rad;
waves = round(l / ridges.x);
points = 16;
translate([-l / 2, ridges.y / 2])
polygon(concat([[0, -10]], [for(i = [0 : waves * points], a = 360 * i / points) [i * l / waves / points, -cos(a) * ridges.y / 2] ], [[l, -10]]));
}
difference() {
rounded_square([w, d], rad, center = true);
if(ridges.y)
for(side = [-1, 1]) {
translate([0, side * d / 2])
rotate(90 + side * 90)
waves(w);
translate([side * w / 2, 0])
rotate(side * 90)
waves(d);
}
}
}
module pbox_inner_shape(type) {
rad = pbox_radius(type);
w = pbox_width(type);
d = pbox_depth(type);
rounded_square([w, d], rad, center = true);
}
module pbox_base(type) { //! Generate the STL for the base
stl(str(pbox_name(type),"_base"));
t = pbox_base(type);
difference() {
union() {
linear_extrude(height = t)
offset(base_outset - 0.2)
pbox_inner_shape(type);
if($children > 0)
children(0);
}
pbox_screw_positions(type)
poly_cylinder(r = screw_clearance_radius(pbox_screw(type)), h = 2 * t + eps, center = true);
if($children > 1)
children(1);
}
}
module pbox(type) { //! Generate the STL for the main case
stl(pbox_name(type));
height = pbox_height(type);
total_height = pbox_total_height(type);
top_thickness = pbox_top(type);
wall = pbox_wall(type);
ledge_outset = pbox_ridges(type).y;
ledge_inset = base_outset - base_overlap;
ledge_h = pbox_base(type) ? (ledge_outset - ledge_inset) * 2 : 0;
difference() {
union() {
linear_extrude(height = total_height)
offset(wall / 2) pbox_mid_shape(type);
if($children > 2)
children(2);
}
difference() {
translate_z(top_thickness)
union() {
linear_extrude(height = height + eps)
offset(-wall / 2) pbox_mid_shape(type);
translate_z(height) // Recess for the base
linear_extrude(height = total_height - height)
offset(base_outset)
pbox_inner_shape(type);
}
// Ledge to support the lid
if(ledge_h)
translate_z(top_thickness + height - ledge_h)
difference() {
rounded_rectangle([pbox_width(type) + 2 * outset, pbox_depth(type) + 2 * outset, ledge_h], 1, center = false);
hull() {
linear_extrude(height = ledge_h + eps)
offset(ledge_inset)
pbox_inner_shape(type);
linear_extrude(height = eps)
offset(ledge_outset)
pbox_inner_shape(type);
}
pbox_screw_positions(type)
insert_hole(pbox_insert(type));
}
// Corner lugs for inserts
outset = wall + pbox_ridges(type).y;
or = pbox_radius(type) + outset;
inset = pbox_screw_inset(type) + outset;
br = insert_boss_radius(pbox_insert(type), wall);
ext = sqrt(2) * inset - or * (sqrt(2) - 1) - br;
translate_z(height + top_thickness)
pbox_screw_positions(type)
insert_lug(pbox_insert(type), wall, counter_bore = 0, extension = ext, corner_r = or);
if($children > 0)
children(0);
}
if($children > 1)
children(1);
}
}
module pbox_inserts(type) //! Place the inserts for the base screws
translate_z(pbox_height(type) + pbox_top(type))
pbox_screw_positions(type)
insert(pbox_insert(type));
module pbox_base_screws(type, thickness = 0) //! Place the screws and feet
translate_z(pbox_height(type) + pbox_top(type) + pbox_base(type))
pbox_screw_positions(type) {
foot = pbox_foot(type);
if(foot)
color(pp4_colour)
foot(foot);
translate_z(foot ? foot_thickness(foot) : thickness)
screw_and_washer(pbox_screw(type), pbox_screw_length(type, thickness));
}

View File

@@ -22,8 +22,7 @@
//! The stl and assembly must be given a name and parameterless wrappers for the stl and assembly added to the project. //! The stl and assembly must be given a name and parameterless wrappers for the stl and assembly added to the project.
// //
include <../core.scad> include <../core.scad>
include <../vitamins/screws.scad> use <../vitamins/insert.scad>
include <../vitamins/inserts.scad>
use <../vitamins/wire.scad> use <../vitamins/wire.scad>
use <../vitamins/psu.scad> use <../vitamins/psu.scad>

View File

@@ -21,8 +21,7 @@
//! Clamp for ribbon cable and polypropylene strip. //! Clamp for ribbon cable and polypropylene strip.
// //
include <../core.scad> include <../core.scad>
include <../vitamins/screws.scad> use <../vitamins/insert.scad>
include <../vitamins/inserts.scad>
use <../vitamins/cable_strip.scad> use <../vitamins/cable_strip.scad>
wall = 2; wall = 2;

View File

@@ -21,7 +21,6 @@
//! Knob with embedded hex head screw. //! Knob with embedded hex head screw.
// //
include <../core.scad> include <../core.scad>
include <../vitamins/screws.scad>
use <../utils/hanging_hole.scad> use <../utils/hanging_hole.scad>
knob_wall = 2; knob_wall = 2;
@@ -34,7 +33,7 @@ knob_waves = 5;
knob_height = knob_stem_h + knob_thickness; knob_height = knob_stem_h + knob_thickness;
function knob_height() = knob_height; function knob_height() = knob_height;
module screw_knob(screw) { //! Generate the STL foe a knob to fit the specified hex screw module screw_knob(screw) { //! Generate the STL for a knob to fit the specified hex screw
stl(str("screw_knob_M", screw_radius(screw) * 20)); stl(str("screw_knob_M", screw_radius(screw) * 20));
knob_stem_r = nut_trap_radius(screw_nut(screw)) + knob_wall; knob_stem_r = nut_trap_radius(screw_nut(screw)) + knob_wall;

View File

@@ -22,9 +22,8 @@
// //
include <../core.scad> include <../core.scad>
include <../vitamins/mains_sockets.scad> include <../vitamins/mains_sockets.scad>
include <../vitamins/screws.scad>
include <../vitamins/inserts.scad>
include <../vitamins/ring_terminals.scad> include <../vitamins/ring_terminals.scad>
use <../vitamins/insert.scad>
box_height = 19; box_height = 19;
base_thickness = 2; base_thickness = 2;
@@ -93,7 +92,7 @@ assembly(str("socket_box_", type[0])) {
screw = mains_socket_screw(type); screw = mains_socket_screw(type);
insert = screw_insert(screw); insert = screw_insert(screw);
color("lime") render() socket_box(type); color(pp1_colour) render() socket_box(type);
mains_socket_hole_positions(type) mains_socket_hole_positions(type)
translate_z(height) translate_z(height)

View File

@@ -19,11 +19,10 @@
// //
//! A cover to go over the mains end of an SSR to make it safe to be touched. //! A cover to go over the mains end of an SSR to make it safe to be touched.
//! The stl and assembly must be given a name and parameterless wrappers for the stl and assembly added to the project. //! The STL and assembly must be given a name and parameterless wrappers for the stl and assembly added to the project.
// //
include <../core.scad> include <../core.scad>
include <../vitamins/screws.scad> use <../vitamins/insert.scad>
include <../vitamins/inserts.scad>
use <../vitamins/wire.scad> use <../vitamins/wire.scad>
use <../vitamins/ssr.scad> use <../vitamins/ssr.scad>

View File

@@ -22,8 +22,7 @@
//! be fully customised by passing a list of properties. //! be fully customised by passing a list of properties.
// //
include <../core.scad> include <../core.scad>
include <../vitamins/screws.scad> use <../vitamins/insert.scad>
include <../vitamins/inserts.scad>
strap = [18, 2, M3_pan_screw, 3, 25]; strap = [18, 2, M3_pan_screw, 3, 25];
function strap() = strap; function strap() = strap;

831
readme.md

File diff suppressed because it is too large Load Diff

View File

@@ -184,6 +184,9 @@ def parse_bom(file = "openscad.log", name = None):
main.add_part(s) main.add_part(s)
if stack: if stack:
main.assemblies[stack[-1]].add_part(s) main.assemblies[stack[-1]].add_part(s)
else:
if 'ERROR:' in line or 'WARNING:' in line:
print(line[:-1])
return main return main
def boms(target = None, assembly = None): def boms(target = None, assembly = None):

View File

@@ -40,7 +40,7 @@ These are located in the ```scripts``` subdirectory, which needs to be added to
They should work with both Python 2 and Python 3. They should work with both Python 2 and Python 3.
| Script | Function | | Script | Function |
|:--|:--|''', file = doc_file) |:---|:---|''', file = doc_file)
for file in os.listdir('scripts'): for file in os.listdir('scripts'):
if file.endswith('.py'): if file.endswith('.py'):
blurb = '' blurb = ''

View File

@@ -83,50 +83,50 @@ def make_parts(target, part_type, parts = None):
# #
# Find all the scad files # Find all the scad files
# #
lib_dir = os.environ['OPENSCADPATH'] + '/NopSCADlib/printed' lib_dirs = [path + '/' + lib + '/printed' for path in os.environ['OPENSCADPATH'].split(os.pathsep) for lib in sorted(os.listdir(path))]
module_suffix = '_dxf' if part_type == 'svg' else '_' + part_type module_suffix = '_dxf' if part_type == 'svg' else '_' + part_type
for dir in [source_dir, lib_dir]: for dir in [source_dir, source_dir + '/printed'] + lib_dirs:
for filename in os.listdir(dir): if os.path.isdir(dir):
if filename[-5:] == ".scad": for filename in os.listdir(dir):
# if filename[-5:] == ".scad":
# find any modules ending in _<part_type> #
# # find any modules ending in _<part_type>
with open(dir + "/" + filename, "r") as f: #
for line in f.readlines(): with open(dir + "/" + filename, "r") as f:
words = line.split() for line in f.readlines():
if(len(words) and words[0] == "module"): words = line.split()
module = words[1].split('(')[0] if(len(words) and words[0] == "module"):
if module.endswith(module_suffix): module = words[1].split('(')[0]
base_name = module[:-4] if module.endswith(module_suffix):
part = base_name + '.' + part_type base_name = module[:-4]
if part in targets: part = base_name + '.' + part_type
# if part in targets:
# make a file to use the module #
# # Run openscad on the created file
part_maker_name = part_type + ".scad" #
with open(part_maker_name, "w") as f: part_file = target_dir + "/" + part
f.write("use <%s/%s>\n" % (dir, filename)) dname = deps_name(deps_dir, filename)
f.write("%s();\n" % module); changed = check_deps(part_file, dname)
# changed = times.check_have_time(changed, part)
# Run openscad on the created file if part_type == 'stl' and not changed and not part in bounds_map:
# changed = "No bounds"
part_file = target_dir + "/" + part if changed:
dname = deps_name(deps_dir, filename) print(changed)
changed = check_deps(part_file, dname) #
changed = times.check_have_time(changed, part) # make a file to use the module
if part_type == 'stl' and not changed and not part in bounds_map: #
changed = "No bounds" part_maker_name = part_type + ".scad"
if changed: with open(part_maker_name, "w") as f:
print(changed) f.write("use <%s/%s>\n" % (dir, filename))
t = time.time() f.write("%s();\n" % module);
openscad.run("-D$bom=1", "-d", dname, "-o", part_file, part_maker_name) t = time.time()
times.add_time(part, t) openscad.run("-D$bom=1", "-d", dname, "-o", part_file, part_maker_name)
if part_type == 'stl': times.add_time(part, t)
bounds = c14n_stl.canonicalise(part_file) if part_type == 'stl':
bounds_map[part] = bounds bounds = c14n_stl.canonicalise(part_file)
bounds_map[part] = bounds
targets.remove(part) os.remove(part_maker_name)
os.remove(part_maker_name) targets.remove(part)
# #
# Write new bounds file # Write new bounds file
# #

View File

@@ -24,7 +24,7 @@ from __future__ import print_function
import subprocess, sys import subprocess, sys
def _run(args, silent): def run_list(args, silent = False):
cmd = ["openscad"] + args cmd = ["openscad"] + args
if not silent: if not silent:
for arg in cmd: for arg in cmd:
@@ -39,7 +39,7 @@ def _run(args, silent):
sys.exit(rc) sys.exit(rc)
def run(*args): def run(*args):
_run(list(args), False) run_list(list(args), False)
def run_silent(*args): def run_silent(*args):
_run(list(args), True); run_list(list(args), True);

49
scripts/options.py Normal file
View File

@@ -0,0 +1,49 @@
#
# NopSCADlib Copyright Chris Palmer 2020
# 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/>.
#
# Set command line options from enviroment variables and check if they have changed
import json, os, deps
def check_options(dir = '.'):
global options, options_mtime
options = { "show_threads": str(os.getenv("NOPSCADLIB_SHOW_THREADS")) }
options_fname = dir + '/options.json'
try:
with open(options_fname) as json_file:
last_options = json.load(json_file)
except:
last_options = {}
if last_options != options:
with open(options_fname, 'w') as outfile:
json.dump(options, outfile, indent = 4)
options_mtime = deps.mtime(options_fname)
def have_changed(changed, target):
if not changed and deps.mtime(target) < options_mtime:
return "command line options changed"
return changed
def list():
result = []
for name in options.keys():
value = options[name]
if value != 'None':
result.append('-D$' + name + '=' + value)
return result

View File

@@ -5,7 +5,7 @@ These are located in the ```scripts``` subdirectory, which needs to be added to
They should work with both Python 2 and Python 3. They should work with both Python 2 and Python 3.
| Script | Function | | Script | Function |
|:--|:--| |:---|:---|
| ```bom.py``` | Generates BOM files for the project. | | ```bom.py``` | Generates BOM files for the project. |
| ```c14n_stl.py``` | OpenSCAD produces randomly ordered STL files. This script re-orders them consistently so that GIT can tell if they have changed or not. | | ```c14n_stl.py``` | OpenSCAD produces randomly ordered STL files. This script re-orders them consistently so that GIT can tell if they have changed or not. |
| ```doc_scripts.py``` | Makes this document and doc/usage.md. | | ```doc_scripts.py``` | Makes this document and doc/usage.md. |

View File

@@ -59,7 +59,7 @@ def render(target, type):
if mtime(part_file) > mtime(png_name): if mtime(part_file) > mtime(png_name):
png_maker_name = "png.scad" png_maker_name = "png.scad"
with open(png_maker_name, "w") as f: with open(png_maker_name, "w") as f:
f.write('color("lime") import("%s");\n' % part_file) f.write('color([0, 146/255, 0]) import("%s");\n' % part_file)
cam = "--camera=0,0,0,70,0,315,500" if type == 'stl' else "--camera=0,0,0,0,0,0,500" cam = "--camera=0,0,0,70,0,315,500" if type == 'stl' else "--camera=0,0,0,0,0,0,500"
render = "--preview" if type == 'stl' else "--render" render = "--preview" if type == 'stl' else "--render"
tmp_name = 'tmp.png' tmp_name = 'tmp.png'

View File

@@ -27,6 +27,7 @@ import openscad
import subprocess import subprocess
import bom import bom
import times import times
import options
import time import time
import json import json
import shutil import shutil
@@ -96,6 +97,7 @@ def tests(tests):
index = {} index = {}
bodies = {} bodies = {}
times.read_times() times.read_times()
options.check_options(deps_dir)
# #
# Make cover pic if does not exist as very slow. Delete it to force an update. # Make cover pic if does not exist as very slow. Delete it to force an update.
# #
@@ -190,11 +192,12 @@ def tests(tests):
oldest = png_name if mtime(png_name) < mtime(bom_name) else bom_name oldest = png_name if mtime(png_name) < mtime(bom_name) else bom_name
changed = check_deps(oldest, dname) changed = check_deps(oldest, dname)
changed = times.check_have_time(changed, scad_name) changed = times.check_have_time(changed, scad_name)
changed = options.have_changed(changed, oldest)
if changed: if changed:
print(changed) print(changed)
t = time.time() t = time.time()
tmp_name = 'tmp.png' tmp_name = 'tmp.png'
openscad.run("-D", "$bom=2", colour_scheme, "--projection=p", "--imgsize=%d,%d" % (w, h), "--camera=0,0,0,70,0,315,500", "--autocenter", "--viewall", "-d", dname, "-o", tmp_name, scad_name); openscad.run_list(options.list() + ["-D$bom=2", colour_scheme, "--projection=p", "--imgsize=%d,%d" % (w, h), "--camera=0,0,0,70,0,315,500", "--autocenter", "--viewall", "-d", dname, "-o", tmp_name, scad_name]);
times.add_time(scad_name, t) times.add_time(scad_name, t)
do_cmd(["magick", tmp_name, "-trim", "-resize", "1000x600", "-bordercolor", background, "-border", "10", tmp_name]) do_cmd(["magick", tmp_name, "-trim", "-resize", "1000x600", "-bordercolor", background, "-border", "10", tmp_name])
update_image(tmp_name, png_name) update_image(tmp_name, png_name)

View File

@@ -28,6 +28,7 @@ import openscad
from tests import do_cmd, update_image, colour_scheme, background from tests import do_cmd, update_image, colour_scheme, background
import time import time
import times import times
import options
from deps import * from deps import *
import os import os
import json import json
@@ -70,9 +71,10 @@ def bom_to_assemblies(bom_dir, bounds_map):
# #
# Remove the main assembly if it is a shell # Remove the main assembly if it is a shell
# #
ass = flat_bom[-1] if flat_bom:
if len(ass["assemblies"]) < 2 and not ass["vitamins"] and not ass["printed"] and not ass["routed"]: ass = flat_bom[-1]
flat_bom = flat_bom[:-1] if len(ass["assemblies"]) < 2 and not ass["vitamins"] and not ass["printed"] and not ass["routed"]:
flat_bom = flat_bom[:-1]
return [assembly["name"] for assembly in flat_bom] return [assembly["name"] for assembly in flat_bom]
def eop(print_mode, doc_file, last = False, first = False): def eop(print_mode, doc_file, last = False, first = False):
@@ -102,6 +104,7 @@ def views(target, do_assemblies = None):
os.makedirs(deps_dir) os.makedirs(deps_dir)
times.read_times(target_dir) times.read_times(target_dir)
options.check_options(deps_dir)
bounds_fname = top_dir + 'stls/bounds.json' bounds_fname = top_dir + 'stls/bounds.json'
with open(bounds_fname) as json_file: with open(bounds_fname) as json_file:
bounds_map = json.load(json_file) bounds_map = json.load(json_file)
@@ -121,66 +124,68 @@ def views(target, do_assemblies = None):
# Find all the scad files # Find all the scad files
# #
main_blurb = None main_blurb = None
lib_dir = os.environ['OPENSCADPATH'] + '/NopSCADlib/printed' lib_dirs = [path + '/' + lib + '/printed' for path in os.environ['OPENSCADPATH'].split(os.pathsep) for lib in sorted(os.listdir(path))]
for dir in [source_dir, lib_dir]: for dir in [source_dir, source_dir + '/printed'] + lib_dirs:
for filename in os.listdir(dir): if os.path.isdir(dir):
if filename.endswith('.scad'): for filename in os.listdir(dir):
# if filename.endswith('.scad'):
# find any modules with names ending in _assembly #
# # find any modules with names ending in _assembly
with open(dir + "/" + filename, "r") as f: #
lines = f.readlines() with open(dir + "/" + filename, "r") as f:
line_no = 0 lines = f.readlines()
for line in lines: line_no = 0
words = line.split() for line in lines:
if len(words) and words[0] == "module": words = line.split()
module = words[1].split('(')[0] if len(words) and words[0] == "module":
if is_assembly(module): module = words[1].split('(')[0]
if module in assemblies: if is_assembly(module):
# if module in assemblies:
# Scrape the assembly instructions
#
for ass in flat_bom:
if ass["name"] == module:
if not "blurb" in ass:
ass["blurb"] = blurb.scrape_module_blurb(lines[:line_no])
break
if not do_assemblies or module in do_assemblies:
# #
# make a file to use the module # Scrape the assembly instructions
# #
png_maker_name = 'png.scad' for ass in flat_bom:
with open(png_maker_name, "w") as f: if ass["name"] == module:
f.write("use <%s/%s>\n" % (dir, filename)) if not "blurb" in ass:
f.write("%s();\n" % module); ass["blurb"] = blurb.scrape_module_blurb(lines[:line_no])
# break
# Run openscad on th created file if not do_assemblies or module in do_assemblies:
# #
dname = deps_name(deps_dir, filename) # Run openscad on the created file
for explode in [0, 1]: #
png_name = target_dir + '/' + module + '.png' dname = deps_name(deps_dir, filename)
if not explode: for explode in [0, 1]:
png_name = png_name.replace('_assembly', '_assembled') png_name = target_dir + '/' + module + '.png'
changed = check_deps(png_name, dname) if not explode:
changed = times.check_have_time(changed, png_name) png_name = png_name.replace('_assembly', '_assembled')
tmp_name = 'tmp.png' changed = check_deps(png_name, dname)
if changed: changed = times.check_have_time(changed, png_name)
print(changed) changed = options.have_changed(changed, png_name)
t = time.time() tmp_name = 'tmp.png'
openscad.run("-D$pose=1", "-D$explode=%d" % explode, colour_scheme, "--projection=p", "--imgsize=4096,4096", "--autocenter", "--viewall", "-d", dname, "-o", tmp_name, png_maker_name); if changed:
times.add_time(png_name, t) print(changed)
do_cmd(["magick", tmp_name, "-trim", "-resize", "1004x1004", "-bordercolor", background, "-border", "10", tmp_name]) #
update_image(tmp_name, png_name) # make a file to use the module
tn_name = png_name.replace('.png', '_tn.png') #
if mtime(png_name) > mtime(tn_name): png_maker_name = 'png.scad'
do_cmd(("magick "+ png_name + " -trim -resize 280x280 -background " + background + " -gravity Center -extent 280x280 -bordercolor " + background + " -border 10 " + tmp_name).split()) with open(png_maker_name, "w") as f:
update_image(tmp_name, tn_name) f.write("use <%s/%s>\n" % (dir, filename))
os.remove(png_maker_name) f.write("%s();\n" % module);
done_assemblies.append(module) t = time.time()
else: openscad.run_list(options.list() + ["-D$pose=1", "-D$explode=%d" % explode, colour_scheme, "--projection=p", "--imgsize=4096,4096", "--autocenter", "--viewall", "-d", dname, "-o", tmp_name, png_maker_name]);
if module == 'main_assembly': times.add_time(png_name, t)
main_blurb = blurb.scrape_module_blurb(lines[:line_no]) do_cmd(["magick", tmp_name, "-trim", "-resize", "1004x1004", "-bordercolor", background, "-border", "10", tmp_name])
line_no += 1 update_image(tmp_name, png_name)
os.remove(png_maker_name)
tn_name = png_name.replace('.png', '_tn.png')
if mtime(png_name) > mtime(tn_name):
do_cmd(("magick "+ png_name + " -trim -resize 280x280 -background " + background + " -gravity Center -extent 280x280 -bordercolor " + background + " -border 10 " + tmp_name).split())
update_image(tmp_name, tn_name)
done_assemblies.append(module)
else:
if module == 'main_assembly':
main_blurb = blurb.scrape_module_blurb(lines[:line_no])
line_no += 1
times.print_times() times.print_times()
# #
# Build the document # Build the document
@@ -236,7 +241,7 @@ def views(target, do_assemblies = None):
print('| <span style="writing-mode: vertical-rl; text-orientation: mixed;">%s</span> ' % name, file = doc_file, end = '') print('| <span style="writing-mode: vertical-rl; text-orientation: mixed;">%s</span> ' % name, file = doc_file, end = '')
print('| <span style="writing-mode: vertical-rl; text-orientation: mixed;">TOTALS</span> | |', file = doc_file) print('| <span style="writing-mode: vertical-rl; text-orientation: mixed;">TOTALS</span> | |', file = doc_file)
print(('|--:' * len(flat_bom) + '|--:|:--|'), file = doc_file) print(('|---:' * len(flat_bom) + '|---:|:---|'), file = doc_file)
for t in types: for t in types:
if things[t]: if things[t]:
@@ -279,7 +284,7 @@ def views(target, do_assemblies = None):
if vitamins: if vitamins:
print("### Vitamins", file = doc_file) print("### Vitamins", file = doc_file)
print("|Qty|Description|", file = doc_file) print("|Qty|Description|", file = doc_file)
print("|--:|:----------|", file = doc_file) print("|---:|:----------|", file = doc_file)
for v in sorted(vitamins, key = lambda s: s.split(":")[-1]): for v in sorted(vitamins, key = lambda s: s.split(":")[-1]):
print("|%d|%s|" % (vitamins[v], v.split(":")[1]), file = doc_file) print("|%d|%s|" % (vitamins[v], v.split(":")[1]), file = doc_file)
print("\n", file = doc_file) print("\n", file = doc_file)
@@ -293,7 +298,7 @@ def views(target, do_assemblies = None):
print('%s %d x %s |' % ('\n|' if not (i % 3) else '', printed[p], p), file = doc_file, end = '') print('%s %d x %s |' % ('\n|' if not (i % 3) else '', printed[p], p), file = doc_file, end = '')
if (i % 3) == 2 or i == len(printed) - 1: if (i % 3) == 2 or i == len(printed) - 1:
n = (i % 3) + 1 n = (i % 3) + 1
print('\n|%s' % ('--|' * n), file = doc_file) print('\n|%s' % ('---|' * n), file = doc_file)
for j in range(n): for j in range(n):
part = keys[i - n + j + 1] part = keys[i - n + j + 1]
print('| ![%s](stls/%s) %s' % (part, part.replace('.stl','.png'), '|\n' if j == j - 1 else ''), end = '', file = doc_file) print('| ![%s](stls/%s) %s' % (part, part.replace('.stl','.png'), '|\n' if j == j - 1 else ''), end = '', file = doc_file)
@@ -309,7 +314,7 @@ def views(target, do_assemblies = None):
print('%s %d x %s |' % ('\n|' if not (i % 3) else '', routed[r], r), file = doc_file, end = '') print('%s %d x %s |' % ('\n|' if not (i % 3) else '', routed[r], r), file = doc_file, end = '')
if (i % 3) == 2 or i == len(routed) - 1: if (i % 3) == 2 or i == len(routed) - 1:
n = (i % 3) + 1 n = (i % 3) + 1
print('\n|%s' % ('--|' * n), file = doc_file) print('\n|%s' % ('---|' * n), file = doc_file)
for j in range(n): for j in range(n):
part = keys[i - n + j + 1] part = keys[i - n + j + 1]
print('| ![%s](dxfs/%s) %s' % (part, part.replace('.dxf','.png'), '|\n' if j == j - 1 else ''), end = '', file = doc_file) print('| ![%s](dxfs/%s) %s' % (part, part.replace('.dxf','.png'), '|\n' if j == j - 1 else ''), end = '', file = doc_file)
@@ -325,7 +330,7 @@ def views(target, do_assemblies = None):
print('%s %d x %s |' % ('\n|' if not (i % 3) else '', sub_assemblies[a], a), file = doc_file, end = '') print('%s %d x %s |' % ('\n|' if not (i % 3) else '', sub_assemblies[a], a), file = doc_file, end = '')
if (i % 3) == 2 or i == len(keys) - 1: if (i % 3) == 2 or i == len(keys) - 1:
n = (i % 3) + 1 n = (i % 3) + 1
print('\n|%s' % ('--|' * n), file = doc_file) print('\n|%s' % ('---|' * n), file = doc_file)
for j in range(n): for j in range(n):
a = keys[i - n + j + 1].replace('_assembly', '_assembled') a = keys[i - n + j + 1].replace('_assembly', '_assembled')
print('| ![%s](assemblies/%s) %s' % (a, a + '_tn.png', '|\n' if j == j - 1 else ''), end = '', file = doc_file) print('| ![%s](assemblies/%s) %s' % (a, a + '_tn.png', '|\n' if j == j - 1 else ''), end = '', file = doc_file)

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../utils/annotation.scad> use <../utils/annotation.scad>
module annotations() { module annotations() {

View File

@@ -16,10 +16,9 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../utils/layout.scad> use <../utils/layout.scad>
include <../vitamins/springs.scad>
include <../vitamins/batteries.scad> include <../vitamins/batteries.scad>
module batteries() module batteries()

View File

@@ -18,10 +18,8 @@
// //
include <../core.scad> include <../core.scad>
include <../vitamins/belts.scad>
include <../vitamins/screws.scad>
include <../vitamins/inserts.scad>
include <../vitamins/pulleys.scad> include <../vitamins/pulleys.scad>
use <../vitamins/insert.scad>
use <../utils/layout.scad> use <../utils/layout.scad>
module belt_test() { module belt_test() {
@@ -67,7 +65,7 @@ module belt_test() {
translate([-25, 0]) translate([-25, 0])
layout([for(b = belts) belt_width(b)], 10) layout([for(b = belts) belt_width(b)], 10)
rotate([0, 90, 0]) rotate([0, 90, 0])
belt(belts[$i], [[0, 0, 20], [0, 1, 20]]); belt(belts[$i], [[0, 0, 20], [0, 1, 20]], belt_colour = $i%2==0 ? grey90 : grey20, tooth_colour = $i%2==0 ? grey70 : grey50);
} }
if($preview) if($preview)

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../utils/bezier.scad> use <../utils/bezier.scad>
use <../utils/sweep.scad> use <../utils/sweep.scad>
use <../utils/annotation.scad> use <../utils/annotation.scad>

View File

@@ -19,7 +19,6 @@
include <../core.scad> include <../core.scad>
use <../utils/layout.scad> use <../utils/layout.scad>
include <../vitamins/screws.scad>
include <../vitamins/blowers.scad> include <../vitamins/blowers.scad>
module blowers() module blowers()

View File

@@ -21,9 +21,8 @@
//! BOM and assembly demonstration //! BOM and assembly demonstration
// //
include <../core.scad> include <../core.scad>
include <../vitamins/screws.scad>
include <../vitamins/inserts.scad>
include <../vitamins/sheets.scad> include <../vitamins/sheets.scad>
use <../vitamins/insert.scad>
$explode = 1; // Normally set on the command line when generating assembly views with views.py $explode = 1; // Normally set on the command line when generating assembly views with views.py
screw = M3_cap_screw; screw = M3_cap_screw;

View File

@@ -18,9 +18,8 @@
// //
include <../core.scad> include <../core.scad>
include <../vitamins/screws.scad>
include <../vitamins/sheets.scad> include <../vitamins/sheets.scad>
include <../vitamins/inserts.scad> use <../vitamins/insert.scad>
use <../printed/box.scad> use <../printed/box.scad>

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../utils/layout.scad> use <../utils/layout.scad>
include <../vitamins/bulldogs.scad> include <../vitamins/bulldogs.scad>

View File

@@ -18,9 +18,8 @@
// //
include <../core.scad> include <../core.scad>
include <../vitamins/screws.scad>
include <../vitamins/sheets.scad> include <../vitamins/sheets.scad>
include <../vitamins/inserts.scad> use <../vitamins/insert.scad>
include <../printed/butt_box.scad> include <../printed/butt_box.scad>

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../utils/layout.scad> use <../utils/layout.scad>
include <../vitamins/buttons.scad> include <../vitamins/buttons.scad>

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../printed/cable_grommets.scad> use <../printed/cable_grommets.scad>

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../vitamins/cable_strip.scad> use <../vitamins/cable_strip.scad>

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../printed/carriers.scad> use <../printed/carriers.scad>
module carriers() module carriers()

View File

@@ -17,7 +17,7 @@
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
module clips() { module clips() {
clip(xmin = 0, ymin = 0, zmin = 0, zmax = 40) sphere(50); clip(xmin = 0, ymin = 0, zmin = 0, zmax = 40) sphere(50);

View File

@@ -19,7 +19,6 @@
include <../core.scad> include <../core.scad>
use <../utils/layout.scad> use <../utils/layout.scad>
include <../vitamins/screws.scad>
include <../vitamins/components.scad> include <../vitamins/components.scad>
module resistors() module resistors()

View File

@@ -19,8 +19,6 @@
include <../core.scad> include <../core.scad>
use <../printed/corner_block.scad> use <../printed/corner_block.scad>
include <../vitamins/screws.scad>
screws = [M2_cap_screw, M2p5_pan_screw, M3_dome_screw, M4_dome_screw]; screws = [M2_cap_screw, M2p5_pan_screw, M3_dome_screw, M4_dome_screw];
module do_corner_block(screw) module do_corner_block(screw)

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../utils/layout.scad> use <../utils/layout.scad>
include <../vitamins/d_connectors.scad> include <../vitamins/d_connectors.scad>
@@ -35,4 +35,5 @@ module d_connectors()
} }
if($preview) if($preview)
d_connectors(); let($show_threads = true)
d_connectors();

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../printed/door_hinge.scad> use <../printed/door_hinge.scad>
include <../vitamins/sheets.scad> include <../vitamins/sheets.scad>

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../printed/door_latch.scad> use <../printed/door_latch.scad>
module door_latches() module door_latches()

View File

@@ -0,0 +1,65 @@
//
// NopSCADlib Copyright Chris Palmer 2020
// 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 <../utils/core/core.scad>
include <../vitamins/extrusion_brackets.scad>
include <../vitamins/extrusions.scad>
include <../vitamins/washers.scad>
include <../vitamins/nuts.scad>
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);
eWidth = extrusion_width(E2020);
if(examples) {
translate([20, 60, 10]) rotate([90, 0, 180]) {
extrusion_inner_corner_bracket(E20_inner_corner_bracket);
translate([-eWidth / 2, 0, 0])
rotate([-90, 0, 0])
extrusion(E2020, 20, false);
translate([-eWidth, -eWidth / 2, 0])
rotate([0, 90, 0])
extrusion(E2020, 40, false);
}
translate([100, 60, 10]) rotate([90, 0, 180]) {
extrusion_corner_bracket_assembly(E20_corner_bracket);
translate([-eWidth / 2, 0, 0])
rotate([-90, 0, 0])
extrusion(E2020, 30, false);
translate([-eWidth, -eWidth / 2, 0])
rotate([0, 90, 0])
extrusion(E2020, 50, false);
}
}
}
if($preview)
extrusion_brackets(true);

29
tests/extrusions.scad Normal file
View File

@@ -0,0 +1,29 @@
//
// NopSCADlib Copyright Chris Palmer 2020
// 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 <../utils/core/core.scad>
use <../utils/layout.scad>
include <../vitamins/extrusions.scad>
module extrusions()
layout([for(e = extrusions) extrusion_width(e)], 10)
extrusion(extrusions[$i], 80, cornerHole = extrusion_width(extrusions[$i]) > 20);
if ($preview)
extrusions();

View File

@@ -17,11 +17,11 @@
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../core.scad>
use <../utils/layout.scad>
include <../printed/fan_guard.scad> include <../printed/fan_guard.scad>
include <../vitamins/fans.scad> include <../vitamins/fans.scad>
use <../utils/layout.scad>
module fan_guards() module fan_guards()
layout([for(f = fans) fan_width(f)], 10) layout([for(f = fans) fan_width(f)], 10)
color(pp1_colour) fan_guard(fans[$i], spokes = fan_width(fans[$i]) > 60 ? 8 : 4); color(pp1_colour) fan_guard(fans[$i], spokes = fan_width(fans[$i]) > 60 ? 8 : 4);

View File

@@ -17,11 +17,11 @@
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../core.scad>
use <../utils/layout.scad> include <../vitamins/fans.scad>
include <../printed/fan_guard.scad> include <../printed/fan_guard.scad>
include <../vitamins/fans.scad> use <../utils/layout.scad>
module fans() module fans()
layout([for(f = fans) fan_width(f)], 10) layout([for(f = fans) fan_width(f)], 10)

View File

@@ -20,8 +20,6 @@ include <../core.scad>
use <../printed/fixing_block.scad> use <../printed/fixing_block.scad>
use <../utils/layout.scad> use <../utils/layout.scad>
include <../vitamins/screws.scad>
screws = [M2_cap_screw, M2p5_pan_screw, M3_dome_screw, M4_dome_screw]; screws = [M2_cap_screw, M2p5_pan_screw, M3_dome_screw, M4_dome_screw];
module fixing_block_test(screw) module fixing_block_test(screw)

View File

@@ -17,7 +17,6 @@
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../core.scad>
include <../vitamins/screws.scad>
use <../utils/layout.scad> use <../utils/layout.scad>
use <../printed/flat_hinge.scad> use <../printed/flat_hinge.scad>

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../printed/foot.scad> use <../printed/foot.scad>
module feet() module feet()

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../vitamins/fuseholder.scad> use <../vitamins/fuseholder.scad>

View File

@@ -17,7 +17,7 @@
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
module globals() { module globals() {
linear_extrude(height = eps) { linear_extrude(height = eps) {

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../printed/handle.scad> use <../printed/handle.scad>
module handle() module handle()

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../utils/layout.scad> use <../utils/layout.scad>
include <../vitamins/hot_ends.scad> include <../vitamins/hot_ends.scad>

View File

@@ -17,10 +17,10 @@
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../core.scad>
use <../utils/layout.scad>
include <../vitamins/iecs.scad> include <../vitamins/iecs.scad>
use <../utils/layout.scad>
module iecs() module iecs()
layout([for(i = iecs) iec_flange_h(i)], 10) layout([for(i = iecs) iec_flange_h(i)], 10)
rotate(90) rotate(90)

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../utils/layout.scad> use <../utils/layout.scad>
include <../vitamins/inserts.scad> include <../vitamins/inserts.scad>
@@ -37,4 +37,5 @@ module inserts() {
} }
if($preview) if($preview)
inserts(); let($show_threads = true)
inserts();

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib. // You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
// //
include <../core.scad> include <../utils/core/core.scad>
use <../vitamins/jack.scad> use <../vitamins/jack.scad>

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