1
0
mirror of https://github.com/nophead/NopSCADlib.git synced 2025-08-13 02:43:58 +02:00

atx_psu_cutout(type) now parametric and can be shown in the test.

ATX300 PSU now has a correct cutout and more accurate grill holes.
The four margins around grill holes can now be specified.
This commit is contained in:
Chris Palmer
2021-10-24 13:32:46 +01:00
parent 6687a4a7c6
commit b2117fa99a
5 changed files with 64 additions and 37 deletions

View File

@@ -2846,6 +2846,7 @@ Face order is bottom, top, left, right, front, back.
|:--- |:--- |
| `atx_psu(type)` | True if an ATX style PSU |
| `psu_accessories(type)` | Accessories to add to BOM, e.g. mains lead |
| `psu_face_cutout(type)` | Panel cutout to accommodate this face, e.g. for ATX |
| `psu_face_cutouts(type)` | List of polygons to remove |
| `psu_face_fan(type)` | Fan x,y position and type |
| `psu_face_grill(type)` | Is this face a grill |
@@ -2881,7 +2882,7 @@ Face order is bottom, top, left, right, front, back.
### Modules
| Module | Description |
|:--- |:--- |
| `atx_psu_cutout(type)` | Cut out for the rear of an ATX |
| `atx_psu_cutout(type, face = f_front)` | Cut out for the rear of an ATX, which is actually f_front! |
| `psu(type)` | Draw a power supply |
| `psu_screw_positions(type, face = undef)` | Position children at the screw positions on the preferred mounting face, which can be overridden. |
| `terminal_block(type, ways)` | Draw a power supply terminal block |

View File

@@ -16,11 +16,15 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
show_cutout = false;
include <../core.scad>
include <../vitamins/psus.scad>
use <../utils/layout.scad>
module psus()
layout([for(p = psus) atx_psu(p) ? psu_length(p) : psu_width(p)], 10) let(p = psus[$i])
rotate(atx_psu(p) ? 0 : 90) {
@@ -29,6 +33,9 @@ module psus()
psu_screw_positions(p)
translate_z(3)
screw_and_washer(psu_screw(p), 8);
if(show_cutout && atx_psu(p))
#atx_psu_cutout(p);
}
if($preview) {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 KiB

After

Width:  |  Height:  |  Size: 255 KiB

View File

@@ -39,6 +39,7 @@ function psu_face_fan(type) = type[4]; //! Fan x,y position and typ
function psu_face_iec(type) = type[5]; //! IEC connector x,y, rotation and type
function psu_face_switch(type) = type[6]; //! Rocker switch x,y, rotation and type
function psu_face_vents(type) = type[7]; //! Vents array position x,y, rotation, size and corner radius
function psu_face_cutout(type) = type[8]; //! Panel cutout to accommodate this face, e.g. for ATX
function psu_name(type) = type[1]; //! The part name
function psu_length(type) = type[2]; //! Length
@@ -125,9 +126,9 @@ function psu_face_transform(type, face) = //! Returns a transformation
) translate([0, 0, h / 2]) * rotate(rotations[face]) * translate([0, 0, translations[face]]);
module psu_grill(width, height, grill_hole = 4.5, grill_gap = 1.5, fn = 0, avoid = []) {
nx = floor(width / (grill_hole + grill_gap));
nx = floor(width / (grill_hole + grill_gap)) + 1;
xpitch = width / nx;
ny = floor(height / ((grill_hole + grill_gap) * cos(30)));
ny = floor(height / ((grill_hole + grill_gap) * cos(30))) + 1;
ypitch = height / ny;
r = grill_hole / 2;
avoid = avoid ? [for(p = avoid) [[p.x - p[2] / 2 - r, p.y - p[3] / 2 - r], [p.x + p[2] / 2 + r, p.y + p[3] / 2 + r]]] : false;
@@ -192,15 +193,17 @@ module psu(type) { //! Draw a power supply
g = psu_face_grill(f);
if(g) {
list = is_list(g);
fn = list ? g[2] : 0;
hole = list ? g[0] : 4.5;
gap = list ? g[1] : 1.5;
avoid = list ? g[3] : [];
mx = 6;
my1 = i == f_top && psu_face_grill(faces[f_back]) ? 0 : 6;
my2 = i == f_back && psu_face_grill(faces[f_top]) ? 0 : 6;
translate([0, (my2 - my1) / 2])
psu_grill(xw - 2 * mx, yw - my1 - my2, grill_hole = hole, grill_gap = gap, fn = fn, avoid = avoid);
fn = list ? g[2] : 0;
margins = list ? g[3] : [6, 6, 6, 6];
avoid = list ? g[4] : [];
mx1 = margins[0];
mx2 = margins[1];
my1 = i == f_top && psu_face_grill(faces[f_back]) ? 0 : margins[2];
my2 = i == f_back && psu_face_grill(faces[f_top]) ? 0 : margins[3];
translate([(mx1 - mx2) / 2, (my2 - my1) / 2])
psu_grill(xw - mx1 - mx2, yw - my1 - my2, grill_hole = hole, grill_gap = gap, fn = fn, avoid = avoid);
}
if(fan)
translate([fan.x, fan.y]) intersection() {
@@ -343,22 +346,9 @@ module psu_screw_positions(type, face = undef) { //! Position children at the sc
children();
}
module atx_psu_cutout(type) { //! Cut out for the rear of an ATX
holes = psu_face_holes(psu_faces(type)[f_front]);
translate([holes[0].x, -psu_width(type) / 2, psu_height(type) / 2 + holes[0].y])
rotate([90, 0, 0])
module atx_psu_cutout(type, face = f_front) { //! Cut out for the rear of an ATX, which is actually f_front!
multmatrix(psu_face_transform(type, face))
linear_extrude(100, center = true)
round(5)
polygon([ // https://www.techpowerup.com/forums/threads/pc-component-dimensions.157239, tweaked
[18.7, -13],
[ 5.7, 0],
[ 5.7, 54],
[18.7, 67],
[127, 67],
[140, 67 - 13 / tan(52)],
[140, -5 + 11 / tan(52)],
[129, -5],
[81.3, -5],
[73.3, -13],
]);
polygon(psu_face_cutout(psu_faces(type)[face]));
}

View File

@@ -62,29 +62,58 @@ ATX500 =
[[], 0.8, []],
[[], 0.8, []],
[[], 0.8, []],
[[[-69, -27], [-69, 37], [69, 37], [45, -37]], 0.8, [], false, [-25, 0, fan80x25], [45, -19.6, 180, IEC_inlet_atx], [45, 23, 90, small_rocker]],
[[[-69, -27], [-69, 37], [69, 37], [45, -37]], 0.8, [], false, [-25, 0, fan80x25], [45, -19.6, 180, IEC_inlet_atx], [45, 23, 90, small_rocker], false,
let(h0 = [-69, -27]) [ // https://www.techpowerup.com/forums/threads/pc-component-dimensions.157239, tweaked
[18.7, -13] + h0,
[ 5.7, 0] + h0,
[ 5.7, 54] + h0,
[18.7, 67] + h0,
[127, 67] + h0,
[140, 67 - 13 / tan(52)] + h0,
[140, -5 + 11 / tan(52)] + h0,
[129, -5] + h0,
[81.3, -5] + h0,
[73.3, -13] + h0,
]
],
[[], 0.8, [], true],
],
[": IEC mains lead"]
];
// Single fan in the top, wires exit opposite side from mains in
ATX300 = let(p = [113 / 2, 51 / 2], iec = [35.5, 6], sw = [6.5, 7])
["ATX300", "FSP300-60GHX", 125, 100, 64, No632_pan_screw, 5/2, true, 0, 0, [],
ATX300 = let(p = [113 / 2, 51.5 / 2], s = [125, 100, 64], iec = [35.5, 6], sw = [6.5, 7])
["ATX300", "FSP300-60GHX", s.x, s.y, s.z, No632_pan_screw, No6_clearance_radius, true, 0, 0, [],
[
[[], 0.5, []],
[[], 0.5, [], false, [0, 8, fan80x25]],
[[], 0.5, []],
[[], 0.5, []],
[[-p, p, [-p.x, p.y], [p.x, -p.y], [p.x, 0]], 0.5, [], [3, 0.35, 6, [
[[-p, p, [-p.x, p.y], [p.x, -p.y], [p.x, 0]], 0.5, [], [3, 0.6, 6, [6.3, 7, 6.4, 5.5], [
[-p.x, -p.y, 5, 5],
[-p.x, p.y, 5, 5],
[p.x, 0, 9, 100],
[p.x, -p.y, 17, 6],
[p.x, 0, 5, 100],
[p.x, p.y, 12, 6],
[p.x, -p.y, 12, 6],
[iec.x, iec.y, 32, 22],
[sw.x, sw.y, 23, 20],
[sw.x, sw.y, 28, 12],
]], false, [iec.x, iec.y, 180, IEC_inlet_atx2], [sw.x, sw.y, 90, small_rocker]],
[sw.x, sw.y, 20, 20],
[sw.x, sw.y, 27, 12],
]], false, [iec.x, iec.y, 180, IEC_inlet_atx2], [sw.x, sw.y, 90, small_rocker], false, [
[-s.x / 2 + 11.5, -s.z / 2 + 4.5],
[-s.x / 2 + 5.5, -s.z / 2 + 4.5 + 6 * tan(60)],
[-s.x / 2 + 5.5, s.z / 2 - 5.4 - 6 * tan(60)],
[-s.x / 2 + 11.5, s.z / 2 - 5.4],
[ s.x / 2 - 14, s.z / 2 - 5.4],
[ s.x / 2 - 10.5, s.z / 2 - 5.4 - 3.5 * tan(60)],
[ s.x / 2 - 10.5, -6],
[ s.x / 2 - 8, -8.5],
[ s.x / 2 - 8, -s.z / 2 + 4.5 + 6 * tan(60)],
[ s.x / 2 - 14, -s.z / 2 + 4.5],
]
],
[[], 0.5, []],
],
[": IEC mains lead"]