1
0
mirror of https://github.com/nophead/NopSCADlib.git synced 2025-08-22 23:23:01 +02:00

Added axial diodes, radial transistors, discs and modules.

Verboard and perboard components get solder menisci added automatically.
Radial leads now made by bezier curves rather than straights and arcs.
This commit is contained in:
Chris
2023-07-28 10:39:07 +01:00
parent 9e45e4eb79
commit 74293b6c22
76 changed files with 671 additions and 159 deletions

58
utils/pcb_utils.scad Normal file
View File

@@ -0,0 +1,58 @@
//
// NopSCADlib Copyright Chris Palmer 2023
// 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/>.
//
//
//! Utilities for making PCBs and components
//
include <../utils/core/core.scad>
module solder_meniscus(ir = 0.3, r) { //! Draw a solder meniscus
h = 0.7;
color("silver") rotate_extrude()
difference() {
square([r, h]);
translate([r + eps, h + eps])
ellipse(r - ir + eps, h, $fn = 64);
}
}
module solder(ir = 0.3) { //! Maybe add solder meniscus if $solder is set
if(!is_undef($solder))
vflip()
translate_z($solder.z)
solder_meniscus(ir = ir, r = $solder.x);
}
module cylindrical_wrap(r, h = eps) { //! Wrap a 2D child extruded to height `h` around a cylinder with radius `r`.
sides = r2sides(r);
dx = 2 * r * tan(180 / sides);
for(i = [0 : sides - 1])
rotate((i - 0.5) * 360 / sides)
translate([0, r])
rotate([-90, 0, 0])
linear_extrude(h, center = true)
intersection() {
translate([(sides / 2 - i) * -dx, 0])
children();
square([dx, inf], center = true);
}
}