mirror of
https://github.com/DJSundog/NopSCADlib.git
synced 2024-11-27 01:03:51 -05:00
Added printed pocket_handle().
This commit is contained in:
parent
fe0f32ddc5
commit
8474718884
BIN
libtest.png
BIN
libtest.png
Binary file not shown.
Before Width: | Height: | Size: 882 KiB After Width: | Height: | Size: 886 KiB |
@ -117,6 +117,7 @@ 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/PCB_mount.scad>
|
||||||
|
use <tests/pocket_handle.scad>
|
||||||
use <tests/printed_box.scad>
|
use <tests/printed_box.scad>
|
||||||
use <tests/printed_pulleys.scad>
|
use <tests/printed_pulleys.scad>
|
||||||
use <tests/ribbon_clamp.scad>
|
use <tests/ribbon_clamp.scad>
|
||||||
@ -180,7 +181,10 @@ translate([x5, cable_grommets_y + 250])
|
|||||||
translate([950, 600])
|
translate([950, 600])
|
||||||
box_test();
|
box_test();
|
||||||
|
|
||||||
translate([890, 750])
|
translate([830, 770])
|
||||||
|
pocket_handles();
|
||||||
|
|
||||||
|
translate([950, 750])
|
||||||
printed_boxes();
|
printed_boxes();
|
||||||
|
|
||||||
translate([850, 1330])
|
translate([850, 1330])
|
||||||
|
154
printed/pocket_handle.scad
Normal file
154
printed/pocket_handle.scad
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
//
|
||||||
|
// NopSCADlib Copyright Chris Palmer 2021
|
||||||
|
// 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/>.
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
//! Customisable pocket handle
|
||||||
|
//
|
||||||
|
include <../core.scad>
|
||||||
|
|
||||||
|
function pocket_handle(hand_size = [90, 40, 40], slant = 35, screw = M3_cs_cap_screw, panel_t = 3, wall = 4, rad = 4) = //! Construct a pocket_handle property list
|
||||||
|
[hand_size, slant, screw, panel_t, wall, rad];
|
||||||
|
|
||||||
|
function pocket_handle_hand_size(type) = type[0]; //! Size of the hole for the fingers
|
||||||
|
function pocket_handle_slant(type) = type[1]; //! Upward slant of the hand hole
|
||||||
|
function pocket_handle_screw(type) = type[2]; //! Screw type, can be countersunk or not
|
||||||
|
function pocket_handle_panel_t(type) = type[3]; //! Thickness of the panel it is mounted in
|
||||||
|
function pocket_handle_wall(type) = type[4]; //! Wall thickness
|
||||||
|
function pocket_handle_rad(type) = type[5]; //! Min corner rad
|
||||||
|
|
||||||
|
function pocket_handle_flange(type) = //! Size of the flange
|
||||||
|
let(w = pocket_handle_wall(type),
|
||||||
|
f = washer_diameter(screw_washer(pocket_handle_screw(type))) + 2 + w,
|
||||||
|
s = pocket_handle_hand_size(type))
|
||||||
|
[s.x + 2 * f, s.y + 2 * f, w];
|
||||||
|
|
||||||
|
module pocket_handle_hole_positions(type) { //! Place children at screw hole positions
|
||||||
|
f = pocket_handle_flange(type);
|
||||||
|
h = pocket_handle_hand_size(type);
|
||||||
|
x_pitch = (f.x + h.x) / 4;
|
||||||
|
y_pitch = (f.y + h.y) / 4;
|
||||||
|
|
||||||
|
for(x = [-1, 1], y = [-1, 1])
|
||||||
|
translate([x * x_pitch, y * y_pitch])
|
||||||
|
children();
|
||||||
|
}
|
||||||
|
|
||||||
|
module pocket_handle_holes(type, h = 0) { //! Panel cutout and screw holes
|
||||||
|
hand = pocket_handle_hand_size(type);
|
||||||
|
w = pocket_handle_wall(type);
|
||||||
|
slot = [hand.x + 2 * w, hand.y + 2 * w];
|
||||||
|
t = pocket_handle_panel_t(type);
|
||||||
|
clearance = norm([slot.y, t]) - slot.y + 0.2; // has to be enough clearance for the diagonal to swing it in
|
||||||
|
|
||||||
|
extrude_if(h) {
|
||||||
|
pocket_handle_hole_positions(type)
|
||||||
|
drill(screw_clearance_radius(pocket_handle_screw(type)), 0);
|
||||||
|
|
||||||
|
rounded_square([slot.x + clearance, slot.y + clearance], pocket_handle_rad(type) + w + clearance / 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module pocket_handle(type) { //! Generate STL for pocket_handle
|
||||||
|
f = pocket_handle_flange(type);
|
||||||
|
r = pocket_handle_rad(type);
|
||||||
|
s = pocket_handle_slant(type);
|
||||||
|
o = f.z * tan(s);
|
||||||
|
h = pocket_handle_hand_size(type);
|
||||||
|
t = pocket_handle_panel_t(type);
|
||||||
|
w = pocket_handle_wall(type);
|
||||||
|
screw = pocket_handle_screw(type) ;
|
||||||
|
|
||||||
|
stl("pocket_handle")
|
||||||
|
union() {
|
||||||
|
difference() {
|
||||||
|
hull() {
|
||||||
|
rounded_rectangle(f, r);
|
||||||
|
|
||||||
|
translate_z(f.z - eps)
|
||||||
|
rounded_rectangle([f.x + 2 * o, f.y + 2 * o, eps], r + o);
|
||||||
|
}
|
||||||
|
hull() {
|
||||||
|
rounded_rectangle([h.x, h.y, f.z + eps], r);
|
||||||
|
|
||||||
|
translate_z(-eps)
|
||||||
|
rounded_rectangle([h.x + 2 * o, h.y + 2 * o, eps], r + o);
|
||||||
|
}
|
||||||
|
pocket_handle_hole_positions(type) {
|
||||||
|
if(screw_head_height(screw))
|
||||||
|
translate_z(-eps)
|
||||||
|
poly_cylinder(r = screw_clearance_radius(screw), h = f.z + 2 * eps, center = false);
|
||||||
|
else
|
||||||
|
screw_polysink(screw, h = 2 * f.z + eps, alt = true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
translate_z(f.z)
|
||||||
|
linear_extrude(t)
|
||||||
|
difference() {
|
||||||
|
rounded_square([h.x + 2 * w, h.y + 2 * w], r + w);
|
||||||
|
|
||||||
|
rounded_square([h.x, h.y], r);
|
||||||
|
}
|
||||||
|
|
||||||
|
translate_z(f.z + t)
|
||||||
|
difference() {
|
||||||
|
height = h.z - f.z - t;
|
||||||
|
hull() {
|
||||||
|
rounded_rectangle([h.x + 2 * w, h.y + 2 * w, eps], r + w);
|
||||||
|
|
||||||
|
translate((height + w) * [0, sin(s), cos(s)])
|
||||||
|
rounded_rectangle([h.x + 2 * w, h.y + 2 * w, eps], r + w);
|
||||||
|
}
|
||||||
|
|
||||||
|
hull() {
|
||||||
|
translate_z(-eps)
|
||||||
|
rounded_rectangle([h.x, h.y, eps], r);
|
||||||
|
|
||||||
|
translate(height * [0, sin(s), cos(s)])
|
||||||
|
rounded_rectangle([h.x, h.y, eps], r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module pocket_handle_assembly(type) { //! Assembly with fasteners in place
|
||||||
|
f = pocket_handle_flange(type);
|
||||||
|
screw = pocket_handle_screw(type);
|
||||||
|
nut = screw_nut(screw);
|
||||||
|
t = pocket_handle_panel_t(type);
|
||||||
|
washers = screw_head_height(screw) ? 2 : 1;
|
||||||
|
screw_length = screw_length(screw, f.z + t, washers, nyloc = true);
|
||||||
|
|
||||||
|
translate_z(f.z + t / 2) hflip() {
|
||||||
|
stl_colour(pp1_colour)
|
||||||
|
pocket_handle(type);
|
||||||
|
|
||||||
|
pocket_handle_hole_positions(type) {
|
||||||
|
translate_z(f.z + t)
|
||||||
|
explode(15, true)
|
||||||
|
nut_and_washer(nut, true);
|
||||||
|
|
||||||
|
vflip()
|
||||||
|
if(washers == 2)
|
||||||
|
screw_and_washer(screw, screw_length);
|
||||||
|
else
|
||||||
|
screw(screw, screw_length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
68
readme.md
68
readme.md
@ -35,15 +35,15 @@ See [usage](docs/usage.md) for requirements, installation instructions and a usa
|
|||||||
<tr><td> <a href = "#Displays">Displays</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_cylinder">Rounded_cylinder</a> </td><td></td></tr>
|
<tr><td> <a href = "#Displays">Displays</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_cylinder">Rounded_cylinder</a> </td><td></td></tr>
|
||||||
<tr><td> <a href = "#Extrusion_brackets">Extrusion_brackets</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 = "#Rounded_polygon">Rounded_polygon</a> </td><td></td></tr>
|
<tr><td> <a href = "#Extrusion_brackets">Extrusion_brackets</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 = "#Rounded_polygon">Rounded_polygon</a> </td><td></td></tr>
|
||||||
<tr><td> <a href = "#Extrusions">Extrusions</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 = "#Rounded_right_triangle">Rounded_right_triangle</a> </td><td></td></tr>
|
<tr><td> <a href = "#Extrusions">Extrusions</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 = "#Rounded_right_triangle">Rounded_right_triangle</a> </td><td></td></tr>
|
||||||
<tr><td> <a href = "#Fans">Fans</a> </td><td> <a href = "#PCB">PCB</a> </td><td> <a href = "#Swiss_clips">Swiss_clips</a> </td><td> <a href = "#Press_fit">Press_fit</a> </td><td> <a href = "#Sector">Sector</a> </td><td></td></tr>
|
<tr><td> <a href = "#Fans">Fans</a> </td><td> <a href = "#PCB">PCB</a> </td><td> <a href = "#Swiss_clips">Swiss_clips</a> </td><td> <a href = "#Pocket_handle">Pocket_handle</a> </td><td> <a href = "#Sector">Sector</a> </td><td></td></tr>
|
||||||
<tr><td> <a href = "#Fuseholder">Fuseholder</a> </td><td> <a href = "#PCBs">PCBs</a> </td><td> <a href = "#Toggles">Toggles</a> </td><td> <a href = "#Printed_box">Printed_box</a> </td><td> <a href = "#Sweep">Sweep</a> </td><td></td></tr>
|
<tr><td> <a href = "#Fuseholder">Fuseholder</a> </td><td> <a href = "#PCBs">PCBs</a> </td><td> <a href = "#Toggles">Toggles</a> </td><td> <a href = "#Press_fit">Press_fit</a> </td><td> <a href = "#Sweep">Sweep</a> </td><td></td></tr>
|
||||||
<tr><td> <a href = "#Geared_steppers">Geared_steppers</a> </td><td> <a href = "#PSUs">PSUs</a> </td><td> <a href = "#Transformers">Transformers</a> </td><td> <a href = "#Printed_pulleys">Printed_pulleys</a> </td><td> <a href = "#Thread">Thread</a> </td><td></td></tr>
|
<tr><td> <a href = "#Geared_steppers">Geared_steppers</a> </td><td> <a href = "#PSUs">PSUs</a> </td><td> <a href = "#Transformers">Transformers</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 = "#Green_terminals">Green_terminals</a> </td><td> <a href = "#Panel_meters">Panel_meters</a> </td><td> <a href = "#Tubings">Tubings</a> </td><td> <a href = "#Ribbon_clamp">Ribbon_clamp</a> </td><td> <a href = "#Tube">Tube</a> </td><td></td></tr>
|
<tr><td> <a href = "#Green_terminals">Green_terminals</a> </td><td> <a href = "#Panel_meters">Panel_meters</a> </td><td> <a href = "#Tubings">Tubings</a> </td><td> <a href = "#Printed_pulleys">Printed_pulleys</a> </td><td> <a href = "#Tube">Tube</a> </td><td></td></tr>
|
||||||
<tr><td> <a href = "#Hot_ends">Hot_ends</a> </td><td> <a href = "#Pillars">Pillars</a> </td><td> <a href = "#Variacs">Variacs</a> </td><td> <a href = "#SSR_shroud">SSR_shroud</a> </td><td></td><td></td></tr>
|
<tr><td> <a href = "#Hot_ends">Hot_ends</a> </td><td> <a href = "#Pillars">Pillars</a> </td><td> <a href = "#Variacs">Variacs</a> </td><td> <a href = "#Ribbon_clamp">Ribbon_clamp</a> </td><td></td><td></td></tr>
|
||||||
<tr><td> <a href = "#Hygrometer">Hygrometer</a> </td><td> <a href = "#Pin_headers">Pin_headers</a> </td><td> <a href = "#Veroboard">Veroboard</a> </td><td> <a href = "#Screw_knob">Screw_knob</a> </td><td></td><td></td></tr>
|
<tr><td> <a href = "#Hygrometer">Hygrometer</a> </td><td> <a href = "#Pin_headers">Pin_headers</a> </td><td> <a href = "#Veroboard">Veroboard</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 = "#Pulleys">Pulleys</a> </td><td> <a href = "#Washers">Washers</a> </td><td> <a href = "#Socket_box">Socket_box</a> </td><td></td><td></td></tr>
|
<tr><td> <a href = "#IECs">IECs</a> </td><td> <a href = "#Pulleys">Pulleys</a> </td><td> <a href = "#Washers">Washers</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></td><td> <a href = "#Wire">Wire</a> </td><td> <a href = "#Strap_handle">Strap_handle</a> </td><td></td><td></td></tr>
|
<tr><td> <a href = "#Inserts">Inserts</a> </td><td></td><td> <a href = "#Wire">Wire</a> </td><td> <a href = "#Socket_box">Socket_box</a> </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></td><td></td><td> <a href = "#Zipties">Zipties</a> </td><td> <a href = "#Strap_handle">Strap_handle</a> </td><td></td><td></td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -4956,6 +4956,56 @@ The stl must be given a parameterless wrapper in the project that uses it.
|
|||||||
| 1 | pcb_mount_PI_IO_5.stl |
|
| 1 | pcb_mount_PI_IO_5.stl |
|
||||||
|
|
||||||
|
|
||||||
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
|
---
|
||||||
|
<a name="Pocket_handle"></a>
|
||||||
|
## Pocket_handle
|
||||||
|
Customisable pocket handle
|
||||||
|
|
||||||
|
[printed/pocket_handle.scad](printed/pocket_handle.scad) Implementation.
|
||||||
|
|
||||||
|
[tests/pocket_handle.scad](tests/pocket_handle.scad) Code for this example.
|
||||||
|
|
||||||
|
### Properties
|
||||||
|
| Function | Description |
|
||||||
|
|:--- |:--- |
|
||||||
|
| `pocket_handle_hand_size(type)` | Size of the hole for the fingers |
|
||||||
|
| `pocket_handle_panel_t(type)` | Thickness of the panel it is mounted in |
|
||||||
|
| `pocket_handle_rad(type)` | Min corner rad |
|
||||||
|
| `pocket_handle_screw(type)` | Screw type, can be countersunk or not |
|
||||||
|
| `pocket_handle_slant(type)` | Upward slant of the hand hole |
|
||||||
|
| `pocket_handle_wall(type)` | Wall thickness |
|
||||||
|
|
||||||
|
### Functions
|
||||||
|
| Function | Description |
|
||||||
|
|:--- |:--- |
|
||||||
|
| `pocket_handle(hand_size = [90, 40, 40], slant = 35, screw = M3_cs_cap_screw, panel_t = 3, wall = 4, rad = 4)` | Construct a pocket_handle property list |
|
||||||
|
| `pocket_handle_flange(type)` | Size of the flange |
|
||||||
|
|
||||||
|
### Modules
|
||||||
|
| Module | Description |
|
||||||
|
|:--- |:--- |
|
||||||
|
| `pocket_handle(type)` | Generate STL for pocket_handle |
|
||||||
|
| `pocket_handle_assembly(type)` | Assembly with fasteners in place |
|
||||||
|
| `pocket_handle_hole_positions(type)` | Place children at screw hole positions |
|
||||||
|
| `pocket_handle_holes(type, h = 0)` | Panel cutout and screw holes |
|
||||||
|
|
||||||
|
![pocket_handle](tests/png/pocket_handle.png)
|
||||||
|
|
||||||
|
### Vitamins
|
||||||
|
| Qty | Module call | BOM entry |
|
||||||
|
| ---:|:--- |:---|
|
||||||
|
| 4 | `nut(M3_nut, nyloc = true)` | Nut M3 x 2.4mm nyloc |
|
||||||
|
| 4 | `screw(M3_cs_cap_screw, 12)` | Screw M3 cs cap x 12mm |
|
||||||
|
| 4 | `washer(M3_washer)` | Washer M3 x 7mm x 0.5mm |
|
||||||
|
|
||||||
|
### Printed
|
||||||
|
| Qty | Filename |
|
||||||
|
| ---:|:--- |
|
||||||
|
| 1 | pocket_handle.stl |
|
||||||
|
|
||||||
|
|
||||||
<a href="#top">Top</a>
|
<a href="#top">Top</a>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
BIN
tests/png/pocket_handle.png
Normal file
BIN
tests/png/pocket_handle.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 71 KiB |
40
tests/pocket_handle.scad
Normal file
40
tests/pocket_handle.scad
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
//
|
||||||
|
// NopSCADlib Copyright Chris Palmer 2021
|
||||||
|
// 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/sheets.scad>
|
||||||
|
|
||||||
|
use <../printed/pocket_handle.scad>
|
||||||
|
|
||||||
|
show_holes = false;
|
||||||
|
|
||||||
|
handle = pocket_handle();
|
||||||
|
|
||||||
|
module pocket_handles() {
|
||||||
|
if($preview) {
|
||||||
|
pocket_handle_assembly(handle);
|
||||||
|
|
||||||
|
if(show_holes)
|
||||||
|
#pocket_handle_holes(handle);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pocket_handle(handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
pocket_handles();
|
Loading…
Reference in New Issue
Block a user