Compare commits
119 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
fd8712d6bf | ||
|
b6a32b6b41 | ||
|
0738893510 | ||
|
849bc479cc | ||
|
86d7e0f124 | ||
|
c897060726 | ||
|
b2c2fc668b | ||
|
4914f90994 | ||
|
2210396234 | ||
|
2eef050f60 | ||
|
23a64f238d | ||
|
a8422a6aa6 | ||
|
b56ddea1e3 | ||
|
c16a1c3804 | ||
|
245b158f1d | ||
|
60628dfec0 | ||
|
f7db793c74 | ||
|
53292c9f89 | ||
|
bd60b50b09 | ||
|
4d51cb73f3 | ||
|
3b77c97532 | ||
|
4442042197 | ||
|
4e233e5e9d | ||
|
675953d334 | ||
|
9527fa1c1f | ||
|
3f209cbdd3 | ||
|
7b76aceaad | ||
|
4edd08977f | ||
|
a1d385f9ec | ||
|
fc17b52518 | ||
|
9fbdb82991 | ||
|
7706716fa2 | ||
|
c815c1592d | ||
|
e32ef88c90 | ||
|
702c450a27 | ||
|
343351155c | ||
|
c41b1fa115 | ||
|
1a197ac823 | ||
|
ab592e049c | ||
|
9b104e4fe7 | ||
|
f0b4d767e9 | ||
|
82baed4c8f | ||
|
acb2cb2a48 | ||
|
cf94972b18 | ||
|
7c0a48d0c1 | ||
|
a5a640e273 | ||
|
95c4359421 | ||
|
bcff26a27b | ||
|
07b00fabe0 | ||
|
8ed0f3c1af | ||
|
0e8e387d35 | ||
|
0c17620adb | ||
|
6470f1b004 | ||
|
29ba402530 | ||
|
aed4a699f2 | ||
|
10b846c0d5 | ||
|
2de479d691 | ||
|
054dab5025 | ||
|
b559319b03 | ||
|
a487ca0f20 | ||
|
a2ce3f1278 | ||
|
01eb6931d9 | ||
|
c09a74b4c9 | ||
|
aab7f3d683 | ||
|
ad719dad5a | ||
|
00690b61d2 | ||
|
1a24e0d87e | ||
|
171c9a6a34 | ||
|
8bb4b3881e | ||
|
79f8bc66e1 | ||
|
33c9d158ef | ||
|
d2874a0531 | ||
|
b6fd795a25 | ||
|
ad0882db40 | ||
|
8afb08aaa4 | ||
|
e87dffd92c | ||
|
c364bf06b2 | ||
|
1668f9c54c | ||
|
e0dd174010 | ||
|
f104bd42e5 | ||
|
8342ba87e9 | ||
|
0e58e92fbc | ||
|
1af2e18594 | ||
|
598527edbe | ||
|
9c666f8f47 | ||
|
bc1f135e40 | ||
|
ce36729e50 | ||
|
1dca024e64 | ||
|
c1833f0820 | ||
|
6a7f7dcbbf | ||
|
5d3f1115bb | ||
|
9f9adeb6ca | ||
|
f9b06c855c | ||
|
05bfe9b159 | ||
|
f961874ce3 | ||
|
7a6210f442 | ||
|
5bae0aaa51 | ||
|
8649d59e8a | ||
|
e9bc300b8d | ||
|
dcb1e74894 | ||
|
42b9479094 | ||
|
f46f35e909 | ||
|
0513b151b2 | ||
|
dcf258f11a | ||
|
4ff6c7d0a8 | ||
|
2edb6d4df2 | ||
|
26e8497018 | ||
|
bfde879ce2 | ||
|
4641e3a642 | ||
|
42cfed8846 | ||
|
8c339a18c4 | ||
|
065ec0a430 | ||
|
e7eea0520c | ||
|
5cb994b58b | ||
|
573425055a | ||
|
66a7a9bfe0 | ||
|
0335545334 | ||
|
66a8d1d583 | ||
|
ad3e8d85af |
20
core.scad
@@ -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"));
|
|
||||||
}
|
|
||||||
|
@@ -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.
|
||||||
|
|
||||||
@@ -233,3 +233,20 @@ Vitamins are only ever previewed, so they are optimised to draw quickly in F5 an
|
|||||||
In OpenCSG 3D difference and intersection are relatively slow and the negative volumes interfere with nearby objects when they are composed into assemblies. For this reason as much
|
In OpenCSG 3D difference and intersection are relatively slow and the negative volumes interfere with nearby objects when they are composed into assemblies. For this reason as much
|
||||||
as possible is done by unioning primitives and extruded 2D shapes. Any 3D differences or intersections are wrapped in ```render()``` so that CGAL will compute a polyhedron
|
as possible is done by unioning primitives and extruded 2D shapes. Any 3D differences or intersections are wrapped in ```render()``` so that CGAL will compute a polyhedron
|
||||||
that is cached and reused. This will be very slow the first time it renders but very fast afterwards.
|
that is cached and reused. This will be very slow the first time it renders but very fast afterwards.
|
||||||
|
|
||||||
|
### Multiple configurations
|
||||||
|
|
||||||
|
Some parametric designs might have several configurations, for example a 3D printer with different size options. If several configurations need to be supported at the
|
||||||
|
same time multiple sets of BOMS, STLS and DXFs need to be generated in separate diectories. NopSCADlib supports this by having multiple configuration files named
|
||||||
|
```config_<target_name>.scad```. All the scripts take an optional first parameter that selects one of these config files by specifying ```target_name```.
|
||||||
|
|
||||||
|
The target config file is selected by generating ```target.scad``` that includes ```config_<target_name>.scad```.
|
||||||
|
The rest of the project includes ```target.scad``` to use the configuration.
|
||||||
|
Additionally all the generated file directories (assemblies, bom, stls, dxfs, etc.) are placed in a sub-directory called ```<target_name>```.
|
||||||
|
|
||||||
|
### Other libraries
|
||||||
|
|
||||||
|
The build scripts need to be able to locate the source files where the modules to generate the STL files and assemblies reside. They will search all the scad files
|
||||||
|
in the project plus any ```printed``` directories outside the project. This covers the printed parts in NopSCADlib but also allows other libraries of printed parts.
|
||||||
|
|
||||||
|
Other libraries of vitamins and utilities can be used provided they follow the same convensions of NopSCADlib. The build scripts don't need to search those.
|
||||||
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 179 KiB After Width: | Height: | Size: 200 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 124 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 134 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
@@ -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 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 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** |
|
||||||
| . | . | . | 2 | 2 | 4mm shielded jack socket blue |
|
| . | . | . | 2 | 2 | 4mm shielded jack socket blue |
|
||||||
| . | . | . | 1 | 1 | 4mm shielded jack socket brown |
|
| . | . | . | 1 | 1 | 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 |
|
||||||
|--|
|
|---|
|
||||||
| 
|
| 
|
||||||
|
|
||||||
|
|
||||||
@@ -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 |
|
||||||
|--|
|
|---|
|
||||||
| 
|
| 
|
||||||
|
|
||||||
|
|
||||||
@@ -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 |
|
||||||
|--|
|
|---|
|
||||||
| 
|
| 
|
||||||
|
|
||||||
|
|
||||||
@@ -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 |
|
||||||
|--|
|
|---|
|
||||||
| 
|
| 
|
||||||
|
|
||||||
|
|
||||||
@@ -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 |
|
||||||
|--|
|
|---|
|
||||||
| 
|
| 
|
||||||
|
|
||||||
|
|
||||||
|
@@ -35,7 +35,14 @@ $extrusion_width = 0.5;
|
|||||||
$pp1_colour = "dimgrey";
|
$pp1_colour = "dimgrey";
|
||||||
$pp2_colour = [0.9, 0.9, 0.9];
|
$pp2_colour = [0.9, 0.9, 0.9];
|
||||||
|
|
||||||
include <NopSCADlib/lib.scad>
|
include <NopSCADlib/core.scad>
|
||||||
|
include <NopSCADlib/vitamins/iecs.scad>
|
||||||
|
include <NopSCADlib/vitamins/mains_sockets.scad>
|
||||||
|
include <NopSCADlib/vitamins/tubings.scad>
|
||||||
|
|
||||||
|
use <NopSCADlib/vitamins/insert.scad>
|
||||||
|
use <NopSCADlib/vitamins/wire.scad>
|
||||||
|
use <NopSCADlib/vitamins/jack.scad>
|
||||||
use <NopSCADlib/printed/foot.scad>
|
use <NopSCADlib/printed/foot.scad>
|
||||||
|
|
||||||
echo(extrusion_width = extrusion_width, layer_height = layer_height);
|
echo(extrusion_width = extrusion_width, layer_height = layer_height);
|
||||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 107 KiB |
BIN
gallery/EnviroPlus.png
Normal file
After Width: | Height: | Size: 121 KiB |
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 179 KiB |
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 169 KiB |
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 280 KiB |
Before Width: | Height: | Size: 291 KiB After Width: | Height: | Size: 291 KiB |
Before Width: | Height: | Size: 286 KiB After Width: | Height: | Size: 287 KiB |
Before Width: | Height: | Size: 230 KiB After Width: | Height: | Size: 230 KiB |
Before Width: | Height: | Size: 206 KiB After Width: | Height: | Size: 205 KiB |
Before Width: | Height: | Size: 207 KiB After Width: | Height: | Size: 207 KiB |
Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 198 KiB |
@@ -6,6 +6,13 @@ Arduino thermostat to control a beer fridge to use it as an environmental chambe
|
|||||||

|

|
||||||
|
|
||||||
|
|
||||||
|
<a name="TOP"></a>
|
||||||
|
## EnviroPlus
|
||||||
|
Environmental monitor using Enviro+ sensor board and a Raspberry Pi Zero.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
<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.
|
||||||
|
@@ -34,7 +34,7 @@ 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
|
||||||
@@ -60,7 +60,8 @@ 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 = [255/255, 215/255, 0/255];
|
gold = [255/255, 215/255, 0/255];
|
||||||
|
brass = [255/255, 220/255, 100/255];
|
||||||
silver = [0.75, 0.75, 0.75];
|
silver = [0.75, 0.75, 0.75];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
66
lib.scad
@@ -22,49 +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>
|
|
||||||
include <vitamins/extrusions.scad>
|
|
||||||
include <vitamins/sk_brackets.scad>
|
|
||||||
include <vitamins/scs_bearing_blocks.scad>
|
|
||||||
|
|
||||||
use <vitamins/jack.scad>
|
use <vitamins/jack.scad>
|
||||||
use <vitamins/meter.scad>
|
use <vitamins/meter.scad>
|
||||||
|
BIN
libtest.png
Before Width: | Height: | Size: 766 KiB After Width: | Height: | Size: 786 KiB |
82
libtest.scad
@@ -33,16 +33,18 @@ 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/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>
|
||||||
use <tests/hot_ends.scad>
|
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/LDRs.scad>
|
||||||
use <tests/ldrs.scad>
|
use <tests/LEDs.scad>
|
||||||
use <tests/light_strips.scad>
|
use <tests/light_strips.scad>
|
||||||
use <tests/linear_bearings.scad>
|
use <tests/linear_bearings.scad>
|
||||||
use <tests/meter.scad>
|
use <tests/meter.scad>
|
||||||
@@ -51,20 +53,22 @@ use <tests/modules.scad>
|
|||||||
use <tests/nuts.scad>
|
use <tests/nuts.scad>
|
||||||
use <tests/o_ring.scad>
|
use <tests/o_ring.scad>
|
||||||
use <tests/opengrab.scad>
|
use <tests/opengrab.scad>
|
||||||
use <tests/pcbs.scad>
|
use <tests/PCBs.scad>
|
||||||
use <tests/pillars.scad>
|
use <tests/pillars.scad>
|
||||||
use <tests/psus.scad>
|
use <tests/PSUs.scad>
|
||||||
use <tests/pulleys.scad>
|
use <tests/pulleys.scad>
|
||||||
use <tests/rails.scad>
|
use <tests/rails.scad>
|
||||||
use <tests/ring_terminals.scad>
|
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>
|
||||||
use <tests/stepper_motors.scad>
|
use <tests/stepper_motors.scad>
|
||||||
use <tests/toggles.scad>
|
use <tests/toggles.scad>
|
||||||
use <tests/transformers.scad>
|
use <tests/transformers.scad>
|
||||||
@@ -83,18 +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>
|
|
||||||
use <tests/pcb_mount.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;
|
||||||
|
|
||||||
@@ -133,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, 1260])
|
translate([890, 730])
|
||||||
|
printed_boxes();
|
||||||
|
|
||||||
|
|
||||||
|
translate([850, 1300])
|
||||||
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 + 100;
|
washers_y = nuts_y + 120;
|
||||||
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;
|
||||||
@@ -204,10 +219,6 @@ translate([x0, linear_bearings_y]) {
|
|||||||
rods();
|
rods();
|
||||||
}
|
}
|
||||||
|
|
||||||
translate([x0+150, linear_bearings_y+30]) {
|
|
||||||
extrusions();
|
|
||||||
}
|
|
||||||
|
|
||||||
translate([x0 + 10, hot_ends_y])
|
translate([x0 + 10, hot_ends_y])
|
||||||
hot_ends();
|
hot_ends();
|
||||||
|
|
||||||
@@ -236,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;
|
||||||
|
|
||||||
@@ -246,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;
|
||||||
@@ -293,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;
|
||||||
@@ -303,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();
|
||||||
@@ -343,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 + 150, belts_y + 58]) {
|
||||||
belt_test();
|
belt_test();
|
||||||
|
|
||||||
translate([0, 60])
|
translate([0, 60])
|
||||||
@@ -362,9 +376,21 @@ translate([x4 + 112, belts_y + 58]) {
|
|||||||
translate([x4, rails_y + 130])
|
translate([x4, rails_y + 130])
|
||||||
rails();
|
rails();
|
||||||
|
|
||||||
translate([x4, cable_strips_y])
|
translate([900, fans_y + 50])
|
||||||
cable_strips();
|
cable_strips();
|
||||||
|
|
||||||
x6 = x5 + 150;
|
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();
|
||||||
|
|
||||||
|
|
||||||
translate([x6, 125])
|
translate([x6, 125])
|
||||||
light_strips();
|
light_strips();
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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");
|
||||||
|
@@ -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>
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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()
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
@@ -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];
|
||||||
|
@@ -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
|
||||||
|
@@ -22,7 +22,6 @@
|
|||||||
//! The stl must be given a parameterless wrapper in the project that uses it.
|
//! The stl must be given a parameterless wrapper in the project that uses it.
|
||||||
//
|
//
|
||||||
include <../core.scad>
|
include <../core.scad>
|
||||||
include <../vitamins/screws.scad>
|
|
||||||
use <../vitamins/pcb.scad>
|
use <../vitamins/pcb.scad>
|
||||||
|
|
||||||
clearance = 0.2;
|
clearance = 0.2;
|
||||||
|
229
printed/printed_box.scad
Normal 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° 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));
|
||||||
|
}
|
@@ -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>
|
||||||
@@ -144,7 +143,7 @@ module psu_shroud(type, cable_d, name, cables = 1) { //! Generate the STL file f
|
|||||||
}
|
}
|
||||||
|
|
||||||
module psu_shroud_assembly(type, cable_d, name, cables = 1) //! The printed parts with inserts fitted
|
module psu_shroud_assembly(type, cable_d, name, cables = 1) //! The printed parts with inserts fitted
|
||||||
assembly(str("psu_shroud_", name)) {
|
assembly(str("PSU_shroud_", name)) {
|
||||||
|
|
||||||
translate_z(psu_shroud_height(type))
|
translate_z(psu_shroud_height(type))
|
||||||
vflip()
|
vflip()
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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)
|
||||||
|
@@ -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>
|
||||||
@@ -108,7 +107,7 @@ module ssr_shroud(type, cable_d, name) { //! Generate the STL file for a spec
|
|||||||
}
|
}
|
||||||
|
|
||||||
module ssr_shroud_assembly(type, cable_d, name) //! The printed parts with inserts fitted
|
module ssr_shroud_assembly(type, cable_d, name) //! The printed parts with inserts fitted
|
||||||
assembly(str("ssr_shroud_", name)) {
|
assembly(str("SSR_shroud_", name)) {
|
||||||
|
|
||||||
translate_z(ssr_shroud_height(type))
|
translate_z(ssr_shroud_height(type))
|
||||||
vflip()
|
vflip()
|
||||||
|
@@ -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;
|
||||||
|
530
readme.md
@@ -17,37 +17,29 @@ See [usage](docs/usage.md) for requirements, installation instructions and a usa
|
|||||||
|
|
||||||
## Table of Contents<a name="top"/>
|
## Table of Contents<a name="top"/>
|
||||||
<table><tr>
|
<table><tr>
|
||||||
<th align="left"> Vitamins A-M </th><th align="left"> Vitamins N-Z </th><th align="left"> Printed </th><th align="left"> Utilities </th><th align="left"> Core Utilities </th></tr>
|
<th align="left"> Vitamins A-J </th><th align="left"> Vitamins K-Q </th><th align="left"> Vitamins R-Z </th><th align="left"> Printed </th><th align="left"> Utilities </th><th align="left"> Core Utilities </th></tr>
|
||||||
<tr><td> <a href = "#Ball_bearings">Ball_bearings</a> </td><td> <a href = "#Nuts">Nuts</a> </td><td> <a href = "#Box">Box</a> </td><td> <a href = "#Annotation">Annotation</a> </td><td> <a href = "#Bom">Bom</a> </td></tr>
|
<tr><td> <a href = "#Ball_bearings">Ball_bearings</a> </td><td> <a href = "#KP_pillow_blocks">KP_pillow_blocks</a> </td><td> <a href = "#Rails">Rails</a> </td><td> <a href = "#Box">Box</a> </td><td> <a href = "#Annotation">Annotation</a> </td><td> <a href = "#BOM">BOM</a> </td></tr>
|
||||||
<tr><td> <a href = "#Batteries">Batteries</a> </td><td> <a href = "#O_ring">O_ring</a> </td><td> <a href = "#Butt_box">Butt_box</a> </td><td> <a href = "#Bezier">Bezier</a> </td><td> <a href = "#Clip">Clip</a> </td></tr>
|
<tr><td> <a href = "#Batteries">Batteries</a> </td><td> <a href = "#LDRs">LDRs</a> </td><td> <a href = "#Ring_terminals">Ring_terminals</a> </td><td> <a href = "#Butt_box">Butt_box</a> </td><td> <a href = "#Bezier">Bezier</a> </td><td> <a href = "#Clip">Clip</a> </td></tr>
|
||||||
<tr><td> <a href = "#Belts">Belts</a> </td><td> <a href = "#Opengrab">Opengrab</a> </td><td> <a href = "#Cable_grommets">Cable_grommets</a> </td><td> <a href = "#Dogbones">Dogbones</a> </td><td> <a href = "#Global">Global</a> </td></tr>
|
<tr><td> <a href = "#Belts">Belts</a> </td><td> <a href = "#LEDs">LEDs</a> </td><td> <a href = "#Rockers">Rockers</a> </td><td> <a href = "#Cable_grommets">Cable_grommets</a> </td><td> <a href = "#Dogbones">Dogbones</a> </td><td> <a href = "#Global">Global</a> </td></tr>
|
||||||
<tr><td> <a href = "#Blowers">Blowers</a> </td><td> <a href = "#Pcbs">Pcbs</a> </td><td> <a href = "#Carriers">Carriers</a> </td><td> <a href = "#Fillet">Fillet</a> </td><td> <a href = "#Polyholes">Polyholes</a> </td></tr>
|
<tr><td> <a href = "#Blowers">Blowers</a> </td><td> <a href = "#Leadnuts">Leadnuts</a> </td><td> <a href = "#Rod">Rod</a> </td><td> <a href = "#Carriers">Carriers</a> </td><td> <a href = "#Fillet">Fillet</a> </td><td> <a href = "#Polyholes">Polyholes</a> </td></tr>
|
||||||
<tr><td> <a href = "#Bulldogs">Bulldogs</a> </td><td> <a href = "#Pillars">Pillars</a> </td><td> <a href = "#Corner_block">Corner_block</a> </td><td> <a href = "#Hanging_hole">Hanging_hole</a> </td><td> <a href = "#Rounded_rectangle">Rounded_rectangle</a> </td></tr>
|
<tr><td> <a href = "#Bulldogs">Bulldogs</a> </td><td> <a href = "#Light_strips">Light_strips</a> </td><td> <a href = "#SCS_bearing_blocks">SCS_bearing_blocks</a> </td><td> <a href = "#Corner_block">Corner_block</a> </td><td> <a href = "#Hanging_hole">Hanging_hole</a> </td><td> <a href = "#Rounded_rectangle">Rounded_rectangle</a> </td></tr>
|
||||||
<tr><td> <a href = "#Buttons">Buttons</a> </td><td> <a href = "#Pin_headers">Pin_headers</a> </td><td> <a href = "#Door_hinge">Door_hinge</a> </td><td> <a href = "#Layout">Layout</a> </td><td> <a href = "#Sphere">Sphere</a> </td></tr>
|
<tr><td> <a href = "#Buttons">Buttons</a> </td><td> <a href = "#Linear_bearings">Linear_bearings</a> </td><td> <a href = "#SK_brackets">SK_brackets</a> </td><td> <a href = "#Door_hinge">Door_hinge</a> </td><td> <a href = "#Layout">Layout</a> </td><td> <a href = "#Sphere">Sphere</a> </td></tr>
|
||||||
<tr><td> <a href = "#Cable_strips">Cable_strips</a> </td><td> <a href = "#Psus">Psus</a> </td><td> <a href = "#Door_latch">Door_latch</a> </td><td> <a href = "#Maths">Maths</a> </td><td> <a href = "#Teardrops">Teardrops</a> </td></tr>
|
<tr><td> <a href = "#Cable_strips">Cable_strips</a> </td><td> <a href = "#Mains_sockets">Mains_sockets</a> </td><td> <a href = "#SSRs">SSRs</a> </td><td> <a href = "#Door_latch">Door_latch</a> </td><td> <a href = "#Maths">Maths</a> </td><td> <a href = "#Teardrops">Teardrops</a> </td></tr>
|
||||||
<tr><td> <a href = "#Components">Components</a> </td><td> <a href = "#Pulleys">Pulleys</a> </td><td> <a href = "#Fan_guard">Fan_guard</a> </td><td> <a href = "#Offset">Offset</a> </td><td></td></tr>
|
<tr><td> <a href = "#Components">Components</a> </td><td> <a href = "#Meter">Meter</a> </td><td> <a href = "#Screws">Screws</a> </td><td> <a href = "#Fan_guard">Fan_guard</a> </td><td> <a href = "#Offset">Offset</a> </td><td></td></tr>
|
||||||
<tr><td> <a href = "#D_connectors">D_connectors</a> </td><td> <a href = "#Rails">Rails</a> </td><td> <a href = "#Fixing_block">Fixing_block</a> </td><td> <a href = "#Quadrant">Quadrant</a> </td><td></td></tr>
|
<tr><td> <a href = "#D_connectors">D_connectors</a> </td><td> <a href = "#Microswitches">Microswitches</a> </td><td> <a href = "#Sealing_strip">Sealing_strip</a> </td><td> <a href = "#Fixing_block">Fixing_block</a> </td><td> <a href = "#Quadrant">Quadrant</a> </td><td></td></tr>
|
||||||
<tr><td> <a href = "#Displays">Displays</a> </td><td> <a href = "#Ring_terminals">Ring_terminals</a> </td><td> <a href = "#Flat_hinge">Flat_hinge</a> </td><td> <a href = "#Round">Round</a> </td><td></td></tr>
|
<tr><td> <a href = "#Displays">Displays</a> </td><td> <a href = "#Microview">Microview</a> </td><td> <a href = "#Sheets">Sheets</a> </td><td> <a href = "#Flat_hinge">Flat_hinge</a> </td><td> <a href = "#Round">Round</a> </td><td></td></tr>
|
||||||
<tr><td> <a href = "#Extrusions">Extrusions</a> </td><td> <a href = "#Rockers">Rockers</a> </td><td> <a href = "#Foot">Foot</a> </td><td> <a href = "#Rounded_cylinder">Rounded_cylinder</a> </td><td></td></tr>
|
<tr><td> <a href = "#Extrusion_brackets">Extrusion_brackets</a> </td><td> <a href = "#Modules">Modules</a> </td><td> <a href = "#Spades">Spades</a> </td><td> <a href = "#Foot">Foot</a> </td><td> <a href = "#Rounded_cylinder">Rounded_cylinder</a> </td><td></td></tr>
|
||||||
<tr><td> <a href = "#Fans">Fans</a> </td><td> <a href = "#Rod">Rod</a> </td><td> <a href = "#Handle">Handle</a> </td><td> <a href = "#Rounded_polygon">Rounded_polygon</a> </td><td></td></tr>
|
<tr><td> <a href = "#Extrusions">Extrusions</a> </td><td> <a href = "#Nuts">Nuts</a> </td><td> <a href = "#Spools">Spools</a> </td><td> <a href = "#Handle">Handle</a> </td><td> <a href = "#Rounded_polygon">Rounded_polygon</a> </td><td></td></tr>
|
||||||
<tr><td> <a href = "#Fuseholder">Fuseholder</a> </td><td> <a href = "#Screws">Screws</a> </td><td> <a href = "#Pcb_mount">Pcb_mount</a> </td><td> <a href = "#Sector">Sector</a> </td><td></td></tr>
|
<tr><td> <a href = "#Fans">Fans</a> </td><td> <a href = "#O_ring">O_ring</a> </td><td> <a href = "#Springs">Springs</a> </td><td> <a href = "#PCB_mount">PCB_mount</a> </td><td> <a href = "#Sector">Sector</a> </td><td></td></tr>
|
||||||
<tr><td> <a href = "#Geared_steppers">Geared_steppers</a> </td><td> <a href = "#Scs_bearing_blocks">Scs_bearing_blocks</a> </td><td> <a href = "#Psu_shroud">Psu_shroud</a> </td><td> <a href = "#Sweep">Sweep</a> </td><td></td></tr>
|
<tr><td> <a href = "#Fuseholder">Fuseholder</a> </td><td> <a href = "#Opengrab">Opengrab</a> </td><td> <a href = "#Stepper_motors">Stepper_motors</a> </td><td> <a href = "#PSU_shroud">PSU_shroud</a> </td><td> <a href = "#Sweep">Sweep</a> </td><td></td></tr>
|
||||||
<tr><td> <a href = "#Green_terminals">Green_terminals</a> </td><td> <a href = "#Sealing_strip">Sealing_strip</a> </td><td> <a href = "#Ribbon_clamp">Ribbon_clamp</a> </td><td> <a href = "#Thread">Thread</a> </td><td></td></tr>
|
<tr><td> <a href = "#Geared_steppers">Geared_steppers</a> </td><td> <a href = "#PCB">PCB</a> </td><td> <a href = "#Toggles">Toggles</a> </td><td> <a href = "#Printed_box">Printed_box</a> </td><td> <a href = "#Thread">Thread</a> </td><td></td></tr>
|
||||||
<tr><td> <a href = "#Hot_ends">Hot_ends</a> </td><td> <a href = "#Sheets">Sheets</a> </td><td> <a href = "#Screw_knob">Screw_knob</a> </td><td> <a href = "#Tube">Tube</a> </td><td></td></tr>
|
<tr><td> <a href = "#Green_terminals">Green_terminals</a> </td><td> <a href = "#PCBs">PCBs</a> </td><td> <a href = "#Transformers">Transformers</a> </td><td> <a href = "#Ribbon_clamp">Ribbon_clamp</a> </td><td> <a href = "#Tube">Tube</a> </td><td></td></tr>
|
||||||
<tr><td> <a href = "#Hygrometer">Hygrometer</a> </td><td> <a href = "#Sk_brackets">Sk_brackets</a> </td><td> <a href = "#Socket_box">Socket_box</a> </td><td></td><td></td></tr>
|
<tr><td> <a href = "#Hot_ends">Hot_ends</a> </td><td> <a href = "#PSUs">PSUs</a> </td><td> <a href = "#Tubings">Tubings</a> </td><td> <a href = "#SSR_shroud">SSR_shroud</a> </td><td></td><td></td></tr>
|
||||||
<tr><td> <a href = "#Iecs">Iecs</a> </td><td> <a href = "#Spades">Spades</a> </td><td> <a href = "#Ssr_shroud">Ssr_shroud</a> </td><td></td><td></td></tr>
|
<tr><td> <a href = "#Hygrometer">Hygrometer</a> </td><td> <a href = "#Pillars">Pillars</a> </td><td> <a href = "#Variacs">Variacs</a> </td><td> <a href = "#Screw_knob">Screw_knob</a> </td><td></td><td></td></tr>
|
||||||
<tr><td> <a href = "#Inserts">Inserts</a> </td><td> <a href = "#Spools">Spools</a> </td><td> <a href = "#Strap_handle">Strap_handle</a> </td><td></td><td></td></tr>
|
<tr><td> <a href = "#IECs">IECs</a> </td><td> <a href = "#Pin_headers">Pin_headers</a> </td><td> <a href = "#Veroboard">Veroboard</a> </td><td> <a href = "#Socket_box">Socket_box</a> </td><td></td><td></td></tr>
|
||||||
<tr><td> <a href = "#Jack">Jack</a> </td><td> <a href = "#Springs">Springs</a> </td><td></td><td></td><td></td></tr>
|
<tr><td> <a href = "#Inserts">Inserts</a> </td><td> <a href = "#Pulleys">Pulleys</a> </td><td> <a href = "#Washers">Washers</a> </td><td> <a href = "#Strap_handle">Strap_handle</a> </td><td></td><td></td></tr>
|
||||||
<tr><td> <a href = "#Ldrs">Ldrs</a> </td><td> <a href = "#Ssrs">Ssrs</a> </td><td></td><td></td><td></td></tr>
|
<tr><td> <a href = "#Jack">Jack</a> </td><td></td><td> <a href = "#Wire">Wire</a> </td><td></td><td></td><td></td></tr>
|
||||||
<tr><td> <a href = "#Leadnuts">Leadnuts</a> </td><td> <a href = "#Stepper_motors">Stepper_motors</a> </td><td></td><td></td><td></td></tr>
|
<tr><td></td><td></td><td> <a href = "#Zipties">Zipties</a> </td><td></td><td></td><td></td></tr>
|
||||||
<tr><td> <a href = "#Leds">Leds</a> </td><td> <a href = "#Toggles">Toggles</a> </td><td></td><td></td><td></td></tr>
|
|
||||||
<tr><td> <a href = "#Light_strips">Light_strips</a> </td><td> <a href = "#Transformers">Transformers</a> </td><td></td><td></td><td></td></tr>
|
|
||||||
<tr><td> <a href = "#Linear_bearings">Linear_bearings</a> </td><td> <a href = "#Tubings">Tubings</a> </td><td></td><td></td><td></td></tr>
|
|
||||||
<tr><td> <a href = "#Mains_sockets">Mains_sockets</a> </td><td> <a href = "#Variacs">Variacs</a> </td><td></td><td></td><td></td></tr>
|
|
||||||
<tr><td> <a href = "#Meter">Meter</a> </td><td> <a href = "#Veroboard">Veroboard</a> </td><td></td><td></td><td></td></tr>
|
|
||||||
<tr><td> <a href = "#Microswitches">Microswitches</a> </td><td> <a href = "#Washers">Washers</a> </td><td></td><td></td><td></td></tr>
|
|
||||||
<tr><td> <a href = "#Microview">Microview</a> </td><td> <a href = "#Wire">Wire</a> </td><td></td><td></td><td></td></tr>
|
|
||||||
<tr><td> <a href = "#Modules">Modules</a> </td><td> <a href = "#Zipties">Zipties</a> </td><td></td><td></td><td></td></tr>
|
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -93,8 +85,10 @@ Also single bearing balls are modelled as just a silver sphere and a BOM entry.
|
|||||||
| Qty | Module call | BOM entry |
|
| Qty | Module call | BOM entry |
|
||||||
| ---:|:--- |:---|
|
| ---:|:--- |:---|
|
||||||
| 1 | ```ball_bearing(BB608)``` | Ball bearing 608-2RS 8mm x 22mm x 7mm |
|
| 1 | ```ball_bearing(BB608)``` | Ball bearing 608-2RS 8mm x 22mm x 7mm |
|
||||||
|
| 1 | ```ball_bearing(BB6200)``` | Ball bearing 6200-2RS 10mm x 30mm x 9mm |
|
||||||
|
| 1 | ```ball_bearing(BB6201)``` | Ball bearing 6201-2RS 12mm x 32mm x 10mm |
|
||||||
| 1 | ```ball_bearing(BB624)``` | Ball bearing 624-2RS 4mm x 13mm x 5mm |
|
| 1 | ```ball_bearing(BB624)``` | Ball bearing 624-2RS 4mm x 13mm x 5mm |
|
||||||
| 2 | ``` bearing_ball(3)``` | Steel ball 3mm |
|
| 4 | ``` bearing_ball(3)``` | Steel ball 3mm |
|
||||||
|
|
||||||
|
|
||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
@@ -586,6 +580,54 @@ LCD dispays.
|
|||||||
| 1 | ```display(SSD1963_4p3)``` | LCD display SSD1963 4.3" |
|
| 1 | ```display(SSD1963_4p3)``` | LCD display SSD1963 4.3" |
|
||||||
|
|
||||||
|
|
||||||
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
|
---
|
||||||
|
<a name="Extrusion_brackets"></a>
|
||||||
|
## Extrusion_brackets
|
||||||
|
Brackets for joining extrusions at a corner.
|
||||||
|
|
||||||
|
|
||||||
|
[vitamins/extrusion_brackets.scad](vitamins/extrusion_brackets.scad) Object definitions.
|
||||||
|
|
||||||
|
[vitamins/extrusion_bracket.scad](vitamins/extrusion_bracket.scad) Implementation.
|
||||||
|
|
||||||
|
[tests/extrusion_brackets.scad](tests/extrusion_brackets.scad) Code for this example.
|
||||||
|
|
||||||
|
### Properties
|
||||||
|
| Function | Description |
|
||||||
|
|:--- |:--- |
|
||||||
|
| ```extrusion_corner_bracket_base_thickness(type)``` | Thickness of base of bracket |
|
||||||
|
| ```extrusion_corner_bracket_hole_offset(type)``` | Hole offset from corner |
|
||||||
|
| ```extrusion_corner_bracket_side_thickness(type)``` | Thickness of side of bracket |
|
||||||
|
| ```extrusion_corner_bracket_size(type)``` | Size of bracket |
|
||||||
|
| ```extrusion_inner_corner_bracket_size(type)``` | Size of inner bracket |
|
||||||
|
|
||||||
|
### Modules
|
||||||
|
| Module | Description |
|
||||||
|
|:--- |:--- |
|
||||||
|
| ```extrusion_corner_bracket(type)``` | Corner bracket for extrusion |
|
||||||
|
| ```extrusion_corner_bracket_assembly(type, part_thickness = 2, screw_type = M4_cap_screw, nut_type = M4_sliding_t_nut, max_screw_depth = 6)``` | Assembly with fasteners in place |
|
||||||
|
| ```extrusion_corner_bracket_hole_positions(type)``` | Place children at hole positions |
|
||||||
|
| ```extrusion_inner_corner_bracket(type, grub_screws = true)``` | Inner corner bracket for extrusion |
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Vitamins
|
||||||
|
| Qty | Module call | BOM entry |
|
||||||
|
| ---:|:--- |:---|
|
||||||
|
| 1 | ```extrusion(E2020, 20)``` | Extrusion E2020 x 20mm |
|
||||||
|
| 1 | ```extrusion(E2020, 30)``` | Extrusion E2020 x 30mm |
|
||||||
|
| 1 | ```extrusion(E2020, 40)``` | Extrusion E2020 x 40mm |
|
||||||
|
| 1 | ```extrusion(E2020, 50)``` | Extrusion E2020 x 50mm |
|
||||||
|
| 2 | ```extrusion_corner_bracket(E20_corner_bracket)``` | Extrusion corner bracket 20 |
|
||||||
|
| 2 | ```extrusion_inner_corner_bracket(E20_inner_corner_bracket, true)``` | Extrusion inner corner bracket 4.5 |
|
||||||
|
| 1 | ```extrusion_inner_corner_bracket(E20_inner_corner_bracket, false)``` | Extrusion inner corner bracket 4.5 |
|
||||||
|
| 4 | ```sliding_t_nut(M4_sliding_t_nut)``` | Nut M4 sliding T |
|
||||||
|
| 4 | ```screw(M4_cap_screw, 8)``` | Screw M4 cap x 8mm |
|
||||||
|
| 4 | ```washer(M4_washer)``` | Washer M4 x 9mm x 0.8mm |
|
||||||
|
|
||||||
|
|
||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -617,21 +659,22 @@ Aluminium extrusion.
|
|||||||
### Modules
|
### Modules
|
||||||
| Module | Description |
|
| Module | Description |
|
||||||
|:--- |:--- |
|
|:--- |:--- |
|
||||||
| ```extrusion(type, length, cornerHole = false)``` | Draw the specified extrusion |
|
| ```extrusion(type, length, center = true, cornerHole = false)``` | Draw the specified extrusion |
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Vitamins
|
### Vitamins
|
||||||
| Qty | Module call | BOM entry |
|
| Qty | Module call | BOM entry |
|
||||||
| ---:|:--- |:---|
|
| ---:|:--- |:---|
|
||||||
|
| 1 | ```extrusion(E1515, 80)``` | Extrusion E1515 x 80mm |
|
||||||
| 1 | ```extrusion(E2020, 80)``` | Extrusion E2020 x 80mm |
|
| 1 | ```extrusion(E2020, 80)``` | Extrusion E2020 x 80mm |
|
||||||
| 1 | ```extrusion(E2040, 80)``` | Extrusion E2040 x 80mm |
|
| 1 | ```extrusion(E2040, 80)``` | Extrusion E2040 x 80mm |
|
||||||
| 1 | ```extrusion(E2060, 80)``` | Extrusion E2060 x 80mm |
|
| 1 | ```extrusion(E2060, 80)``` | Extrusion E2060 x 80mm |
|
||||||
| 1 | ```extrusion(E2080, 80)``` | Extrusion E2080 x 80mm |
|
| 1 | ```extrusion(E2080, 80)``` | Extrusion E2080 x 80mm |
|
||||||
| 1 | ```extrusion(E3030, 80)``` | Extrusion E3030 x 80mm |
|
| 1 | ```extrusion(E3030, 80, cornerHole = true)``` | Extrusion E3030 x 80mm |
|
||||||
| 1 | ```extrusion(E3060, 80)``` | Extrusion E3060 x 80mm |
|
| 1 | ```extrusion(E3060, 80, cornerHole = true)``` | Extrusion E3060 x 80mm |
|
||||||
| 1 | ```extrusion(E4040, 80)``` | Extrusion E4040 x 80mm |
|
| 1 | ```extrusion(E4040, 80, cornerHole = true)``` | Extrusion E4040 x 80mm |
|
||||||
| 1 | ```extrusion(E4080, 80)``` | Extrusion E4080 x 80mm |
|
| 1 | ```extrusion(E4080, 80, cornerHole = true)``` | Extrusion E4080 x 80mm |
|
||||||
|
|
||||||
|
|
||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
@@ -824,7 +867,6 @@ Parametric green terminal blocks
|
|||||||
| Module | Description |
|
| Module | Description |
|
||||||
|:--- |:--- |
|
|:--- |:--- |
|
||||||
| ```green_terminal(type, ways, skip = [], colour = "lime")``` | Draw green terminal blocks, skip can be used to remove pins. |
|
| ```green_terminal(type, ways, skip = [], colour = "lime")``` | Draw green terminal blocks, skip can be used to remove pins. |
|
||||||
| ```terminal_254(ways, skip = [])``` | Draw 0.1" terminal block |
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -934,8 +976,8 @@ Mini LCD Celsius Digital Thermometer Hygrometer Temperature Humidity Meter Gauge
|
|||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
---
|
---
|
||||||
<a name="Iecs"></a>
|
<a name="IECs"></a>
|
||||||
## Iecs
|
## IECs
|
||||||
IEC mains inlets and outlet.
|
IEC mains inlets and outlet.
|
||||||
|
|
||||||
|
|
||||||
@@ -943,7 +985,7 @@ IEC mains inlets and outlet.
|
|||||||
|
|
||||||
[vitamins/iec.scad](vitamins/iec.scad) Implementation.
|
[vitamins/iec.scad](vitamins/iec.scad) Implementation.
|
||||||
|
|
||||||
[tests/iecs.scad](tests/iecs.scad) Code for this example.
|
[tests/IECs.scad](tests/IECs.scad) Code for this example.
|
||||||
|
|
||||||
### Properties
|
### Properties
|
||||||
| Function | Description |
|
| Function | Description |
|
||||||
@@ -1090,8 +1132,61 @@ E.g. a "brown" socket for mains live needs to be displayed as "sienna" to look r
|
|||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
---
|
---
|
||||||
<a name="Ldrs"></a>
|
<a name="KP_pillow_blocks"></a>
|
||||||
## Ldrs
|
## KP_pillow_blocks
|
||||||
|
KP pillow block bearings
|
||||||
|
|
||||||
|
|
||||||
|
[vitamins/kp_pillow_blocks.scad](vitamins/kp_pillow_blocks.scad) Object definitions.
|
||||||
|
|
||||||
|
[vitamins/kp_pillow_block.scad](vitamins/kp_pillow_block.scad) Implementation.
|
||||||
|
|
||||||
|
[tests/KP_pillow_blocks.scad](tests/KP_pillow_blocks.scad) Code for this example.
|
||||||
|
|
||||||
|
### Properties
|
||||||
|
| Function | Description |
|
||||||
|
|:--- |:--- |
|
||||||
|
| ```kp_base_height(type)``` | Height of base containing the bolts |
|
||||||
|
| ```kp_diameter(type)``` | Rod hole diameter |
|
||||||
|
| ```kp_hole_offset(type)``` | Rod hole offset |
|
||||||
|
| ```kp_screw_separation(type)``` | Separation of bolts in the base |
|
||||||
|
|
||||||
|
### Functions
|
||||||
|
| Function | Description |
|
||||||
|
|:--- |:--- |
|
||||||
|
| ```kp_size(type)``` | Size of bracket |
|
||||||
|
|
||||||
|
### Modules
|
||||||
|
| Module | Description |
|
||||||
|
|:--- |:--- |
|
||||||
|
| ```kp_pillow_block(type)``` | Draw the KP pillow block |
|
||||||
|
| ```kp_pillow_block_assembly(type, part_thickness = 2, screw_type = M5_cap_screw, nut_type = undef)``` | Assembly with fasteners in place |
|
||||||
|
| ```kp_pillow_block_hole_positions(type)``` | Place children at hole positions |
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Vitamins
|
||||||
|
| Qty | Module call | BOM entry |
|
||||||
|
| ---:|:--- |:---|
|
||||||
|
| 1 | ```kp_pillow_block(KP000)``` | KP000 pillow block |
|
||||||
|
| 1 | ```kp_pillow_block(KP001)``` | KP001 pillow block |
|
||||||
|
| 1 | ```kp_pillow_block(KP08_15)``` | KP08_15 pillow block |
|
||||||
|
| 1 | ```kp_pillow_block(KP08_18)``` | KP08_18 pillow block |
|
||||||
|
| 2 | ```sliding_t_nut(M4_hammer_nut)``` | Nut M4 hammer |
|
||||||
|
| 2 | ```sliding_t_nut(M4_sliding_t_nut)``` | Nut M4 sliding T |
|
||||||
|
| 2 | ```sliding_t_nut(M5_sliding_t_nut)``` | Nut M5 sliding T |
|
||||||
|
| 2 | ```nut(M5_nut, nyloc = undef)``` | Nut M5 x 4mm |
|
||||||
|
| 4 | ```screw(M4_cap_screw, 10)``` | Screw M4 cap x 10mm |
|
||||||
|
| 4 | ```screw(M5_cap_screw, 12)``` | Screw M5 cap x 12mm |
|
||||||
|
| 4 | ```washer(M4_washer)``` | Washer M4 x 9mm x 0.8mm |
|
||||||
|
| 6 | ```washer(M5_washer)``` | Washer M5 x 10mm x 1mm |
|
||||||
|
|
||||||
|
|
||||||
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
|
---
|
||||||
|
<a name="LDRs"></a>
|
||||||
|
## LDRs
|
||||||
Light dependent resistors.
|
Light dependent resistors.
|
||||||
|
|
||||||
Larger ones seem to have both a higher dark resistance and a lower bright light resistance.
|
Larger ones seem to have both a higher dark resistance and a lower bright light resistance.
|
||||||
@@ -1101,7 +1196,7 @@ Larger ones seem to have both a higher dark resistance and a lower bright light
|
|||||||
|
|
||||||
[vitamins/ldr.scad](vitamins/ldr.scad) Implementation.
|
[vitamins/ldr.scad](vitamins/ldr.scad) Implementation.
|
||||||
|
|
||||||
[tests/ldrs.scad](tests/ldrs.scad) Code for this example.
|
[tests/LDRs.scad](tests/LDRs.scad) Code for this example.
|
||||||
|
|
||||||
### Properties
|
### Properties
|
||||||
| Function | Description |
|
| Function | Description |
|
||||||
@@ -1181,8 +1276,8 @@ Nuts for leadscrews.
|
|||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
---
|
---
|
||||||
<a name="Leds"></a>
|
<a name="LEDs"></a>
|
||||||
## Leds
|
## LEDs
|
||||||
Standard domed through hole LEDs. Can specify colour and lead length.
|
Standard domed through hole LEDs. Can specify colour and lead length.
|
||||||
|
|
||||||
|
|
||||||
@@ -1190,7 +1285,7 @@ Standard domed through hole LEDs. Can specify colour and lead length.
|
|||||||
|
|
||||||
[vitamins/led.scad](vitamins/led.scad) Implementation.
|
[vitamins/led.scad](vitamins/led.scad) Implementation.
|
||||||
|
|
||||||
[tests/leds.scad](tests/leds.scad) Code for this example.
|
[tests/LEDs.scad](tests/LEDs.scad) Code for this example.
|
||||||
|
|
||||||
### Properties
|
### Properties
|
||||||
| Function | Description |
|
| Function | Description |
|
||||||
@@ -1594,6 +1689,9 @@ If a nut is given a child then it gets placed on its top surface.
|
|||||||
|:--- |:--- |
|
|:--- |:--- |
|
||||||
| ```nut_radius(type)``` | Radius across the corners |
|
| ```nut_radius(type)``` | Radius across the corners |
|
||||||
| ```nut_size(type)``` | Diameter of the corresponding screw |
|
| ```nut_size(type)``` | Diameter of the corresponding screw |
|
||||||
|
| ```nut_square_size(type)``` | Diameter of the corresponding screw |
|
||||||
|
| ```nut_square_thickness(type)``` | Thickness of the square nut |
|
||||||
|
| ```nut_square_width(type)``` | Width of the square nut |
|
||||||
| ```nut_trap_depth(type)``` | Depth of nut trap |
|
| ```nut_trap_depth(type)``` | Depth of nut trap |
|
||||||
| ```nut_washer(type)``` | Corresponding washer |
|
| ```nut_washer(type)``` | Corresponding washer |
|
||||||
|
|
||||||
@@ -1610,6 +1708,7 @@ If a nut is given a child then it gets placed on its top surface.
|
|||||||
|:--- |:--- |
|
|:--- |:--- |
|
||||||
| ```nut(type, nyloc = false, brass = false, nylon = false)``` | Draw specified nut |
|
| ```nut(type, nyloc = false, brass = false, nylon = false)``` | Draw specified nut |
|
||||||
| ```nut_and_washer(type, nyloc)``` | Draw nut with corresponding washer |
|
| ```nut_and_washer(type, nyloc)``` | Draw nut with corresponding washer |
|
||||||
|
| ```nut_square(type, brass = false, nylon = false)``` | Draw specified square nut |
|
||||||
| ```nut_trap(screw, nut, depth = 0, horizontal = false, supported = false, h = 200)``` | Make a nut trap |
|
| ```nut_trap(screw, nut, depth = 0, horizontal = false, supported = false, h = 200)``` | Make a nut trap |
|
||||||
| ```wingnut(type)``` | Draw a wingnut |
|
| ```wingnut(type)``` | Draw a wingnut |
|
||||||
|
|
||||||
@@ -1623,23 +1722,28 @@ If a nut is given a child then it gets placed on its top surface.
|
|||||||
| 1 | ```nut(M2p5_nut)``` | Nut M2.5 x 2.2mm |
|
| 1 | ```nut(M2p5_nut)``` | Nut M2.5 x 2.2mm |
|
||||||
| 1 | ```nut(M2p5_nut, nyloc = true)``` | Nut M2.5 x 2.2mm nyloc |
|
| 1 | ```nut(M2p5_nut, nyloc = true)``` | Nut M2.5 x 2.2mm nyloc |
|
||||||
| 1 | ```nut(M2p5_nut, nylon = true)``` | Nut M2.5 x 2.2mm nylon |
|
| 1 | ```nut(M2p5_nut, nylon = true)``` | Nut M2.5 x 2.2mm nylon |
|
||||||
| 1 | ```hammer_nut(M3_hammer_nut)``` | Nut M3 hammer |
|
| 1 | ```sliding_t_nut(M3_hammer_nut)``` | Nut M3 hammer |
|
||||||
| 1 | ```sliding_t_nut(M3_sliding_t_nut)``` | Nut M3 sliding T |
|
| 1 | ```sliding_t_nut(M3_sliding_t_nut)``` | Nut M3 sliding T |
|
||||||
| 1 | ```nut(M3_nut)``` | Nut M3 x 2.4mm |
|
| 1 | ```nut(M3_nut)``` | Nut M3 x 2.4mm |
|
||||||
| 1 | ```nut(M3_nut, brass = true)``` | Nut M3 x 2.4mm brass |
|
| 1 | ```nut(M3_nut, brass = true)``` | Nut M3 x 2.4mm brass |
|
||||||
| 1 | ```nut(M3_nut, nyloc = true)``` | Nut M3 x 2.4mm nyloc |
|
| 1 | ```nut(M3_nut, nyloc = true)``` | Nut M3 x 2.4mm nyloc |
|
||||||
| 1 | ```hammer_nut(M4_hammer_nut)``` | Nut M4 hammer |
|
| 1 | ```nut(M3nS_thin_nut)``` | Nut M3nS 5.5 x 1.8mm |
|
||||||
|
| 1 | ```sliding_t_nut(M4_hammer_nut)``` | Nut M4 hammer |
|
||||||
| 1 | ```sliding_t_nut(M4_sliding_t_nut)``` | Nut M4 sliding T |
|
| 1 | ```sliding_t_nut(M4_sliding_t_nut)``` | Nut M4 sliding T |
|
||||||
| 1 | ```nut(M4_nut)``` | Nut M4 x 3.2mm |
|
| 1 | ```nut(M4_nut)``` | Nut M4 x 3.2mm |
|
||||||
| 1 | ```nut(M4_nut, nyloc = true)``` | Nut M4 x 3.2mm nyloc |
|
| 1 | ```nut(M4_nut, nyloc = true)``` | Nut M4 x 3.2mm nyloc |
|
||||||
|
| 1 | ```nut(M4nS_thin_nut)``` | Nut M4nS 7 x 2.2mm |
|
||||||
| 1 | ```sliding_t_nut(M5_sliding_t_nut)``` | Nut M5 sliding T |
|
| 1 | ```sliding_t_nut(M5_sliding_t_nut)``` | Nut M5 sliding T |
|
||||||
| 1 | ```nut(M5_nut)``` | Nut M5 x 4mm |
|
| 1 | ```nut(M5_nut)``` | Nut M5 x 4mm |
|
||||||
| 1 | ```nut(M5_nut, nyloc = true)``` | Nut M5 x 4mm nyloc |
|
| 1 | ```nut(M5_nut, nyloc = true)``` | Nut M5 x 4mm nyloc |
|
||||||
|
| 1 | ```nut(M5nS_thin_nut)``` | Nut M5nS 8 x 2.7mm |
|
||||||
| 1 | ```nut(M6_half_nut)``` | Nut M6 x 3mm |
|
| 1 | ```nut(M6_half_nut)``` | Nut M6 x 3mm |
|
||||||
| 1 | ```nut(M6_nut)``` | Nut M6 x 5mm |
|
| 1 | ```nut(M6_nut)``` | Nut M6 x 5mm |
|
||||||
| 1 | ```nut(M6_nut, nyloc = true)``` | Nut M6 x 5mm nyloc |
|
| 1 | ```nut(M6_nut, nyloc = true)``` | Nut M6 x 5mm nyloc |
|
||||||
|
| 1 | ```nut(M6nS_thin_nut)``` | Nut M6nS 10 x 3.2mm |
|
||||||
| 1 | ```nut(M8_nut)``` | Nut M8 x 6.5mm |
|
| 1 | ```nut(M8_nut)``` | Nut M8 x 6.5mm |
|
||||||
| 1 | ```nut(M8_nut, nyloc = true)``` | Nut M8 x 6.5mm nyloc |
|
| 1 | ```nut(M8_nut, nyloc = true)``` | Nut M8 x 6.5mm nyloc |
|
||||||
|
| 1 | ```nut(M8nS_thin_nut)``` | Nut M8nS 13 x 4mm |
|
||||||
| 1 | ```washer(M6_washer)``` | Washer M6 x 12.5mm x 1.5mm |
|
| 1 | ```washer(M6_washer)``` | Washer M6 x 12.5mm x 1.5mm |
|
||||||
| 1 | ```wingnut(M4_wingnut)``` | Wingnut M4 |
|
| 1 | ```wingnut(M4_wingnut)``` | Wingnut M4 |
|
||||||
|
|
||||||
@@ -1712,16 +1816,14 @@ A permanent magnet that can be magnatized and de-magnatized electronically.
|
|||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
---
|
---
|
||||||
<a name="Pcbs"></a>
|
<a name="PCB"></a>
|
||||||
## Pcbs
|
## PCB
|
||||||
PCBs and perfboard with optional components. The shape can be a rectangle with optionally rounded corners or a polygon for odd shapes like Arduino.
|
PCBs and perfboard with optional components. The shape can be a rectangle with optionally rounded corners or a polygon for odd shapes like Arduino.
|
||||||
|
|
||||||
|
|
||||||
[vitamins/pcbs.scad](vitamins/pcbs.scad) Object definitions.
|
|
||||||
|
|
||||||
[vitamins/pcb.scad](vitamins/pcb.scad) Implementation.
|
[vitamins/pcb.scad](vitamins/pcb.scad) Implementation.
|
||||||
|
|
||||||
[tests/pcbs.scad](tests/pcbs.scad) Code for this example.
|
[tests/PCB.scad](tests/PCB.scad) Code for this example.
|
||||||
|
|
||||||
### Properties
|
### Properties
|
||||||
| Function | Description |
|
| Function | Description |
|
||||||
@@ -1778,8 +1880,93 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
|||||||
| ```pcb_screw_positions(type)``` | Positions children at the mounting hole positions |
|
| ```pcb_screw_positions(type)``` | Positions children at the mounting hole positions |
|
||||||
| ```pcb_spacer(screw, height, wall = 1.8, taper = 0)``` | Generate STL for PCB spacer |
|
| ```pcb_spacer(screw, height, wall = 1.8, taper = 0)``` | Generate STL for PCB spacer |
|
||||||
| ```rj45(cutout = false)``` | Draw RJ45 Ethernet connector |
|
| ```rj45(cutout = false)``` | Draw RJ45 Ethernet connector |
|
||||||
| ```terminal_35(ways)``` | Draw 3.5mm terminal block |
|
| ```terminal_35(ways, colour = "blue")``` | Draw 3.5mm terminal block |
|
||||||
| ```uSD(size, cutout = false)``` | Draw uSD socket |
|
| ```uSD(size, cutout = false)``` | Draw uSD socket |
|
||||||
|
| ```usb_Ax1(cutout = false)``` | Draw USB type A single socket |
|
||||||
|
| ```usb_Ax2(cutout = false)``` | Draw USB type A dual socket |
|
||||||
|
| ```usb_B(cutout = false)``` | Draw USB B connector |
|
||||||
|
| ```usb_uA(cutout = false)``` | Draw USB micro A connector |
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Vitamins
|
||||||
|
| Qty | Module call | BOM entry |
|
||||||
|
| ---:|:--- |:---|
|
||||||
|
| 1 | ```pcb(TestPCB)``` | Test PCB |
|
||||||
|
|
||||||
|
|
||||||
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
|
---
|
||||||
|
<a name="PCBs"></a>
|
||||||
|
## PCBs
|
||||||
|
PCBs and perfboard with optional components. The shape can be a rectangle with optionally rounded corners or a polygon for odd shapes like Arduino.
|
||||||
|
|
||||||
|
|
||||||
|
[vitamins/pcbs.scad](vitamins/pcbs.scad) Object definitions.
|
||||||
|
|
||||||
|
[vitamins/pcb.scad](vitamins/pcb.scad) Implementation.
|
||||||
|
|
||||||
|
[tests/PCBs.scad](tests/PCBs.scad) Code for this example.
|
||||||
|
|
||||||
|
### Properties
|
||||||
|
| Function | Description |
|
||||||
|
|:--- |:--- |
|
||||||
|
| ```hdmi_depth(type)``` | Front to back depth |
|
||||||
|
| ```hdmi_height(type)``` | Outside height above the PCB |
|
||||||
|
| ```hdmi_height1(type)``` | Inside height at the sides |
|
||||||
|
| ```hdmi_height2(type)``` | Inside height in the middle |
|
||||||
|
| ```hdmi_thickness(type)``` | Wall thickness of the metal |
|
||||||
|
| ```hdmi_width1(type)``` | Inside width at the top |
|
||||||
|
| ```hdmi_width2(type)``` | Inside width at the bottom |
|
||||||
|
| ```pcb_accessories(type)``` | List of accessories to go on the BOM, SD cards, USB cables, etc. |
|
||||||
|
| ```pcb_colour(type)``` | Colour of the subtrate |
|
||||||
|
| ```pcb_components(type)``` | List of components |
|
||||||
|
| ```pcb_grid(type)``` | Grid if a perfboard |
|
||||||
|
| ```pcb_hole_d(type)``` | Mounting hole diameter |
|
||||||
|
| ```pcb_holes(type)``` | List of hole positions |
|
||||||
|
| ```pcb_land_d(type)``` | Pad around mounting hole |
|
||||||
|
| ```pcb_length(type)``` | Length |
|
||||||
|
| ```pcb_name(type)``` | Description |
|
||||||
|
| ```pcb_parts_on_bom(type)``` | True if the parts should be separate BOM items |
|
||||||
|
| ```pcb_polygon(type)``` | Optional outline polygon for odd shaped boards |
|
||||||
|
| ```pcb_radius(type)``` | Corner radius |
|
||||||
|
| ```pcb_thickness(type)``` | Thickness |
|
||||||
|
| ```pcb_width(type)``` | Width |
|
||||||
|
|
||||||
|
### Functions
|
||||||
|
| Function | Description |
|
||||||
|
|:--- |:--- |
|
||||||
|
| ```pcb_component_position(type, name, index = 0)``` | Return x y position of specified component |
|
||||||
|
| ```pcb_coord(type, p)``` | Convert offsets from the edge to coordinates relative to the centre |
|
||||||
|
| ```pcb_grid_pos(type, x, y, z = 0)``` | Returns a pcb grid position |
|
||||||
|
| ```pcb_screw(type, cap = hs_cap)``` | Mounting screw type |
|
||||||
|
|
||||||
|
### Modules
|
||||||
|
| Module | Description |
|
||||||
|
|:--- |:--- |
|
||||||
|
| ```barrel_jack(cutout = false)``` | Draw barrel power jack |
|
||||||
|
| ```buzzer(height, diameter, colour)``` | Draw PCB buzzer with specified height, diameter and color |
|
||||||
|
| ```chip(length, width, thickness, colour, cutout = false)``` | Draw a coloured cube to represent a chip, or other rectangular component |
|
||||||
|
| ```flat_flex(cutout = false)``` | Draw flat flexistrip connector as used on RPI0 |
|
||||||
|
| ```flex(cutout = false)``` | Draw flexistrip connector |
|
||||||
|
| ```hdmi(type, cutout = false)``` | Draw HDMI socket |
|
||||||
|
| ```jack(cutout = false)``` | Draw 3.5mm jack |
|
||||||
|
| ```molex_254(ways)``` | Draw molex header |
|
||||||
|
| ```pcb(type)``` | Draw specified PCB |
|
||||||
|
| ```pcb_assembly(type, height, thickness)``` | Draw PCB assembly with spaces and fasteners in place |
|
||||||
|
| ```pcb_base(type, height, thickness, wall = 2)``` | Generate STL for a base with PCB spacers |
|
||||||
|
| ```pcb_component(comp, cutouts = false, angle = undef)``` | Draw pcb component from description |
|
||||||
|
| ```pcb_component_position(type, name)``` | Position child at the specified component position |
|
||||||
|
| ```pcb_components(type, cutouts = false, angle = undef)``` | Draw list of PCB components on the PCB |
|
||||||
|
| ```pcb_cutouts(type, angle = undef)``` | Make cut outs to clear components on a PCB |
|
||||||
|
| ```pcb_grid(type, x, y, z = 0)``` | Positions children at specified grid position |
|
||||||
|
| ```pcb_screw_positions(type)``` | Positions children at the mounting hole positions |
|
||||||
|
| ```pcb_spacer(screw, height, wall = 1.8, taper = 0)``` | Generate STL for PCB spacer |
|
||||||
|
| ```rj45(cutout = false)``` | Draw RJ45 Ethernet connector |
|
||||||
|
| ```terminal_35(ways, colour = "blue")``` | Draw 3.5mm terminal block |
|
||||||
|
| ```uSD(size, cutout = false)``` | Draw uSD socket |
|
||||||
|
| ```usb_Ax1(cutout = false)``` | Draw USB type A single socket |
|
||||||
| ```usb_Ax2(cutout = false)``` | Draw USB type A dual socket |
|
| ```usb_Ax2(cutout = false)``` | Draw USB type A dual socket |
|
||||||
| ```usb_B(cutout = false)``` | Draw USB B connector |
|
| ```usb_B(cutout = false)``` | Draw USB B connector |
|
||||||
| ```usb_uA(cutout = false)``` | Draw USB micro A connector |
|
| ```usb_uA(cutout = false)``` | Draw USB micro A connector |
|
||||||
@@ -1804,7 +1991,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
|||||||
| 1 | ```molex_254(2)``` | Molex KK header 2 way |
|
| 1 | ```molex_254(2)``` | Molex KK header 2 way |
|
||||||
| 1 | ```molex_254(3)``` | Molex KK header 3 way |
|
| 1 | ```molex_254(3)``` | Molex KK header 3 way |
|
||||||
| 16 | ```nut(M2_nut, nyloc = true)``` | Nut M2 x 1.6mm nyloc |
|
| 16 | ```nut(M2_nut, nyloc = true)``` | Nut M2 x 1.6mm nyloc |
|
||||||
| 32 | ```nut(M2p5_nut, nyloc = true)``` | Nut M2.5 x 2.2mm nyloc |
|
| 30 | ```nut(M2p5_nut, nyloc = true)``` | Nut M2.5 x 2.2mm nyloc |
|
||||||
| 12 | ```nut(M3_nut, nyloc = true)``` | Nut M3 x 2.4mm nyloc |
|
| 12 | ```nut(M3_nut, nyloc = true)``` | Nut M3 x 2.4mm nyloc |
|
||||||
| 12 | ```nut(M4_nut, nyloc = true)``` | Nut M4 x 3.2mm nyloc |
|
| 12 | ```nut(M4_nut, nyloc = true)``` | Nut M4 x 3.2mm nyloc |
|
||||||
| 1 | ```pcb(PI_IO)``` | PI_IO V2 |
|
| 1 | ```pcb(PI_IO)``` | PI_IO V2 |
|
||||||
@@ -1819,21 +2006,19 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
|||||||
| 1 | ```pcb(RPI3)``` | Raspberry Pi 3 |
|
| 1 | ```pcb(RPI3)``` | Raspberry Pi 3 |
|
||||||
| 1 | ```pcb(RPI0)``` | Raspberry Pi Zero |
|
| 1 | ```pcb(RPI0)``` | Raspberry Pi Zero |
|
||||||
| 16 | ```screw(M2_cap_screw, 25)``` | Screw M2 cap x 25mm |
|
| 16 | ```screw(M2_cap_screw, 25)``` | Screw M2 cap x 25mm |
|
||||||
| 4 | ```screw(M2p5_cap_screw, 16)``` | Screw M2.5 cap x 16mm |
|
| 2 | ```screw(M2p5_cap_screw, 16)``` | Screw M2.5 cap x 16mm |
|
||||||
| 8 | ```screw(M2p5_cap_screw, 20)``` | Screw M2.5 cap x 20mm |
|
| 12 | ```screw(M2p5_cap_screw, 20)``` | Screw M2.5 cap x 20mm |
|
||||||
| 4 | ```screw(M2p5_cap_screw, 35)``` | Screw M2.5 cap x 35mm |
|
| 4 | ```screw(M2p5_pan_screw, 20)``` | Screw M2.5 pan x 20mm |
|
||||||
| 8 | ```screw(M2p5_pan_screw, 20)``` | Screw M2.5 pan x 20mm |
|
| 8 | ```screw(M2p5_pan_screw, 25)``` | Screw M2.5 pan x 25mm |
|
||||||
| 4 | ```screw(M2p5_pan_screw, 25)``` | Screw M2.5 pan x 25mm |
|
|
||||||
| 4 | ```screw(M2p5_pan_screw, 35)``` | Screw M2.5 pan x 35mm |
|
| 4 | ```screw(M2p5_pan_screw, 35)``` | Screw M2.5 pan x 35mm |
|
||||||
| 8 | ```screw(M3_cap_screw, 30)``` | Screw M3 cap x 30mm |
|
| 8 | ```screw(M3_cap_screw, 30)``` | Screw M3 cap x 30mm |
|
||||||
| 4 | ```screw(M3_cap_screw, 35)``` | Screw M3 cap x 35mm |
|
| 4 | ```screw(M3_cap_screw, 35)``` | Screw M3 cap x 35mm |
|
||||||
| 4 | ```screw(M4_cap_screw, 30)``` | Screw M4 cap x 30mm |
|
| 12 | ```screw(M4_cap_screw, 35)``` | Screw M4 cap x 35mm |
|
||||||
| 8 | ```screw(M4_cap_screw, 35)``` | Screw M4 cap x 35mm |
|
|
||||||
| 3 | ```terminal_35(2)``` | Terminal block 2 way 3.5mm |
|
| 3 | ```terminal_35(2)``` | Terminal block 2 way 3.5mm |
|
||||||
| 2 | ```green_terminal(gt_2p54, 4)``` | Terminal block 4 way 0.1" |
|
| 2 | ```green_terminal(gt_2p54, 4)``` | Terminal block 4 way 0.1" |
|
||||||
| 1 | | USB A to Mini B lead |
|
| 1 | | USB A to Mini B lead |
|
||||||
| 16 | ```washer(M2_washer)``` | Washer M2 x 5mm x 0.3mm |
|
| 16 | ```washer(M2_washer)``` | Washer M2 x 5mm x 0.3mm |
|
||||||
| 32 | ```washer(M2p5_washer)``` | Washer M2.5 x 5.9mm x 0.5mm |
|
| 30 | ```washer(M2p5_washer)``` | Washer M2.5 x 5.9mm x 0.5mm |
|
||||||
| 12 | ```washer(M3_washer)``` | Washer M3 x 7mm x 0.5mm |
|
| 12 | ```washer(M3_washer)``` | Washer M3 x 7mm x 0.5mm |
|
||||||
| 12 | ```washer(M4_washer)``` | Washer M4 x 9mm x 0.8mm |
|
| 12 | ```washer(M4_washer)``` | Washer M4 x 9mm x 0.8mm |
|
||||||
| 1 | ```pcb(ZC_A0591)``` | ZC-A0591 ULN2003 driver PCB |
|
| 1 | ```pcb(ZC_A0591)``` | ZC-A0591 ULN2003 driver PCB |
|
||||||
@@ -1841,24 +2026,24 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
|
|||||||
### Printed
|
### Printed
|
||||||
| Qty | Filename |
|
| Qty | Filename |
|
||||||
| ---:|:--- |
|
| ---:|:--- |
|
||||||
| 4 | pcb_spacer20130.stl |
|
|
||||||
| 4 | pcb_spacer20140.stl |
|
| 4 | pcb_spacer20140.stl |
|
||||||
| 4 | pcb_spacer20150.stl |
|
| 4 | pcb_spacer20150.stl |
|
||||||
| 4 | pcb_spacer20160.stl |
|
| 4 | pcb_spacer20160.stl |
|
||||||
| 4 | pcb_spacer25100_2.stl |
|
| 4 | pcb_spacer20170.stl |
|
||||||
|
| 4 | pcb_spacer25100.stl |
|
||||||
| 4 | pcb_spacer25110_2.stl |
|
| 4 | pcb_spacer25110_2.stl |
|
||||||
| 4 | pcb_spacer25120_2.stl |
|
| 4 | pcb_spacer25120_2.stl |
|
||||||
| 4 | pcb_spacer25230.stl |
|
| 4 | pcb_spacer25130_2.stl |
|
||||||
| 4 | pcb_spacer25240.stl |
|
| 4 | pcb_spacer25240.stl |
|
||||||
| 4 | pcb_spacer2570.stl |
|
| 2 | pcb_spacer2550.stl |
|
||||||
| 4 | pcb_spacer2580.stl |
|
| 4 | pcb_spacer2580.stl |
|
||||||
| 4 | pcb_spacer2590.stl |
|
| 4 | pcb_spacer2590.stl |
|
||||||
| 4 | pcb_spacer30170.stl |
|
|
||||||
| 4 | pcb_spacer30180.stl |
|
| 4 | pcb_spacer30180.stl |
|
||||||
| 4 | pcb_spacer30220.stl |
|
| 4 | pcb_spacer30190.stl |
|
||||||
| 4 | pcb_spacer40190.stl |
|
| 4 | pcb_spacer30230.stl |
|
||||||
| 4 | pcb_spacer40200.stl |
|
| 4 | pcb_spacer40200.stl |
|
||||||
| 4 | pcb_spacer40210.stl |
|
| 4 | pcb_spacer40210.stl |
|
||||||
|
| 4 | pcb_spacer40220.stl |
|
||||||
|
|
||||||
|
|
||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
@@ -1941,8 +2126,8 @@ Pin headers and sockets, etc.
|
|||||||
| ```idc_transition(type, cols = 5, skip = [], cutout = false)``` | Draw IDC transition header |
|
| ```idc_transition(type, cols = 5, skip = [], cutout = false)``` | Draw IDC transition header |
|
||||||
| ```jst_xh_header(type, pin_count, right_angle=false, colour, pin_colour)``` | Draw JST XH connector |
|
| ```jst_xh_header(type, pin_count, right_angle=false, colour, pin_colour)``` | Draw JST XH connector |
|
||||||
| ```pin(type, length = undef)``` | Draw a header pin |
|
| ```pin(type, length = undef)``` | Draw a header pin |
|
||||||
| ```pin_header(type, cols = 1, rows = 1, smt = false, right_angle = false, cutout = false)``` | Draw pin header |
|
| ```pin_header(type, cols = 1, rows = 1, smt = false, right_angle = false, cutout = false, colour)``` | Draw pin header |
|
||||||
| ```pin_socket(type, cols = 1, rows = 1, right_angle = false, height = 0, smt = false, cutout = false)``` | Draw pin socket |
|
| ```pin_socket(type, cols = 1, rows = 1, right_angle = false, height = 0, smt = false, cutout = false, colour)``` | Draw pin socket |
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -1960,8 +2145,8 @@ Pin headers and sockets, etc.
|
|||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
---
|
---
|
||||||
<a name="Psus"></a>
|
<a name="PSUs"></a>
|
||||||
## Psus
|
## PSUs
|
||||||
Powersupplies. Can be a simple cube or can be defined by a list of six faces, each with thickness, holes, cutouts, etc.
|
Powersupplies. Can be a simple cube or can be defined by a list of six faces, each with thickness, holes, cutouts, etc.
|
||||||
|
|
||||||
Face order is bottom, top, left, right, front, back.
|
Face order is bottom, top, left, right, front, back.
|
||||||
@@ -1971,7 +2156,7 @@ Face order is bottom, top, left, right, front, back.
|
|||||||
|
|
||||||
[vitamins/psu.scad](vitamins/psu.scad) Implementation.
|
[vitamins/psu.scad](vitamins/psu.scad) Implementation.
|
||||||
|
|
||||||
[tests/psus.scad](tests/psus.scad) Code for this example.
|
[tests/PSUs.scad](tests/PSUs.scad) Code for this example.
|
||||||
|
|
||||||
### Properties
|
### Properties
|
||||||
| Function | Description |
|
| Function | Description |
|
||||||
@@ -1985,6 +2170,7 @@ Face order is bottom, top, left, right, front, back.
|
|||||||
| ```psu_face_iec(type)``` | IEC connector x,y, rotation and type |
|
| ```psu_face_iec(type)``` | IEC connector x,y, rotation and type |
|
||||||
| ```psu_face_switch(type)``` | Rocker switch x,y, rotation and type |
|
| ```psu_face_switch(type)``` | Rocker switch x,y, rotation and type |
|
||||||
| ```psu_face_thickness(type)``` | The thickness |
|
| ```psu_face_thickness(type)``` | The thickness |
|
||||||
|
| ```psu_face_vents(type)``` | Vents array position x,y, rotation, size and corner radius |
|
||||||
| ```psu_faces(type)``` | List of face descriptions |
|
| ```psu_faces(type)``` | List of face descriptions |
|
||||||
| ```psu_height(type)``` | Height |
|
| ```psu_height(type)``` | Height |
|
||||||
| ```psu_left_bay(type)``` | Bay for terminals |
|
| ```psu_left_bay(type)``` | Bay for terminals |
|
||||||
@@ -2286,6 +2472,8 @@ Rocker switch. Also used for neon indicator in the same form factor.
|
|||||||
## Rod
|
## Rod
|
||||||
Steel rods and studding with chamfered ends.
|
Steel rods and studding with chamfered ends.
|
||||||
|
|
||||||
|
These items are sysmtrical, so by default the origin is in the centre but it can be changed to the bottom.
|
||||||
|
|
||||||
|
|
||||||
[vitamins/rod.scad](vitamins/rod.scad) Implementation.
|
[vitamins/rod.scad](vitamins/rod.scad) Implementation.
|
||||||
|
|
||||||
@@ -2411,13 +2599,16 @@ Machine screws and wood screws with various head styles.
|
|||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
---
|
---
|
||||||
<a name="Scs_bearing_blocks"></a>
|
<a name="SCS_bearing_blocks"></a>
|
||||||
## Scs_bearing_blocks
|
## SCS_bearing_blocks
|
||||||
|
SCSnUU and SCSnLUU bearing blocks
|
||||||
|
|
||||||
|
|
||||||
[vitamins/scs_bearing_blocks.scad](vitamins/scs_bearing_blocks.scad) Object definitions.
|
[vitamins/scs_bearing_blocks.scad](vitamins/scs_bearing_blocks.scad) Object definitions.
|
||||||
|
|
||||||
[vitamins/scs_bearing_block.scad](vitamins/scs_bearing_block.scad) Implementation.
|
[vitamins/scs_bearing_block.scad](vitamins/scs_bearing_block.scad) Implementation.
|
||||||
|
|
||||||
[tests/scs_bearing_blocks.scad](tests/scs_bearing_blocks.scad) Code for this example.
|
[tests/SCS_bearing_blocks.scad](tests/SCS_bearing_blocks.scad) Code for this example.
|
||||||
|
|
||||||
### Properties
|
### Properties
|
||||||
| Function | Description |
|
| Function | Description |
|
||||||
@@ -2558,8 +2749,8 @@ Note that modules that drill holes will return a 2D object if ```h``` is set to
|
|||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
---
|
---
|
||||||
<a name="Sk_brackets"></a>
|
<a name="SK_brackets"></a>
|
||||||
## Sk_brackets
|
## SK_brackets
|
||||||
SK shaft support brackets
|
SK shaft support brackets
|
||||||
|
|
||||||
|
|
||||||
@@ -2567,7 +2758,7 @@ SK shaft support brackets
|
|||||||
|
|
||||||
[vitamins/sk_bracket.scad](vitamins/sk_bracket.scad) Implementation.
|
[vitamins/sk_bracket.scad](vitamins/sk_bracket.scad) Implementation.
|
||||||
|
|
||||||
[tests/sk_brackets.scad](tests/sk_brackets.scad) Code for this example.
|
[tests/SK_brackets.scad](tests/SK_brackets.scad) Code for this example.
|
||||||
|
|
||||||
### Properties
|
### Properties
|
||||||
| Function | Description |
|
| Function | Description |
|
||||||
@@ -2586,21 +2777,29 @@ SK shaft support brackets
|
|||||||
| Module | Description |
|
| Module | Description |
|
||||||
|:--- |:--- |
|
|:--- |:--- |
|
||||||
| ```sk_bracket(type)``` | SK shaft support bracket |
|
| ```sk_bracket(type)``` | SK shaft support bracket |
|
||||||
| ```sk_bracket_assembly(type, screw_length = 16, screw_type = M5_cap_screw, nut_type = undef)``` | Assembly with fasteners in place |
|
| ```sk_bracket_assembly(type, part_thickness = 2, screw_type = M5_cap_screw, nut_type = undef, max_screw_depth = 6)``` | Assembly with fasteners in place |
|
||||||
|
| ```sk_bracket_hole_positions(type)``` | Place children at hole positions |
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Vitamins
|
### Vitamins
|
||||||
| Qty | Module call | BOM entry |
|
| Qty | Module call | BOM entry |
|
||||||
| ---:|:--- |:---|
|
| ---:|:--- |:---|
|
||||||
| 4 | ```sliding_t_nut(M5_sliding_t_nut)``` | Nut M5 sliding T |
|
| 2 | ```extrusion(E2020, 20)``` | Extrusion E2020 x 20mm |
|
||||||
| 4 | ```nut(M5_nut)``` | Nut M5 x 4mm |
|
| 2 | ```extrusion(E3030, 20)``` | Extrusion E3030 x 20mm |
|
||||||
|
| 2 | ```sliding_t_nut(M4_hammer_nut)``` | Nut M4 hammer |
|
||||||
|
| 2 | ```sliding_t_nut(M4_sliding_t_nut)``` | Nut M4 sliding T |
|
||||||
|
| 2 | ```sliding_t_nut(M5_sliding_t_nut)``` | Nut M5 sliding T |
|
||||||
|
| 2 | ```nut(M5_nut, nyloc = undef)``` | Nut M5 x 4mm |
|
||||||
| 1 | ```sk_bracket(SK10)``` | SK10 shaft support bracket |
|
| 1 | ```sk_bracket(SK10)``` | SK10 shaft support bracket |
|
||||||
| 1 | ```sk_bracket(SK12)``` | SK12 shaft support bracket |
|
| 1 | ```sk_bracket(SK12)``` | SK12 shaft support bracket |
|
||||||
| 1 | ```sk_bracket(SK16)``` | SK16 shaft support bracket |
|
| 1 | ```sk_bracket(SK16)``` | SK16 shaft support bracket |
|
||||||
| 1 | ```sk_bracket(SK8)``` | SK8 shaft support bracket |
|
| 1 | ```sk_bracket(SK8)``` | SK8 shaft support bracket |
|
||||||
| 8 | ```screw(M5_cap_screw, 16)``` | Screw M5 cap x 16mm |
|
| 2 | ```screw(M4_cap_screw, 12)``` | Screw M4 cap x 12mm |
|
||||||
| 12 | ```washer(M5_washer)``` | Washer M5 x 10mm x 1mm |
|
| 2 | ```screw(M4_dome_screw, 12)``` | Screw M4 dome x 12mm |
|
||||||
|
| 4 | ```screw(M5_cap_screw, 16)``` | Screw M5 cap x 16mm |
|
||||||
|
| 4 | ```washer(M4_washer)``` | Washer M4 x 9mm x 0.8mm |
|
||||||
|
| 6 | ```washer(M5_washer)``` | Washer M5 x 10mm x 1mm |
|
||||||
|
|
||||||
|
|
||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
@@ -2689,6 +2888,8 @@ Filament spool models
|
|||||||
## Springs
|
## Springs
|
||||||
Compression springs. Can be tapered, have open, closed or ground ends. Ground ends will render a lot slower.
|
Compression springs. Can be tapered, have open, closed or ground ends. Ground ends will render a lot slower.
|
||||||
|
|
||||||
|
By default springs have their origin at the bottom but can be centered.
|
||||||
|
|
||||||
|
|
||||||
[vitamins/springs.scad](vitamins/springs.scad) Object definitions.
|
[vitamins/springs.scad](vitamins/springs.scad) Object definitions.
|
||||||
|
|
||||||
@@ -2717,7 +2918,7 @@ Compression springs. Can be tapered, have open, closed or ground ends. Ground en
|
|||||||
### Modules
|
### Modules
|
||||||
| Module | Description |
|
| Module | Description |
|
||||||
|:--- |:--- |
|
|:--- |:--- |
|
||||||
| ```comp_spring(type, l = 0)``` | Draw specified spring, l can be set to specify the compressed length. |
|
| ```comp_spring(type, l = 0, center = false)``` | Draw specified spring, l can be set to specify the compressed length. |
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -2731,8 +2932,8 @@ Compression springs. Can be tapered, have open, closed or ground ends. Ground en
|
|||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
---
|
---
|
||||||
<a name="Ssrs"></a>
|
<a name="SSRs"></a>
|
||||||
## Ssrs
|
## SSRs
|
||||||
Solid state relays.
|
Solid state relays.
|
||||||
|
|
||||||
|
|
||||||
@@ -2740,7 +2941,7 @@ Solid state relays.
|
|||||||
|
|
||||||
[vitamins/ssr.scad](vitamins/ssr.scad) Implementation.
|
[vitamins/ssr.scad](vitamins/ssr.scad) Implementation.
|
||||||
|
|
||||||
[tests/ssrs.scad](tests/ssrs.scad) Code for this example.
|
[tests/SSRs.scad](tests/SSRs.scad) Code for this example.
|
||||||
|
|
||||||
### Properties
|
### Properties
|
||||||
| Function | Description |
|
| Function | Description |
|
||||||
@@ -2819,15 +3020,16 @@ NEMA stepper motor model.
|
|||||||
### Vitamins
|
### Vitamins
|
||||||
| Qty | Module call | BOM entry |
|
| Qty | Module call | BOM entry |
|
||||||
| ---:|:--- |:---|
|
| ---:|:--- |:---|
|
||||||
| 24 | ```screw(M3_pan_screw, 8)``` | Screw M3 pan x 8mm |
|
| 4 | ```ring_terminal(M3_ringterm)``` | Ring terminal 3mm |
|
||||||
|
| 15 | ```screw(M3_pan_screw, 8)``` | Screw M3 pan x 8mm |
|
||||||
| 1 | ```NEMA(NEMA14)``` | Stepper motor NEMA14 x 36mm |
|
| 1 | ```NEMA(NEMA14)``` | Stepper motor NEMA14 x 36mm |
|
||||||
| 1 | ```NEMA(NEMA16)``` | Stepper motor NEMA16 x 19.2mm |
|
| 1 | ```NEMA(NEMA16)``` | Stepper motor NEMA16 x 19.2mm |
|
||||||
| 1 | ```NEMA(NEMA17S)``` | Stepper motor NEMA17 x 34mm |
|
| 1 | ```NEMA(NEMA17S)``` | Stepper motor NEMA17 x 34mm |
|
||||||
| 1 | ```NEMA(NEMA17M)``` | Stepper motor NEMA17 x 40mm |
|
| 1 | ```NEMA(NEMA17M)``` | Stepper motor NEMA17 x 40mm |
|
||||||
| 1 | ```NEMA(NEMA17)``` | Stepper motor NEMA17 x 47mm |
|
| 1 | ```NEMA(NEMA17)``` | Stepper motor NEMA17 x 47mm |
|
||||||
| 1 | ```NEMA(NEMA23)``` | Stepper motor NEMA22 x 51.2mm |
|
| 1 | ```NEMA(NEMA23)``` | Stepper motor NEMA22 x 51.2mm |
|
||||||
| 24 | ```washer(M3_washer)``` | Washer M3 x 7mm x 0.5mm |
|
| 11 | ```washer(M3_washer)``` | Washer M3 x 7mm x 0.5mm |
|
||||||
| 24 | ```star_washer(M3_washer)``` | Washer star M3 x 0.5mm |
|
| 15 | ```star_washer(M3_washer)``` | Washer star M3 x 0.5mm |
|
||||||
|
|
||||||
|
|
||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
@@ -4048,15 +4250,15 @@ Printed handle that can be printed without needing support material due to its t
|
|||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
---
|
---
|
||||||
<a name="Pcb_mount"></a>
|
<a name="PCB_mount"></a>
|
||||||
## Pcb_mount
|
## PCB_mount
|
||||||
A frame to mount a PCB by its corners when it has no mounting holes.
|
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.
|
The stl must be given a parameterless wrapper in the project that uses it.
|
||||||
|
|
||||||
|
|
||||||
[printed/pcb_mount.scad](printed/pcb_mount.scad) Implementation.
|
[printed/pcb_mount.scad](printed/pcb_mount.scad) Implementation.
|
||||||
|
|
||||||
[tests/pcb_mount.scad](tests/pcb_mount.scad) Code for this example.
|
[tests/PCB_mount.scad](tests/PCB_mount.scad) Code for this example.
|
||||||
|
|
||||||
### Functions
|
### Functions
|
||||||
| Function | Description |
|
| Function | Description |
|
||||||
@@ -4096,15 +4298,96 @@ The stl must be given a parameterless wrapper in the project that uses it.
|
|||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
---
|
---
|
||||||
<a name="Psu_shroud"></a>
|
<a name="Printed_box"></a>
|
||||||
## Psu_shroud
|
## Printed_box
|
||||||
|
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° 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.
|
||||||
|
|
||||||
|
|
||||||
|
[printed/printed_box.scad](printed/printed_box.scad) Implementation.
|
||||||
|
|
||||||
|
[tests/printed_box.scad](tests/printed_box.scad) Code for this example.
|
||||||
|
|
||||||
|
### Properties
|
||||||
|
| Function | Description |
|
||||||
|
|:--- |:--- |
|
||||||
|
| ```pbox_base(type)``` | Base thickness, can be zero for no base |
|
||||||
|
| ```pbox_base_screw(type)``` | Screw type if no feet |
|
||||||
|
| ```pbox_depth(type)``` | Internal depth |
|
||||||
|
| ```pbox_foot(type)``` | Printed foot, can be false to suppress feet |
|
||||||
|
| ```pbox_height(type)``` | Internal height |
|
||||||
|
| ```pbox_name(type)``` | Name to allow more than one box in a project |
|
||||||
|
| ```pbox_radius(type)``` | Internal corner radius |
|
||||||
|
| ```pbox_ridges(type)``` | Ridge wavelength and amplitude |
|
||||||
|
| ```pbox_top(type)``` | Top thickness |
|
||||||
|
| ```pbox_wall(type)``` | Wall thickness |
|
||||||
|
| ```pbox_width(type)``` | Internal width |
|
||||||
|
|
||||||
|
### Functions
|
||||||
|
| Function | Description |
|
||||||
|
|:--- |:--- |
|
||||||
|
| ```pbox_inclusion(type)``` | How far the ledge for the base extends inwards |
|
||||||
|
| ```pbox_insert(type)``` | The insert for the base screws |
|
||||||
|
| ```pbox_screw(type)``` | Foot screw if got feet else base_screw |
|
||||||
|
| ```pbox_screw_inset(type)``` | How far the base screws are inset |
|
||||||
|
| ```pbox_screw_length(type, panel_thickness = 0)``` | Length of the base screw |
|
||||||
|
| ```pbox_total_height(type)``` | Total height including base overlap |
|
||||||
|
| ```pbox_washer(type)``` | The washer for the base screws |
|
||||||
|
|
||||||
|
### Modules
|
||||||
|
| Module | Description |
|
||||||
|
|:--- |:--- |
|
||||||
|
| ```pbox(type)``` | Generate the STL for the main case |
|
||||||
|
| ```pbox_base(type)``` | Generate the STL for the base |
|
||||||
|
| ```pbox_base_screws(type, thickness = 0)``` | Place the screws and feet |
|
||||||
|
| ```pbox_inserts(type)``` | Place the inserts for the base screws |
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Vitamins
|
||||||
|
| Qty | Module call | BOM entry |
|
||||||
|
| ---:|:--- |:---|
|
||||||
|
| 4 | ```insert(F1BM)``` | Heatfit insert M2 |
|
||||||
|
| 4 | ```insert(F1BM3)``` | Heatfit insert M3 |
|
||||||
|
| 4 | ```screw(M2_cap_screw, 6)``` | Screw M2 cap x 6mm |
|
||||||
|
| 3 | ```screw(M3_pan_screw, 6)``` | Screw M3 pan x 6mm |
|
||||||
|
| 4 | ```screw(M3_pan_screw, 10)``` | Screw M3 pan x 10mm |
|
||||||
|
| 4 | ```washer(M2_washer)``` | Washer M2 x 5mm x 0.3mm |
|
||||||
|
| 7 | ```washer(M3_washer)``` | Washer M3 x 7mm x 0.5mm |
|
||||||
|
|
||||||
|
### Printed
|
||||||
|
| Qty | Filename |
|
||||||
|
| ---:|:--- |
|
||||||
|
| 1 | box1.stl |
|
||||||
|
| 1 | box1_base.stl |
|
||||||
|
| 7 | foot.stl |
|
||||||
|
| 1 | smooth_box.stl |
|
||||||
|
| 1 | smooth_box_base.stl |
|
||||||
|
|
||||||
|
### Assemblies
|
||||||
|
| Qty | Name |
|
||||||
|
| ---:|:--- |
|
||||||
|
| 1 | box1_assembly |
|
||||||
|
| 1 | box2_assembly |
|
||||||
|
|
||||||
|
|
||||||
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
|
---
|
||||||
|
<a name="PSU_shroud"></a>
|
||||||
|
## PSU_shroud
|
||||||
A cover to go over the mains end of a PSU terminal strip to make it safe.
|
A cover to go over the mains end of a PSU terminal strip to make it safe.
|
||||||
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.
|
||||||
|
|
||||||
|
|
||||||
[printed/psu_shroud.scad](printed/psu_shroud.scad) Implementation.
|
[printed/psu_shroud.scad](printed/psu_shroud.scad) Implementation.
|
||||||
|
|
||||||
[tests/psu_shroud.scad](tests/psu_shroud.scad) Code for this example.
|
[tests/PSU_shroud.scad](tests/PSU_shroud.scad) Code for this example.
|
||||||
|
|
||||||
### Functions
|
### Functions
|
||||||
| Function | Description |
|
| Function | Description |
|
||||||
@@ -4132,23 +4415,25 @@ The stl and assembly must be given a name and parameterless wrappers for the stl
|
|||||||
### Vitamins
|
### Vitamins
|
||||||
| Qty | Module call | BOM entry |
|
| Qty | Module call | BOM entry |
|
||||||
| ---:|:--- |:---|
|
| ---:|:--- |:---|
|
||||||
| 4 | ```insert(F1BM3)``` | Heatfit insert M3 |
|
| 6 | ```insert(F1BM3)``` | Heatfit insert M3 |
|
||||||
| 4 | ```screw(M3_cap_screw, 10)``` | Screw M3 cap x 10mm |
|
| 6 | ```screw(M3_cap_screw, 10)``` | Screw M3 cap x 10mm |
|
||||||
| 4 | ```washer(M3_washer)``` | Washer M3 x 7mm x 0.5mm |
|
| 6 | ```washer(M3_washer)``` | Washer M3 x 7mm x 0.5mm |
|
||||||
| 4 | ```star_washer(M3_washer)``` | Washer star M3 x 0.5mm |
|
| 6 | ```star_washer(M3_washer)``` | Washer star M3 x 0.5mm |
|
||||||
| 2 | ```ziptie(small_ziptie, 3)``` | Ziptie 2.5mm x 100mm min length |
|
| 3 | ```ziptie(small_ziptie, 3)``` | Ziptie 2.5mm x 100mm min length |
|
||||||
|
|
||||||
### Printed
|
### Printed
|
||||||
| Qty | Filename |
|
| Qty | Filename |
|
||||||
| ---:|:--- |
|
| ---:|:--- |
|
||||||
| 1 | psu_shroud_PD_150_12.stl |
|
| 1 | psu_shroud_PD_150_12.stl |
|
||||||
| 1 | psu_shroud_S_250_48.stl |
|
| 1 | psu_shroud_S_250_48.stl |
|
||||||
|
| 1 | psu_shroud_S_300_12.stl |
|
||||||
|
|
||||||
### Assemblies
|
### Assemblies
|
||||||
| Qty | Name |
|
| Qty | Name |
|
||||||
| ---:|:--- |
|
| ---:|:--- |
|
||||||
| 1 | psu_shroud_PD_150_12_assembly |
|
| 1 | PSU_shroud_PD_150_12_assembly |
|
||||||
| 1 | psu_shroud_S_250_48_assembly |
|
| 1 | PSU_shroud_S_250_48_assembly |
|
||||||
|
| 1 | PSU_shroud_S_300_12_assembly |
|
||||||
|
|
||||||
|
|
||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
@@ -4296,15 +4581,15 @@ UK 13A socket and printed backbox with earth terminal for the panel it is mounte
|
|||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
---
|
---
|
||||||
<a name="Ssr_shroud"></a>
|
<a name="SSR_shroud"></a>
|
||||||
## Ssr_shroud
|
## SSR_shroud
|
||||||
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.
|
||||||
|
|
||||||
|
|
||||||
[printed/ssr_shroud.scad](printed/ssr_shroud.scad) Implementation.
|
[printed/ssr_shroud.scad](printed/ssr_shroud.scad) Implementation.
|
||||||
|
|
||||||
[tests/ssr_shroud.scad](tests/ssr_shroud.scad) Code for this example.
|
[tests/SSR_shroud.scad](tests/SSR_shroud.scad) Code for this example.
|
||||||
|
|
||||||
### Functions
|
### Functions
|
||||||
| Function | Description |
|
| Function | Description |
|
||||||
@@ -4344,8 +4629,8 @@ The stl and assembly must be given a name and parameterless wrappers for the stl
|
|||||||
### Assemblies
|
### Assemblies
|
||||||
| Qty | Name |
|
| Qty | Name |
|
||||||
| ---:|:--- |
|
| ---:|:--- |
|
||||||
| 1 | ssr_shroud_SSR10DA_assembly |
|
| 1 | SSR_shroud_SSR10DA_assembly |
|
||||||
| 1 | ssr_shroud_SSR25DA_assembly |
|
| 1 | SSR_shroud_SSR25DA_assembly |
|
||||||
|
|
||||||
|
|
||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
@@ -4769,7 +5054,7 @@ a cylinder. To get around this a colour can be passed to thread that is used to
|
|||||||
|
|
||||||
Making the ends requires a CGAL intersection, which make threads relatively slow. For this reason they are generally disabled when using the GUI but can
|
Making the ends requires a CGAL intersection, which make threads relatively slow. For this reason they are generally disabled when using the GUI but can
|
||||||
be enabled by setting ```$show_threads``` to ```true```. When the tests are run, by default, threads are enabled only for things that feature them like screws.
|
be enabled by setting ```$show_threads``` to ```true```. When the tests are run, by default, threads are enabled only for things that feature them like screws.
|
||||||
This behaviour can be changed by setting a ```SHOW_THREADS``` environment variable to ```false``` to disable all threads and ```true``` to enable all threads.
|
This behaviour can be changed by setting a ```NOPSCADLIB_SHOW_THREADS``` environment variable to ```false``` to disable all threads and ```true``` to enable all threads.
|
||||||
The same variable also affects the generation of assembly diagrams.
|
The same variable also affects the generation of assembly diagrams.
|
||||||
|
|
||||||
Threads obey the $fn, $fa, $fs variables.
|
Threads obey the $fn, $fa, $fs variables.
|
||||||
@@ -4819,8 +5104,8 @@ Simple tube or ring
|
|||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
---
|
---
|
||||||
<a name="Bom"></a>
|
<a name="BOM"></a>
|
||||||
## Bom
|
## BOM
|
||||||
Bill Of Materials generation via echo and the ```bom.py``` script. Also handles exploded assembly views and posing. Assembly instructions can precede the module
|
Bill Of Materials generation via echo and the ```bom.py``` script. Also handles exploded assembly views and posing. Assembly instructions can precede the module
|
||||||
definition that makes the assembly.
|
definition that makes the assembly.
|
||||||
|
|
||||||
@@ -4830,7 +5115,7 @@ heirachical BOMs are also generated for real projects.
|
|||||||
|
|
||||||
[utils/core/bom.scad](utils/core/bom.scad) Implementation.
|
[utils/core/bom.scad](utils/core/bom.scad) Implementation.
|
||||||
|
|
||||||
[tests/bom.scad](tests/bom.scad) Code for this example.
|
[tests/BOM.scad](tests/BOM.scad) Code for this example.
|
||||||
|
|
||||||
### Functions
|
### Functions
|
||||||
| Function | Description |
|
| Function | Description |
|
||||||
@@ -5072,11 +5357,12 @@ Small holes can get away without it, but they print better with truncated teardr
|
|||||||
### Modules
|
### Modules
|
||||||
| Module | Description |
|
| Module | Description |
|
||||||
|:--- |:--- |
|
|:--- |:--- |
|
||||||
| ```semi_teardrop(h, r, d = undef, center = true)``` | A semi teardrop in the positive Y domain |
|
| ```semi_teardrop(h, r, d = undef, center = true, chamfer = 0)``` | A semi teardrop in the positive Y domain |
|
||||||
| ```teardrop(h, r, center = true, truncate = true)``` | For making horizontal holes that don't need support material, set ```truncate = false``` to make traditional RepRap teardrops that don't even need bridging |
|
| ```teardrop(h, r, center = true, truncate = true, chamfer = 0)``` | For making horizontal holes that don't need support material, set ```truncate = false``` to make traditional RepRap teardrops that don't even need bridging |
|
||||||
| ```teardrop_plus(h, r, center = true, truncate = true)``` | Slightly bigger teardrop to allow for the 3D printing staircase effect |
|
| ```teardrop_chamfer(h, center, chamfer)``` | Helper module for adding chamfer to a teardrop |
|
||||||
| ```tearslot(h, r, w, center = true)``` | A horizontal slot that doesn't need support material |
|
| ```teardrop_plus(h, r, center = true, truncate = true, chamfer = 0)``` | Slightly bigger teardrop to allow for the 3D printing staircase effect |
|
||||||
| ```vertical_tearslot(h, r, l, center = true)``` | A vertical slot that doesn't need support material |
|
| ```tearslot(h, r, w, center = true, chamfer = 0)``` | A horizontal slot that doesn't need support material |
|
||||||
|
| ```vertical_tearslot(h, r, l, center = true, chamfer = 0)``` | A vertical slot that doesn't need support material |
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@@ -184,10 +184,17 @@ 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 usage():
|
||||||
|
print("\nusage:\n\tbom [target_config] [<accessory_name>_assembly] - Generate BOMs for a project or an accessory to a project.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
def boms(target = None, assembly = None):
|
def boms(target = None, assembly = None):
|
||||||
bom_dir = set_config(target) + "bom"
|
bom_dir = set_config(target, usage) + "bom"
|
||||||
if assembly:
|
if assembly:
|
||||||
bom_dir += "/accessories"
|
bom_dir += "/accessories"
|
||||||
if not os.path.isdir(bom_dir):
|
if not os.path.isdir(bom_dir):
|
||||||
@@ -214,7 +221,7 @@ def boms(target = None, assembly = None):
|
|||||||
#
|
#
|
||||||
# Run openscad
|
# Run openscad
|
||||||
#
|
#
|
||||||
openscad.run("-D","$bom=2","-D","$preview=true","-o", "openscad.echo", bom_maker_name)
|
openscad.run("-D","$bom=2","-D","$preview=true","-o", "openscad.echo", "-d", bom_dir + "/bom.deps", bom_maker_name)
|
||||||
os.remove(bom_maker_name)
|
os.remove(bom_maker_name)
|
||||||
print("Generating bom ...", end=" ")
|
print("Generating bom ...", end=" ")
|
||||||
|
|
||||||
@@ -236,11 +243,24 @@ def boms(target = None, assembly = None):
|
|||||||
print("done")
|
print("done")
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
args = len(sys.argv)
|
if len(sys.argv) > 3: usage()
|
||||||
if args > 1:
|
|
||||||
if args > 2:
|
if len(sys.argv) == 3:
|
||||||
boms(sys.argv[1], sys.argv[2])
|
target, assembly = sys.argv[1], sys.argv[2]
|
||||||
else:
|
|
||||||
boms(sys.argv[1])
|
|
||||||
else:
|
else:
|
||||||
boms();
|
if len(sys.argv) == 2:
|
||||||
|
if sys.argv[1][-9:] == "_assembly":
|
||||||
|
target, assembly = None, sys.argv[1]
|
||||||
|
else:
|
||||||
|
target, assembly = sys.argv[1], None
|
||||||
|
else:
|
||||||
|
target, assembly = None, None
|
||||||
|
|
||||||
|
if assembly:
|
||||||
|
if assembly[-9:] != "_assembly": usage()
|
||||||
|
|
||||||
|
try:
|
||||||
|
boms(target, assembly)
|
||||||
|
except Exception as e:
|
||||||
|
print(str(e))
|
||||||
|
sys.exit(1)
|
||||||
|
@@ -113,5 +113,5 @@ if __name__ == '__main__':
|
|||||||
if len(sys.argv) == 2:
|
if len(sys.argv) == 2:
|
||||||
canonicalise(sys.argv[1])
|
canonicalise(sys.argv[1])
|
||||||
else:
|
else:
|
||||||
print("usage: c14n_stl file")
|
print("\nusage:\n\t c14n_stl file - Canonicalise an STL file created by OpenSCAD.")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
# If not, see <https://www.gnu.org/licenses/>.
|
# If not, see <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
import os
|
import os
|
||||||
|
from set_config import source_dir
|
||||||
|
|
||||||
def mtime(file):
|
def mtime(file):
|
||||||
if os.path.isfile(file):
|
if os.path.isfile(file):
|
||||||
@@ -32,7 +33,7 @@ def read_deps(dname):
|
|||||||
deps = []
|
deps = []
|
||||||
for line in lines:
|
for line in lines:
|
||||||
if line.startswith('\t'):
|
if line.startswith('\t'):
|
||||||
dep = line[1 : -1].rstrip(' \\')
|
dep = line[1 : -1].rstrip(' \\').replace('\\ ', ' ')
|
||||||
if not os.path.basename(dep) in ['stl.scad', 'dxf.scad', 'svf.scad', 'png.scad', 'target.scad']:
|
if not os.path.basename(dep) in ['stl.scad', 'dxf.scad', 'svf.scad', 'png.scad', 'target.scad']:
|
||||||
deps.append(dep)
|
deps.append(dep)
|
||||||
return deps
|
return deps
|
||||||
@@ -48,3 +49,18 @@ def check_deps(target, dname):
|
|||||||
if mtime(dep) > target_mtime:
|
if mtime(dep) > target_mtime:
|
||||||
return dep + ' changed'
|
return dep + ' changed'
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def source_dirs(bom_dir):
|
||||||
|
dirs = set()
|
||||||
|
lib_dirs = set()
|
||||||
|
deps = read_deps(bom_dir + '/bom.deps')
|
||||||
|
cwd = os.getcwd().replace('\\', '/')
|
||||||
|
for dep in deps:
|
||||||
|
dir = os.path.dirname(dep)
|
||||||
|
if dir.startswith(cwd):
|
||||||
|
dirs.add(dir[len(cwd) + 1:])
|
||||||
|
else:
|
||||||
|
if dir.endswith('/printed'):
|
||||||
|
lib_dirs.add(dir)
|
||||||
|
dirs.remove(source_dir)
|
||||||
|
return [source_dir] + sorted(dirs) + sorted(lib_dirs)
|
||||||
|
@@ -26,6 +26,7 @@ from __future__ import print_function
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
from tests import do_cmd
|
from tests import do_cmd
|
||||||
|
import argparse
|
||||||
|
|
||||||
dir = 'scripts'
|
dir = 'scripts'
|
||||||
|
|
||||||
@@ -40,7 +41,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 = ''
|
||||||
@@ -74,4 +75,5 @@ They should work with both Python 2 and Python 3.
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
argparse.ArgumentParser(description='Generate scripts/readme.md and make html versions of that and doc/usage.md').parse_args()
|
||||||
doc_scripts()
|
doc_scripts()
|
||||||
|
@@ -30,14 +30,14 @@ import times
|
|||||||
from deps import *
|
from deps import *
|
||||||
import json
|
import json
|
||||||
|
|
||||||
def bom_to_parts(target_dir, part_type, assembly = None):
|
def bom_to_parts(bom_dir, part_type, assembly = None):
|
||||||
#
|
#
|
||||||
# Make a list of all the parts in the BOM
|
# Make a list of all the parts in the BOM
|
||||||
#
|
#
|
||||||
part_files = []
|
part_files = []
|
||||||
bom = assembly + '.txt' if assembly else "bom.txt"
|
bom = assembly + '.txt' if assembly else "bom.txt"
|
||||||
suffix = ".dxf" if part_type == 'svg' else '.' + part_type
|
suffix = ".dxf" if part_type == 'svg' else '.' + part_type
|
||||||
with open(target_dir + "/../bom/" + bom, "rt") as f:
|
with open(bom_dir + '/' + bom, "rt") as f:
|
||||||
for line in f.readlines():
|
for line in f.readlines():
|
||||||
words = line.split()
|
words = line.split()
|
||||||
if words:
|
if words:
|
||||||
@@ -46,13 +46,24 @@ def bom_to_parts(target_dir, part_type, assembly = None):
|
|||||||
part_files.append(last_word[:-4] + '.' + part_type)
|
part_files.append(last_word[:-4] + '.' + part_type)
|
||||||
return part_files
|
return part_files
|
||||||
|
|
||||||
|
def usage(t):
|
||||||
|
print("\nusage:\n\t%ss [target_config] [<name1>.%s] ... [<nameN>.%s] - Generate specified %s files or all if none specified." % ( t, t, t, t.upper()))
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
def make_parts(target, part_type, parts = None):
|
def make_parts(target, part_type, parts = None):
|
||||||
#
|
#
|
||||||
|
# Check list of parts is the correct type
|
||||||
|
#
|
||||||
|
if parts:
|
||||||
|
for p in parts:
|
||||||
|
if not p.endswith('.' + part_type): usage(part_type)
|
||||||
|
#
|
||||||
# Make the target directory
|
# Make the target directory
|
||||||
#
|
#
|
||||||
top_dir = set_config(target)
|
top_dir = set_config(target, lambda: usage(part_type))
|
||||||
target_dir = top_dir + part_type + 's'
|
target_dir = top_dir + part_type + 's'
|
||||||
deps_dir = top_dir + "deps"
|
deps_dir = top_dir + "deps"
|
||||||
|
bom_dir = top_dir + "bom"
|
||||||
if not os.path.isdir(target_dir):
|
if not os.path.isdir(target_dir):
|
||||||
os.makedirs(target_dir)
|
os.makedirs(target_dir)
|
||||||
if not os.path.isdir(deps_dir):
|
if not os.path.isdir(deps_dir):
|
||||||
@@ -64,7 +75,7 @@ def make_parts(target, part_type, parts = None):
|
|||||||
if parts:
|
if parts:
|
||||||
targets = list(parts) #copy the list so we dont modify the list passed in
|
targets = list(parts) #copy the list so we dont modify the list passed in
|
||||||
else:
|
else:
|
||||||
targets = bom_to_parts(target_dir, part_type)
|
targets = bom_to_parts(bom_dir, part_type)
|
||||||
for file in os.listdir(target_dir):
|
for file in os.listdir(target_dir):
|
||||||
if file.endswith('.' + part_type):
|
if file.endswith('.' + part_type):
|
||||||
if not file in targets:
|
if not file in targets:
|
||||||
@@ -83,50 +94,49 @@ 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'
|
|
||||||
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_dirs(bom_dir):
|
||||||
for filename in os.listdir(dir):
|
if targets and os.path.isdir(dir):
|
||||||
if filename[-5:] == ".scad":
|
for filename in os.listdir(dir):
|
||||||
#
|
if targets and 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
|
||||||
#
|
#
|
||||||
@@ -138,9 +148,6 @@ def make_parts(target, part_type, parts = None):
|
|||||||
#
|
#
|
||||||
if targets:
|
if targets:
|
||||||
for part in targets:
|
for part in targets:
|
||||||
if part[-4:] != '.' + part_type:
|
print("Could not find a module called", part[:-4] + module_suffix, "to make", part)
|
||||||
print(part, "is not a", part_type, "file")
|
usage(part_type)
|
||||||
else:
|
|
||||||
print("Could not find a module called", part[:-4] + module_suffix, "to make", part)
|
|
||||||
sys.exit(1)
|
|
||||||
times.print_times()
|
times.print_times()
|
||||||
|
@@ -30,6 +30,7 @@ import re
|
|||||||
from shutil import copyfile
|
from shutil import copyfile
|
||||||
from tests import update_image
|
from tests import update_image
|
||||||
import sys
|
import sys
|
||||||
|
import argparse
|
||||||
|
|
||||||
project_dirs = ['../..', 'examples']
|
project_dirs = ['../..', 'examples']
|
||||||
target_dir = 'gallery'
|
target_dir = 'gallery'
|
||||||
@@ -39,7 +40,6 @@ def gallery(force):
|
|||||||
if not os.path.isdir(target_dir):
|
if not os.path.isdir(target_dir):
|
||||||
os.makedirs(target_dir)
|
os.makedirs(target_dir)
|
||||||
|
|
||||||
|
|
||||||
paths = sorted([pdir + '/' + i for pdir in project_dirs for i in os.listdir(pdir) if os.path.isdir(pdir + '/' + i + '/assemblies')], key = lambda s: os.path.basename(s))
|
paths = sorted([pdir + '/' + i for pdir in project_dirs for i in os.listdir(pdir) if os.path.isdir(pdir + '/' + i + '/assemblies')], key = lambda s: os.path.basename(s))
|
||||||
with open(output_name, 'wt') as output_file:
|
with open(output_name, 'wt') as output_file:
|
||||||
print("# A gallery of projects made with NopSCADlib", file = output_file)
|
print("# A gallery of projects made with NopSCADlib", file = output_file)
|
||||||
@@ -78,4 +78,8 @@ def gallery(force):
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
init()
|
init()
|
||||||
gallery(force = len(sys.argv) > 1 and sys.argv[1] == '-f')
|
parser = argparse.ArgumentParser(description='Creates a galley of projects by copying the top level image and description to gallery/readme.md.')
|
||||||
|
parser.add_argument("-f", help = "run make_all in each project to force update", action="store_true")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
gallery(force = args.f)
|
||||||
|
@@ -27,9 +27,17 @@ from bom import boms
|
|||||||
from render import render
|
from render import render
|
||||||
from views import views
|
from views import views
|
||||||
from plateup import plateup
|
from plateup import plateup
|
||||||
|
from set_config import set_config
|
||||||
|
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print("\nusage:\n\tmake_all [target_config] - Make all the manufacturing files and readme for a project.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
if len(sys.argv) > 2: usage()
|
||||||
target = None if len(sys.argv) == 1 else sys.argv[1]
|
target = None if len(sys.argv) == 1 else sys.argv[1]
|
||||||
|
set_config(target, usage)
|
||||||
boms(target)
|
boms(target)
|
||||||
for part in ['stl', 'dxf']:
|
for part in ['stl', 'dxf']:
|
||||||
make_parts(target, part)
|
make_parts(target, part)
|
||||||
|
@@ -23,7 +23,7 @@ import json, os, deps
|
|||||||
|
|
||||||
def check_options(dir = '.'):
|
def check_options(dir = '.'):
|
||||||
global options, options_mtime
|
global options, options_mtime
|
||||||
options = { "show_threads": str(os.getenv("SHOW_THREADS")) }
|
options = { "show_threads": str(os.getenv("NOPSCADLIB_SHOW_THREADS")) }
|
||||||
options_fname = dir + '/options.json'
|
options_fname = dir + '/options.json'
|
||||||
try:
|
try:
|
||||||
with open(options_fname) as json_file:
|
with open(options_fname) as json_file:
|
||||||
|
@@ -25,9 +25,15 @@ import sys
|
|||||||
|
|
||||||
from plateup import plateup
|
from plateup import plateup
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print("\nusage:\n\tpanels [target_config] - Aggregate DXF files for routing together.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
if len(sys.argv) > 2: usage()
|
||||||
|
|
||||||
if len(sys.argv) > 1:
|
if len(sys.argv) > 1:
|
||||||
target = sys.argv[1]
|
target = sys.argv[1]
|
||||||
else:
|
else:
|
||||||
target = None
|
target = None
|
||||||
plateup(target, 'dxf')
|
plateup(target, 'dxf', usage)
|
||||||
|
@@ -31,11 +31,11 @@ from shutil import copyfile
|
|||||||
source_dirs = { "stl" : "platters", "dxf" : "panels" }
|
source_dirs = { "stl" : "platters", "dxf" : "panels" }
|
||||||
target_dirs = { "stl" : "printed", "dxf" : "routed" }
|
target_dirs = { "stl" : "printed", "dxf" : "routed" }
|
||||||
|
|
||||||
def plateup(target, part_type):
|
def plateup(target, part_type, usage = None):
|
||||||
#
|
#
|
||||||
# Make the target directory
|
# Make the target directory
|
||||||
#
|
#
|
||||||
top_dir = set_config(target)
|
top_dir = set_config(target, usage)
|
||||||
parts_dir = top_dir + part_type + 's'
|
parts_dir = top_dir + part_type + 's'
|
||||||
target_dir = parts_dir + '/' + target_dirs[part_type]
|
target_dir = parts_dir + '/' + target_dirs[part_type]
|
||||||
source_dir = top_dir + source_dirs[part_type]
|
source_dir = top_dir + source_dirs[part_type]
|
||||||
|
@@ -25,9 +25,15 @@ import sys
|
|||||||
|
|
||||||
from plateup import plateup
|
from plateup import plateup
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print("\nusage:\n\tplatters [target_config] - Aggregate STL files for printing together.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
if len(sys.argv) > 2: usage()
|
||||||
|
|
||||||
if len(sys.argv) > 1:
|
if len(sys.argv) > 1:
|
||||||
target = sys.argv[1]
|
target = sys.argv[1]
|
||||||
else:
|
else:
|
||||||
target = None
|
target = None
|
||||||
plateup(target, 'stl')
|
plateup(target, 'stl', usage)
|
||||||
|
@@ -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. |
|
||||||
|
@@ -30,17 +30,23 @@ from tests import do_cmd, update_image, colour_scheme, background
|
|||||||
from deps import mtime
|
from deps import mtime
|
||||||
from colorama import init
|
from colorama import init
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print("\nusage:\n\trender [target_config] - Render images of the stl and dxf files.");
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
def render(target, type):
|
def render(target, type):
|
||||||
#
|
#
|
||||||
# Make the target directory
|
# Make the target directory
|
||||||
#
|
#
|
||||||
target_dir = set_config(target) + type + 's'
|
top_dir = set_config(target, usage)
|
||||||
|
target_dir = top_dir + type + 's'
|
||||||
|
bom_dir = top_dir + 'bom'
|
||||||
if not os.path.isdir(target_dir):
|
if not os.path.isdir(target_dir):
|
||||||
os.makedirs(target_dir)
|
os.makedirs(target_dir)
|
||||||
#
|
#
|
||||||
# Find all the parts
|
# Find all the parts
|
||||||
#
|
#
|
||||||
parts = bom_to_parts(target_dir, type)
|
parts = bom_to_parts(bom_dir, type)
|
||||||
#
|
#
|
||||||
# Remove unused png files
|
# Remove unused png files
|
||||||
#
|
#
|
||||||
@@ -59,7 +65,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'
|
||||||
@@ -71,6 +77,7 @@ def render(target, type):
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
init()
|
init()
|
||||||
|
if len(sys.argv) > 2: usage()
|
||||||
target = sys.argv[1] if len(sys.argv) > 1 else None
|
target = sys.argv[1] if len(sys.argv) > 1 else None
|
||||||
render(target, 'stl')
|
render(target, 'stl')
|
||||||
render(target, 'dxf')
|
render(target, 'dxf')
|
||||||
|
@@ -45,20 +45,27 @@ def valid_targets_string():
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
def set_config(target):
|
def set_config(target, usage = None):
|
||||||
|
if target and target[:1] == '-' and usage: usage()
|
||||||
targets = valid_targets()
|
targets = valid_targets()
|
||||||
if not target:
|
if not target:
|
||||||
if not targets:
|
if not targets:
|
||||||
return ""
|
return ""
|
||||||
print("Must specify a configuration: " + valid_targets_string())
|
print("Must specify a configuration: " + valid_targets_string())
|
||||||
|
if usage:
|
||||||
|
usage()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
if not targets:
|
if not targets:
|
||||||
print("Not a muli-configuration project (no config_<target>.scad files found)")
|
print("Not a muli-configuration project (no config_<target>.scad files found)")
|
||||||
|
if usage:
|
||||||
|
usage()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
if not target in targets:
|
if not target in targets:
|
||||||
print(target + " is not a configuration, avaliable configurations are: " + valid_targets_string())
|
print(target + " is not a configuration, avaliable configurations are: " + valid_targets_string())
|
||||||
|
if usage:
|
||||||
|
usage()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
fname = source_dir + "/target.scad"
|
fname = source_dir + "/target.scad"
|
||||||
@@ -75,10 +82,13 @@ def set_config(target):
|
|||||||
f. write(text);
|
f. write(text);
|
||||||
return target + "/"
|
return target + "/"
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print("\nusage:\n\tset_config config_name")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
args = len(sys.argv)
|
args = len(sys.argv)
|
||||||
if args == 2:
|
if args == 2:
|
||||||
set_config(sys.argv[1])
|
set_config(sys.argv[1], usage)
|
||||||
else:
|
else:
|
||||||
print("usage: set_config config_name")
|
usage()
|
||||||
sys.exit(1)
|
|
||||||
|
@@ -85,6 +85,10 @@ def depluralise(name):
|
|||||||
def is_plural(name):
|
def is_plural(name):
|
||||||
return name != depluralise(name)
|
return name != depluralise(name)
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print("\nusage:\n\ttests [test_name1] ... [test_nameN] - Run specified tests or all tests in none specified.");
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
def tests(tests):
|
def tests(tests):
|
||||||
scad_dir = "tests"
|
scad_dir = "tests"
|
||||||
deps_dir = scad_dir + "/deps"
|
deps_dir = scad_dir + "/deps"
|
||||||
@@ -96,6 +100,7 @@ def tests(tests):
|
|||||||
doc_name = "readme.md"
|
doc_name = "readme.md"
|
||||||
index = {}
|
index = {}
|
||||||
bodies = {}
|
bodies = {}
|
||||||
|
done = []
|
||||||
times.read_times()
|
times.read_times()
|
||||||
options.check_options(deps_dir)
|
options.check_options(deps_dir)
|
||||||
#
|
#
|
||||||
@@ -109,13 +114,15 @@ def tests(tests):
|
|||||||
#
|
#
|
||||||
# List of individual part files
|
# List of individual part files
|
||||||
#
|
#
|
||||||
scads = [i for i in sorted(os.listdir(scad_dir)) if i[-5:] == ".scad"]
|
scads = [i for i in sorted(os.listdir(scad_dir), key = lambda s: s.lower()) if i[-5:] == ".scad"]
|
||||||
|
|
||||||
for scad in scads:
|
for scad in scads:
|
||||||
base_name = scad[:-5]
|
base_name = scad[:-5]
|
||||||
if not tests or base_name in tests:
|
if not tests or base_name in tests:
|
||||||
|
done.append(base_name)
|
||||||
print(base_name)
|
print(base_name)
|
||||||
cap_name = base_name[0].capitalize() + base_name[1:]
|
cap_name = base_name[0].capitalize() + base_name[1:]
|
||||||
|
base_name = base_name.lower()
|
||||||
scad_name = scad_dir + '/' + scad
|
scad_name = scad_dir + '/' + scad
|
||||||
png_name = png_dir + '/' + base_name + '.png'
|
png_name = png_dir + '/' + base_name + '.png'
|
||||||
bom_name = bom_dir + '/' + base_name + '.json'
|
bom_name = bom_dir + '/' + base_name + '.json'
|
||||||
@@ -140,11 +147,14 @@ def tests(tests):
|
|||||||
print("Can't find implementation!")
|
print("Can't find implementation!")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
vsplit = "M"
|
vsplit = "AKR" + chr(ord('Z') + 1)
|
||||||
vtype = locations[0][1]
|
vtype = locations[0][1]
|
||||||
types = [vtype + ' A-' + vsplit[0], vtype + ' ' + chr(ord(vsplit) + 1) + '-Z'] + [loc[1] for loc in locations[1 :]]
|
types = [vtype + ' ' + vsplit[i] + '-' + chr(ord(vsplit[i + 1]) - 1) for i in range(len(vsplit) - 1)] + [loc[1] for loc in locations[1 :]]
|
||||||
if type == vtype:
|
if type == vtype:
|
||||||
type = types[0] if cap_name[0] <= vsplit else types[1]
|
for i in range(1, len(vsplit)):
|
||||||
|
if cap_name[0] < vsplit[i]:
|
||||||
|
type = types[i - 1]
|
||||||
|
break
|
||||||
|
|
||||||
for t in types:
|
for t in types:
|
||||||
if not t in bodies:
|
if not t in bodies:
|
||||||
@@ -188,10 +198,10 @@ def tests(tests):
|
|||||||
|
|
||||||
body += ["\n" %(base_name, png_name)]
|
body += ["\n" %(base_name, png_name)]
|
||||||
|
|
||||||
dname = deps_name(deps_dir, scad)
|
dname = deps_name(deps_dir, scad.lower())
|
||||||
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.lower())
|
||||||
changed = options.have_changed(changed, oldest)
|
changed = options.have_changed(changed, oldest)
|
||||||
if changed:
|
if changed:
|
||||||
print(changed)
|
print(changed)
|
||||||
@@ -230,6 +240,14 @@ def tests(tests):
|
|||||||
body += ['\n<a href="#top">Top</a>']
|
body += ['\n<a href="#top">Top</a>']
|
||||||
body += ["\n---"]
|
body += ["\n---"]
|
||||||
|
|
||||||
|
for test in done:
|
||||||
|
if test in tests:
|
||||||
|
tests.remove(test)
|
||||||
|
if tests:
|
||||||
|
for test in tests:
|
||||||
|
print(Fore.MAGENTA + "Could not find a test called", test, Fore.WHITE)
|
||||||
|
usage()
|
||||||
|
|
||||||
with open(doc_name, "wt") as doc_file:
|
with open(doc_name, "wt") as doc_file:
|
||||||
print('# NopSCADlib', file = doc_file)
|
print('# NopSCADlib', file = doc_file)
|
||||||
print('''\
|
print('''\
|
||||||
@@ -275,4 +293,6 @@ See [usage](docs/usage.md) for requirements, installation instructions and a usa
|
|||||||
do_cmd('codespell -L od readme.md'.split())
|
do_cmd('codespell -L od readme.md'.split())
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
for arg in sys.argv[1:]:
|
||||||
|
if arg[:1] == '-': usage()
|
||||||
tests(sys.argv[1:])
|
tests(sys.argv[1:])
|
||||||
|
163
scripts/views.py
@@ -71,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):
|
||||||
@@ -88,12 +89,24 @@ def eop(print_mode, doc_file, last = False, first = False):
|
|||||||
def pad(s, before, after = 0):
|
def pad(s, before, after = 0):
|
||||||
return ' ' * before + str(s) + ' ' * after
|
return ' ' * before + str(s) + ' ' * after
|
||||||
|
|
||||||
|
def titalise(name):
|
||||||
|
cap_next = True
|
||||||
|
result = ''
|
||||||
|
for c in name.replace('_', ' '):
|
||||||
|
result = result + (c.upper() if cap_next else c);
|
||||||
|
cap_next = c == ' '
|
||||||
|
return result
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print("\nusage:\n\t views [target_config] [<name1>_assembly] ... [<nameN>_assembly] - Create assembly images and readme.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
def views(target, do_assemblies = None):
|
def views(target, do_assemblies = None):
|
||||||
done_assemblies = []
|
done_assemblies = []
|
||||||
#
|
#
|
||||||
# Make the target directory
|
# Make the target directory
|
||||||
#
|
#
|
||||||
top_dir = set_config(target)
|
top_dir = set_config(target, usage)
|
||||||
target_dir = top_dir + 'assemblies'
|
target_dir = top_dir + 'assemblies'
|
||||||
deps_dir = top_dir + "deps"
|
deps_dir = top_dir + "deps"
|
||||||
bom_dir = top_dir + "bom"
|
bom_dir = top_dir + "bom"
|
||||||
@@ -108,9 +121,10 @@ def views(target, do_assemblies = None):
|
|||||||
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)
|
||||||
#
|
#
|
||||||
# Find all the assemblies
|
# Find all the assemblies and remove any old views
|
||||||
#
|
#
|
||||||
assemblies = bom_to_assemblies(bom_dir, bounds_map)
|
assemblies = bom_to_assemblies(bom_dir, bounds_map)
|
||||||
|
lc_assemblies = [ass.lower() for ass in assemblies]
|
||||||
for file in os.listdir(target_dir):
|
for file in os.listdir(target_dir):
|
||||||
if file.endswith('.png'):
|
if file.endswith('.png'):
|
||||||
assembly = file[:-4].replace('_assembled', '_assembly')
|
assembly = file[:-4].replace('_assembled', '_assembly')
|
||||||
@@ -123,67 +137,69 @@ 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'
|
for dir in source_dirs(bom_dir):
|
||||||
for dir in [source_dir, lib_dir]:
|
if os.path.isdir(dir):
|
||||||
for filename in os.listdir(dir):
|
for filename in os.listdir(dir):
|
||||||
if filename.endswith('.scad'):
|
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:
|
with open(dir + "/" + filename, "r") as f:
|
||||||
lines = f.readlines()
|
lines = f.readlines()
|
||||||
line_no = 0
|
line_no = 0
|
||||||
for line in lines:
|
for line in lines:
|
||||||
words = line.split()
|
words = line.split()
|
||||||
if len(words) and words[0] == "module":
|
if len(words) and words[0] == "module":
|
||||||
module = words[1].split('(')[0]
|
module = words[1].split('(')[0]
|
||||||
if is_assembly(module):
|
if is_assembly(module):
|
||||||
if module in assemblies:
|
lc_module = module.lower()
|
||||||
#
|
if lc_module in lc_assemblies:
|
||||||
# Scrape the assembly instructions
|
real_name = assemblies[lc_assemblies.index(lc_module)]
|
||||||
#
|
|
||||||
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"] == real_name:
|
||||||
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 the created file
|
if not do_assemblies or real_name 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 + '/' + real_name + '.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')
|
||||||
changed = options.have_changed(changed, png_name)
|
changed = check_deps(png_name, dname)
|
||||||
tmp_name = 'tmp.png'
|
changed = times.check_have_time(changed, png_name)
|
||||||
if changed:
|
changed = options.have_changed(changed, png_name)
|
||||||
print(changed)
|
tmp_name = 'tmp.png'
|
||||||
t = time.time()
|
if changed:
|
||||||
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]);
|
print(changed)
|
||||||
times.add_time(png_name, t)
|
#
|
||||||
do_cmd(["magick", tmp_name, "-trim", "-resize", "1004x1004", "-bordercolor", background, "-border", "10", tmp_name])
|
# make a file to use the module
|
||||||
update_image(tmp_name, png_name)
|
#
|
||||||
tn_name = png_name.replace('.png', '_tn.png')
|
png_maker_name = 'png.scad'
|
||||||
if mtime(png_name) > mtime(tn_name):
|
with open(png_maker_name, "w") as f:
|
||||||
do_cmd(("magick "+ png_name + " -trim -resize 280x280 -background " + background + " -gravity Center -extent 280x280 -bordercolor " + background + " -border 10 " + tmp_name).split())
|
f.write("use <%s/%s>\n" % (dir, filename))
|
||||||
update_image(tmp_name, tn_name)
|
f.write("%s();\n" % module);
|
||||||
os.remove(png_maker_name)
|
t = time.time()
|
||||||
done_assemblies.append(module)
|
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]);
|
||||||
else:
|
times.add_time(png_name, t)
|
||||||
if module == 'main_assembly':
|
do_cmd(["magick", tmp_name, "-trim", "-resize", "1004x1004", "-bordercolor", background, "-border", "10", tmp_name])
|
||||||
main_blurb = blurb.scrape_module_blurb(lines[:line_no])
|
update_image(tmp_name, png_name)
|
||||||
line_no += 1
|
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(real_name)
|
||||||
|
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
|
||||||
@@ -214,7 +230,7 @@ def views(target, do_assemblies = None):
|
|||||||
print('1. [Parts list](#Parts_list)', file = doc_file)
|
print('1. [Parts list](#Parts_list)', file = doc_file)
|
||||||
for ass in flat_bom:
|
for ass in flat_bom:
|
||||||
name = ass["name"]
|
name = ass["name"]
|
||||||
cap_name = name.replace('_', ' ').title()
|
cap_name = titalise(name)
|
||||||
print('1. [%s](#%s)' % (cap_name, name), file = doc_file)
|
print('1. [%s](#%s)' % (cap_name, name), file = doc_file)
|
||||||
print(file = doc_file)
|
print(file = doc_file)
|
||||||
eop(print_mode, doc_file)
|
eop(print_mode, doc_file)
|
||||||
@@ -235,11 +251,11 @@ def views(target, do_assemblies = None):
|
|||||||
else:
|
else:
|
||||||
things[t][thing] = ass[t][thing]
|
things[t][thing] = ass[t][thing]
|
||||||
for ass in flat_bom:
|
for ass in flat_bom:
|
||||||
name = ass["name"][:-9].replace('_', ' ').title().replace(' ',' ')
|
name = titalise(ass["name"][:-9]).replace(' ',' ')
|
||||||
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]:
|
||||||
@@ -272,7 +288,7 @@ def views(target, do_assemblies = None):
|
|||||||
#
|
#
|
||||||
for ass in flat_bom:
|
for ass in flat_bom:
|
||||||
name = ass["name"]
|
name = ass["name"]
|
||||||
cap_name = name.replace('_', ' ').title()
|
cap_name = titalise(name)
|
||||||
|
|
||||||
if ass["count"] > 1:
|
if ass["count"] > 1:
|
||||||
print('<a name="%s"></a>\n## %d x %s' % (name, ass["count"], cap_name), file = doc_file)
|
print('<a name="%s"></a>\n## %d x %s' % (name, ass["count"], cap_name), file = doc_file)
|
||||||
@@ -282,7 +298,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)
|
||||||
@@ -296,7 +312,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' % (part, part.replace('.stl','.png'), '|\n' if j == j - 1 else ''), end = '', file = doc_file)
|
print('|  %s' % (part, part.replace('.stl','.png'), '|\n' if j == j - 1 else ''), end = '', file = doc_file)
|
||||||
@@ -312,7 +328,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' % (part, part.replace('.dxf','.png'), '|\n' if j == j - 1 else ''), end = '', file = doc_file)
|
print('|  %s' % (part, part.replace('.dxf','.png'), '|\n' if j == j - 1 else ''), end = '', file = doc_file)
|
||||||
@@ -328,7 +344,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' % (a, a + '_tn.png', '|\n' if j == j - 1 else ''), end = '', file = doc_file)
|
print('|  %s' % (a, a + '_tn.png', '|\n' if j == j - 1 else ''), end = '', file = doc_file)
|
||||||
@@ -383,4 +399,7 @@ if __name__ == '__main__':
|
|||||||
else:
|
else:
|
||||||
target, assemblies = None, sys.argv[1:]
|
target, assemblies = None, sys.argv[1:]
|
||||||
|
|
||||||
|
for a in assemblies:
|
||||||
|
if a[-9:] != "_assembly": usage()
|
||||||
|
|
||||||
views(target, assemblies)
|
views(target, assemblies)
|
||||||
|
@@ -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;
|
@@ -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)
|
33
tests/KP_pillow_blocks.scad
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
//
|
||||||
|
// NopSCADlib Copyright Chris Palmer 2018
|
||||||
|
// nop.head@gmail.com
|
||||||
|
// hydraraptor.blogspot.com
|
||||||
|
//
|
||||||
|
// This file is part of NopSCADlib.
|
||||||
|
//
|
||||||
|
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
|
||||||
|
// GNU General Public License as published by the Free Software Foundation, either version 3 of
|
||||||
|
// the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
// See the GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
||||||
|
// If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
include <../core.scad>
|
||||||
|
include <../vitamins/kp_pillow_blocks.scad>
|
||||||
|
|
||||||
|
use <../utils/layout.scad>
|
||||||
|
|
||||||
|
module kp_pillow_blocks() {
|
||||||
|
screws = [M4_cap_screw, M4_cap_screw, M5_cap_screw, M5_cap_screw];
|
||||||
|
nuts = [M4_sliding_t_nut, M4_hammer_nut, M5_sliding_t_nut, M5_nut];
|
||||||
|
assert(len(screws) == len(kp_pillow_blocks) && len(nuts) == len(kp_pillow_blocks));
|
||||||
|
layout([for(k = kp_pillow_blocks) 2 * kp_size(k)[1]])
|
||||||
|
kp_pillow_block_assembly(kp_pillow_blocks[$i], screw_type = screws[$i], nut_type = nuts[$i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($preview)
|
||||||
|
kp_pillow_blocks();
|
@@ -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/leds.scad>
|
include <../vitamins/leds.scad>
|
109
tests/PCB.scad
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
//
|
||||||
|
// 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 <../core.scad>
|
||||||
|
include <../vitamins/microswitches.scad>
|
||||||
|
include <../vitamins/d_connectors.scad>
|
||||||
|
|
||||||
|
use <../vitamins/pcb.scad>
|
||||||
|
|
||||||
|
gt_5x17 = ["gt_5x17", 5, 10, 17, 5, 11, 0.4, 9, 2,1.5, 1, 3, 6, 0, 0, 0];
|
||||||
|
gt_5x11 = ["gt_5x11", 5, 8, 11, 5, 7, 0.4, 7, 1.5,1.5, 1,2.5, 6, 0, 0, 0];
|
||||||
|
|
||||||
|
TMC2130HeatSinkColor = "DeepSkyBlue";
|
||||||
|
TMC2130 = ["TMC2130", "TMC2130",
|
||||||
|
20, 14, 1.6, 0, 3, 0, "white", false, [],
|
||||||
|
[
|
||||||
|
[ 10, 1, 0, "-2p54header", 8, 1 ,undef, "blue" ],
|
||||||
|
[ 10, 13, 0, "-2p54header", 8, 1],
|
||||||
|
[ 12, 7, 0, "-chip", 6, 4, 1, grey20 ],
|
||||||
|
// mock up a heat sink
|
||||||
|
[ 10, 7, 0, "block", 9, 9, 2, TMC2130HeatSinkColor ],
|
||||||
|
[ 10, 11, 0, "block", 9, 1, 11, TMC2130HeatSinkColor ],
|
||||||
|
[ 10, 9, 0, "block", 9, 1, 11, TMC2130HeatSinkColor ],
|
||||||
|
[ 10, 7, 0, "block", 9, 1, 11, TMC2130HeatSinkColor ],
|
||||||
|
[ 10, 5, 0, "block", 9, 1, 11, TMC2130HeatSinkColor ],
|
||||||
|
[ 10, 3, 0, "block", 9, 1, 11, TMC2130HeatSinkColor ],
|
||||||
|
],
|
||||||
|
[]
|
||||||
|
];
|
||||||
|
|
||||||
|
test_pcb = ["TestPCB", "Test PCB",
|
||||||
|
50, 500, 1.6, // length, width, thickness
|
||||||
|
3, // Corner radius
|
||||||
|
2.75, // Mounting hole diameter
|
||||||
|
6, // Pad around mounting hole
|
||||||
|
"green",// Color
|
||||||
|
false, // True if the parts should be separate BOM items
|
||||||
|
// hole offsets
|
||||||
|
[ [3, 3], [3, -3], [-3, 3], [-3, -3] ],
|
||||||
|
// components
|
||||||
|
[
|
||||||
|
[ 10, 10, 0, "2p54header", 4, 1],
|
||||||
|
[ 25, 10, 0, "2p54header", 5, 1, undef, "blue" ],
|
||||||
|
[ 10, 20, 0, "2p54boxhdr", 4, 2],
|
||||||
|
[ 10, 30, 0, "2p54socket", 6, 1],
|
||||||
|
[ 25, 30, 0, "2p54socket", 4, 1, undef, undef, undef, "red" ],
|
||||||
|
[ 10, 40, 0, "chip", 10, 5, 1, grey20],
|
||||||
|
[ 10, 60, 180, "rj45"],
|
||||||
|
[ 8, 80, 180, "usb_A"],
|
||||||
|
[ 8, 100, 180, "usb_Ax2"],
|
||||||
|
[ 3, 120, 180, "usb_uA"],
|
||||||
|
[ 8, 140, 180, "usb_B"],
|
||||||
|
[ 10, 160, 0, "buzzer"],
|
||||||
|
[ 25, 160, 0, "buzzer", 4.5, 8.5],
|
||||||
|
[ 10, 175, 0, "potentiometer"],
|
||||||
|
[ 30, 175, 0, "potentiometer", 7, 8],
|
||||||
|
[ 8, 190, 180, "jack"],
|
||||||
|
[ 6, 200, 180, "barrel_jack"],
|
||||||
|
[ 5, 220, 180, "hdmi"],
|
||||||
|
[ 3, 240, 180, "mini_hdmi"],
|
||||||
|
[ 10, 250, 0, "flex"],
|
||||||
|
[ 10, 265, 0, "flat_flex"],
|
||||||
|
[ 10, 280, 0, "D_plug", DCONN9],
|
||||||
|
[ 10, 300, 0, "molex_hdr", 2],
|
||||||
|
[ 10, 310, 0, "jst_xh", 2],
|
||||||
|
[ 10, 320, 180, "term254", 3],
|
||||||
|
[ 20, 320, 180, "term254", 3, undef, grey20],
|
||||||
|
[ 10, 340, 180, "gterm35", 4, [1,2]],
|
||||||
|
[ 20, 340, 180, "gterm35", 4, [1,2], "red"],
|
||||||
|
[ 30, 340, 180, "gterm", gt_5x11, 3],
|
||||||
|
[ 10, 360, 180, "gterm635", 2],
|
||||||
|
[ 25, 360, 180, "gterm635", 2, undef, "blue"],
|
||||||
|
[ 40, 360, 180, "gterm", gt_5x17, 2, undef, grey20],
|
||||||
|
[ 40, 340, 180, "gterm", gt_5x17, 3, [1], "red"],
|
||||||
|
[ 10, 380, 180, "term35", 4],
|
||||||
|
[ 20, 380, 180, "term35", 3, "lime"],
|
||||||
|
[ 10, 400, 0, "transition", 5],
|
||||||
|
[ 10, 410, 0, "block", 10, 5, 8, "orange"],
|
||||||
|
[ 10, 420, 0, "button_6mm"],
|
||||||
|
[ 10, 435, 0, "microswitch", small_microswitch],
|
||||||
|
[ 12, 450, 0, "pcb", 11, TMC2130 ],
|
||||||
|
[ 12, 456, 0, "2p54socket", 8, 1 ],
|
||||||
|
[ 12, 444, 0, "2p54socket", 8, 1, undef, undef, undef, "red" ],
|
||||||
|
[ 10, 470, 0, "standoff", 5, 4.5, 12.5, 2.54],
|
||||||
|
[ 6, 480, 180, "uSD", [12, 11.5, 1.4]],
|
||||||
|
],
|
||||||
|
// accessories
|
||||||
|
[]
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
if($preview)
|
||||||
|
let($show_threads = true)
|
||||||
|
pcb(test_pcb);
|
@@ -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/pcb_mount.scad>
|
use <../printed/pcb_mount.scad>
|
||||||
|
|
||||||
PI_IO = ["PI_IO", "PI_IO V2", 35.56, 25.4, 1.6, 0, 0, 0, "green", true, [],
|
PI_IO = ["PI_IO", "PI_IO V2", 35.56, 25.4, 1.6, 0, 0, 0, "green", true, [],
|
@@ -17,11 +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/d_connectors.scad>
|
|
||||||
include <../vitamins/pcbs.scad>
|
include <../vitamins/pcbs.scad>
|
||||||
|
|
||||||
|
use <../utils/layout.scad>
|
||||||
|
|
||||||
module pcbs()
|
module pcbs()
|
||||||
layout([for(p = pcbs) pcb_width(p)], 10)
|
layout([for(p = pcbs) pcb_width(p)], 10)
|
||||||
translate([0, pcb_length(pcbs[$i]) / 2])
|
translate([0, pcb_length(pcbs[$i]) / 2])
|
@@ -17,10 +17,9 @@
|
|||||||
// 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/screws.scad>
|
|
||||||
include <../vitamins/psus.scad>
|
include <../vitamins/psus.scad>
|
||||||
|
|
||||||
|
use <../utils/layout.scad>
|
||||||
use <../printed/psu_shroud.scad>
|
use <../printed/psu_shroud.scad>
|
||||||
|
|
||||||
thickness = 3;
|
thickness = 3;
|
@@ -17,11 +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/screws.scad>
|
|
||||||
include <../vitamins/psus.scad>
|
include <../vitamins/psus.scad>
|
||||||
|
|
||||||
|
use <../utils/layout.scad>
|
||||||
|
|
||||||
module psus()
|
module psus()
|
||||||
layout([for(p = psus) psu_width(p)], 10) let(p = psus[$i])
|
layout([for(p = psus) psu_width(p)], 10) let(p = psus[$i])
|
||||||
rotate(atx_psu(p) ? 0 : 90) {
|
rotate(atx_psu(p) ? 0 : 90) {
|
@@ -17,12 +17,12 @@
|
|||||||
// 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/scs_bearing_blocks.scad>
|
include <../vitamins/scs_bearing_blocks.scad>
|
||||||
|
|
||||||
|
use <../utils/layout.scad>
|
||||||
|
|
||||||
module scs_bearing_blocks()
|
module scs_bearing_blocks()
|
||||||
layout([for(s = scs_bearing_blocks) 2 * scs_size(s)[0]]) {
|
layout([for(s = scs_bearing_blocks) scs_size(s).x], 10) {
|
||||||
part_thickness = 5;
|
part_thickness = 5;
|
||||||
scs_bearing_block_assembly(scs_bearing_blocks[$i], part_thickness);
|
scs_bearing_block_assembly(scs_bearing_blocks[$i], part_thickness);
|
||||||
|
|
39
tests/SK_brackets.scad
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
//
|
||||||
|
// NopSCADlib Copyright Chris Palmer 2018
|
||||||
|
// nop.head@gmail.com
|
||||||
|
// hydraraptor.blogspot.com
|
||||||
|
//
|
||||||
|
// This file is part of NopSCADlib.
|
||||||
|
//
|
||||||
|
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
|
||||||
|
// GNU General Public License as published by the Free Software Foundation, either version 3 of
|
||||||
|
// the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
// See the GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License along with NopSCADlib.
|
||||||
|
// If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
include <../core.scad>
|
||||||
|
include <../vitamins/sk_brackets.scad>
|
||||||
|
include <../vitamins/extrusions.scad>
|
||||||
|
|
||||||
|
use <../utils/layout.scad>
|
||||||
|
|
||||||
|
module sk_brackets() {
|
||||||
|
screws = [M4_dome_screw, M4_cap_screw, M5_cap_screw, M5_cap_screw];
|
||||||
|
nuts = [M4_hammer_nut, M4_sliding_t_nut, M5_sliding_t_nut, undef];
|
||||||
|
// channel depth = 6 for 2020 extrusion, 9 for 3030 extrusion
|
||||||
|
depths = [6, 6, 9, 0];
|
||||||
|
layout([for(s = sk_brackets) 1.5 * sk_size(s)[1]]) {
|
||||||
|
sk_bracket_assembly(sk_brackets[$i], screw_type = screws[$i], nut_type = nuts[$i], max_screw_depth = depths[$i]);
|
||||||
|
translate([0, -sk_hole_offset(sk_brackets[$i]) - extrusion_width($i < 2 ? E2020 : E3030) / 2, 0])
|
||||||
|
rotate([0, 90, 0])
|
||||||
|
extrusion($i < 2 ? E2020 : E3030, 20, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($preview)
|
||||||
|
sk_brackets();
|
@@ -17,10 +17,9 @@
|
|||||||
// 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/screws.scad>
|
|
||||||
include <../vitamins/ssrs.scad>
|
include <../vitamins/ssrs.scad>
|
||||||
|
|
||||||
|
use <../utils/layout.scad>
|
||||||
use <../printed/ssr_shroud.scad>
|
use <../printed/ssr_shroud.scad>
|
||||||
|
|
||||||
thickness = 3;
|
thickness = 3;
|
@@ -17,11 +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/screws.scad>
|
|
||||||
include <../vitamins/ssrs.scad>
|
include <../vitamins/ssrs.scad>
|
||||||
|
|
||||||
|
use <../utils/layout.scad>
|
||||||
|
|
||||||
module ssrs()
|
module ssrs()
|
||||||
layout([for(s = ssrs) ssr_width(s)], 15)
|
layout([for(s = ssrs) ssr_width(s)], 15)
|
||||||
rotate(90)
|
rotate(90)
|
@@ -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() {
|
||||||
|
@@ -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()
|
||||||
|
@@ -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() {
|
||||||
|
@@ -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>
|
||||||
|
@@ -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()
|
||||||
|
@@ -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>
|
||||||
|
|
||||||
|
@@ -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>
|
||||||
|
@@ -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>
|
||||||
|
|
||||||
|
@@ -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>
|
||||||
|
@@ -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>
|
||||||
|
|
||||||
|
@@ -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>
|
||||||
|
|
||||||
|
@@ -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()
|
||||||
|
@@ -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);
|
||||||
|
@@ -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()
|
||||||
|
@@ -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)
|
||||||
|