mirror of
https://github.com/DJSundog/NopSCADlib.git
synced 2024-11-27 09:10:02 -05:00
84 lines
3.4 KiB
OpenSCAD
84 lines
3.4 KiB
OpenSCAD
//
|
|
// 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/>.
|
|
//
|
|
|
|
//
|
|
//! Crude representation of a bulldog clip. The handle is not currently drawn but its length can be
|
|
//! accessed to allow clearance. Used for holding glass on 3D printer beds but Swiss picture clips can be
|
|
//! better.
|
|
//
|
|
include <../core.scad>
|
|
use <../utils/rounded_polygon.scad>
|
|
use <../utils/sector.scad>
|
|
|
|
function bulldog_length(type) = type[1]; //! Length along the profile
|
|
function bulldog_depth(type) = type[2]; //! Depth from the back to the front of the tubes
|
|
function bulldog_height(type) = type[3]; //! Height at the back
|
|
function bulldog_thickness(type) = type[4]; //! Thickness of the metal
|
|
function bulldog_tube(type) = type[5] / 2; //! Outside diameter of the tubes
|
|
function bulldog_radius(type) = type[6]; //! Outside radius of the back corners
|
|
function bulldog_handle_length(type) = type[7]; //! Length that the handle protrudes from the back
|
|
|
|
module bulldog_shape(depth, height, radius, tube, open) {
|
|
rounded_polygon([
|
|
[-depth / 2 + radius, -height / 2 + radius, radius],
|
|
[-depth / 2 + radius, height / 2 - radius, radius],
|
|
[ depth / 2 - tube, open / 2 + tube, -tube],
|
|
[ depth / 2 + tube, height / 2, tube],
|
|
[ depth / 2 + tube, -height / 2, tube],
|
|
[ depth / 2 - tube, -open / 2 - tube, -tube],
|
|
|
|
]);
|
|
}
|
|
|
|
module bulldog(type, open = 4) { //! Draw bulldog clip open by specified amount
|
|
tube = bulldog_tube(type);
|
|
thickness = bulldog_thickness(type);
|
|
depth = bulldog_depth(type);
|
|
length = bulldog_length(type);
|
|
height = bulldog_height(type);
|
|
rad = bulldog_radius(type);
|
|
gap = open + thickness * 2;
|
|
|
|
vitamin(str("bulldog(", type[0], "): Bulldog clip ",length, "mm"));
|
|
|
|
color("yellow")
|
|
translate([depth / 2 - thickness - eps, 0])
|
|
rotate([90, 0, 0])
|
|
linear_extrude(length, center = true)
|
|
union() {
|
|
difference() {
|
|
bulldog_shape(depth, height, rad, tube, gap);
|
|
|
|
offset(-thickness)
|
|
bulldog_shape(depth, height, rad, tube, gap);
|
|
|
|
translate([depth / 2 - tube, -height])
|
|
square([depth, 2 * height]);
|
|
}
|
|
|
|
for(side = [-1, 1])
|
|
translate([depth / 2 - tube, side * (open / 2 + tube)])
|
|
difference() {
|
|
mirror([0, side < 0 ? 1 : 0])
|
|
sector(tube, -90, 210);
|
|
circle(tube - thickness);
|
|
}
|
|
}
|
|
}
|