. . . and here it is with the oval logo added and rotated.
Save "nin_no_R.dxf" from the .zip file in the same folder as your OpenSCAD file.
// Fan Grill - Nintendo
// Logo exported from Inkscape to .dxf file using https://github.com/brad/Inkscape-OpenSCAD-DXF-Export
/////////////////////////////
// Adjustable variables
/////////////////////////////
// Logo
LogoDepth = 7.0; // Overall logo depth
LogoWidth = 213.254; // From inkscape file
LogoHeight = 52.652; // From inkscape file
LogoScale = 0.44; // Desired scale relative to original size i.e. 0.5 will render the logo at half-size
LogoRotation = 4; // Degrees of rotatation for the logo
LogoXOffset = -45.8; // Move the logo on the X-axis
LogoYOffset = -9; // Move the logo on the Y-axis
// Body
Body = 85; // X- and Y-axis size of the grill
BodyThick = 4; // Z-axis thickness of the grill
BodyRoundDia = 6; // Body corner rounding diameter
// Screw holes
ScrewDist = 71.5; // Center-center distance for the screw holes
ScrewLowDia = 5; // Lower diameter for the screw holes
ScrewUpperDia = 8; // Upper diameter for the screw holes - for non-countersunk holes use the same value as ScrewLowDia
// Slots
NumberOfSlots = 6; // The number of slots
SlotSpacing = ScrewDist/NumberOfSlots; // The distance between slots
SlotInset = 4; // The distance between the end of the slot and the edge/screw hole
SlotSmDia = 4; // Slot small diameter
SlotMedDia = 7; // Slot medium diameter (used for first and last slots)
SlotLgDia = 13; // Slot large diameter
// Number of fragments (polygon sides) used to render a full circle.
$fn = 180; // Default = 180 Typical range = 6 - 360
// 6 will render a circular hole as a hexagon, 8 will render a circular hole as an octagon.
// Lower the number for faster rendering, raise the number for smoother rendering.
/////////////////////////////
// Make the part
/////////////////////////////
// Make the Logo (Optional)
// Comment out the next five lines to skip the logo
translate([LogoXOffset, LogoYOffset, 0])
rotate([0, 0, LogoRotation])
scale([LogoScale, LogoScale, 1])
linear_extrude(height = LogoDepth, convexity = 10)
import(file = "nin_no_R.dxf", layer="Logo");
// The "nin_no_R.dxf" file needs to be in the same directory as this SCAD file.
//
// Make the grill
difference(){ // Body minus screw holes and slots
// Body
hull() {
translate([Body/2 - BodyRoundDia, Body/2 - BodyRoundDia, BodyThick/2])
cylinder (BodyThick, r = BodyRoundDia, center=true); // Upper right corner
translate([Body/2 - BodyRoundDia, - Body/2 + BodyRoundDia, BodyThick/2])
cylinder (BodyThick, r = BodyRoundDia, center=true); // Lower right corner
translate([- Body/2 + BodyRoundDia, - Body/2 + BodyRoundDia, BodyThick/2])
cylinder (BodyThick, r = BodyRoundDia, center=true); // Lower left corner
translate([- Body/2 + BodyRoundDia, Body/2 - BodyRoundDia, BodyThick/2])
cylinder (BodyThick, r = BodyRoundDia, center=true); // Upper left corner
}
// End body
// Screw holes
translate([ScrewDist/2, ScrewDist/2, BodyThick/2])
cylinder (BodyThick + 0.01, d1 = ScrewLowDia, d2 = ScrewUpperDia, center=true); // Upper right screw hole
translate([ScrewDist/2, - ScrewDist/2, BodyThick/2])
cylinder (BodyThick + 0.01, d1 = ScrewLowDia, d2 = ScrewUpperDia, center=true); // Lower right screw hole
translate([- ScrewDist/2, - ScrewDist/2, BodyThick/2])
cylinder (BodyThick + 0.01, d1 = ScrewLowDia, d2 = ScrewUpperDia, center=true); // Lower left screw hole
translate([- ScrewDist/2, ScrewDist/2, BodyThick/2])
cylinder (BodyThick + 0.01, d1 = ScrewLowDia, d2 = ScrewUpperDia, center=true); // Upper left screw hole
// End screw holes
// Slot0
hull() {
translate([- ScrewDist/2 + SlotInset + ScrewUpperDia/2 + SlotSmDia/2, ScrewDist/2, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotSmDia, center=true); // Left cylinder
translate([ScrewDist/2 - SlotInset - ScrewUpperDia/2 - SlotMedDia/2, ScrewDist/2 - SlotMedDia/2 + SlotSmDia/2, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotMedDia, center=true); // Right cylinder
}
// End slot0
// Slot1
hull() {
translate([- Body/2 + SlotInset + SlotLgDia/2, ScrewDist/2 - SlotSpacing * 1, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotLgDia, center=true); // Left cylinder
translate([Body/2 - SlotInset - SlotSmDia/2, ScrewDist/2 - SlotSpacing * 1, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotSmDia, center=true); // Right cylinder
}
// End slot1
// Slot2
hull() {
translate([- Body/2 + SlotInset + SlotSmDia/2, ScrewDist/2 - SlotSpacing * 2, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotSmDia, center=true); // Left cylinder
translate([Body/2 - SlotInset - SlotLgDia/2, ScrewDist/2 - SlotSpacing * 2, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotLgDia, center=true); // Right cylinder
}
// End slot2
// Slot3
hull() {
translate([- Body/2 + SlotInset + SlotLgDia/2, ScrewDist/2 - SlotSpacing * 3, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotLgDia, center=true); // Left cylinder
translate([Body/2 - SlotInset - SlotSmDia/2, ScrewDist/2 - SlotSpacing * 3, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotSmDia, center=true); // Right cylinder
}
// End slot3
// Slot4
hull() {
translate([- Body/2 + SlotInset + SlotSmDia/2, ScrewDist/2 - SlotSpacing * 4, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotSmDia, center=true); // Left cylinder
translate([Body/2 - SlotInset - SlotLgDia/2, ScrewDist/2 - SlotSpacing * 4, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotLgDia, center=true); // Right cylinder
}
// End slot4
// Slot5
hull() {
translate([- Body/2 + SlotInset + SlotLgDia/2, ScrewDist/2 - SlotSpacing * 5, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotLgDia, center=true); // Left cylinder
translate([Body/2 - SlotInset - SlotSmDia/2, ScrewDist/2 - SlotSpacing * 5, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotSmDia, center=true); // Right cylinder
}
// End slot5
// Slot last
hull() {
translate([- ScrewDist/2 + SlotInset + ScrewUpperDia/2 + SlotSmDia/2, - ScrewDist/2, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotSmDia, center=true); // Left cylinder
translate([ScrewDist/2 - SlotInset - ScrewUpperDia/2 - SlotMedDia/2, - ScrewDist/2 + SlotMedDia/2 - SlotSmDia/2, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotMedDia, center=true); // Right cylinder
}
// End slot last
} // End body minus screw holes and slots
//
Do you want ladders?
Scott
P.S. Here's the code with the variables adjusted for un-tapered ovals and an un-tilted logo.
// Fan Grill - Nintendo
// Logo exported from Inkscape to .dxf file using https://github.com/brad/Inkscape-OpenSCAD-DXF-Export
/////////////////////////////
// Adjustable variables
/////////////////////////////
// Logo
LogoDepth = 7.0; // Overall logo depth
LogoWidth = 213.254; // From inkscape file
LogoHeight = 52.652; // From inkscape file
LogoScale = 0.386; // Desired scale relative to original size i.e. 0.5 will render the logo at half-size
LogoRotation = 0; // Degrees of rotatation for the logo
LogoXOffset = -41.08; // Move the logo on the X-axis
LogoYOffset = -10.6; // Move the logo on the Y-axis
// Body
Body = 85; // X- and Y-axis size of the grill
BodyThick = 4; // Z-axis thickness of the grill
BodyRoundDia = 6; // Body corner rounding diameter
// Screw holes
ScrewDist = 71.5; // Center-center distance for the screw holes
ScrewLowDia = 5; // Lower diameter for the screw holes
ScrewUpperDia = 8; // Upper diameter for the screw holes - for non-countersunk holes use the same value as ScrewLowDia
// Slots
NumberOfSlots = 6; // The number of slots
SlotSpacing = ScrewDist/NumberOfSlots; // The distance between slots
SlotInset = 4; // The distance between the end of the slot and the edge/screw hole
SlotSmDia = 8; // Slot small diameter
SlotMedDia = 8; // Slot medium diameter (used for first and last slots)
SlotLgDia = 8; // Slot large diameter
// Number of fragments (polygon sides) used to render a full circle.
$fn = 180; // Default = 180 Typical range = 6 - 360
// 6 will render a circular hole as a hexagon, 8 will render a circular hole as an octagon.
// Lower the number for faster rendering, raise the number for smoother rendering.
/////////////////////////////
// Make the part
/////////////////////////////
// Make the Logo (Optional)
// Comment out the next five lines to skip the logo
translate([LogoXOffset, LogoYOffset, 0])
rotate([0, 0, LogoRotation])
scale([LogoScale, LogoScale, 1])
linear_extrude(height = LogoDepth, convexity = 10)
import(file = "nin_no_R.dxf", layer="Logo");
// The "nin_no_R.dxf" file needs to be in the same directory as this SCAD file.
//
// Make the grill
difference(){ // Body minus screw holes and slots
// Body
hull() {
translate([Body/2 - BodyRoundDia, Body/2 - BodyRoundDia, BodyThick/2])
cylinder (BodyThick, r = BodyRoundDia, center=true); // Upper right corner
translate([Body/2 - BodyRoundDia, - Body/2 + BodyRoundDia, BodyThick/2])
cylinder (BodyThick, r = BodyRoundDia, center=true); // Lower right corner
translate([- Body/2 + BodyRoundDia, - Body/2 + BodyRoundDia, BodyThick/2])
cylinder (BodyThick, r = BodyRoundDia, center=true); // Lower left corner
translate([- Body/2 + BodyRoundDia, Body/2 - BodyRoundDia, BodyThick/2])
cylinder (BodyThick, r = BodyRoundDia, center=true); // Upper left corner
}
// End body
// Screw holes
translate([ScrewDist/2, ScrewDist/2, BodyThick/2])
cylinder (BodyThick + 0.01, d1 = ScrewLowDia, d2 = ScrewUpperDia, center=true); // Upper right screw hole
translate([ScrewDist/2, - ScrewDist/2, BodyThick/2])
cylinder (BodyThick + 0.01, d1 = ScrewLowDia, d2 = ScrewUpperDia, center=true); // Lower right screw hole
translate([- ScrewDist/2, - ScrewDist/2, BodyThick/2])
cylinder (BodyThick + 0.01, d1 = ScrewLowDia, d2 = ScrewUpperDia, center=true); // Lower left screw hole
translate([- ScrewDist/2, ScrewDist/2, BodyThick/2])
cylinder (BodyThick + 0.01, d1 = ScrewLowDia, d2 = ScrewUpperDia, center=true); // Upper left screw hole
// End screw holes
// Slot0
hull() {
translate([- ScrewDist/2 + SlotInset + ScrewUpperDia/2 + SlotSmDia/2, ScrewDist/2, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotSmDia, center=true); // Left cylinder
translate([ScrewDist/2 - SlotInset - ScrewUpperDia/2 - SlotMedDia/2, ScrewDist/2 - SlotMedDia/2 + SlotSmDia/2, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotMedDia, center=true); // Right cylinder
}
// End slot0
// Slot1
hull() {
translate([- Body/2 + SlotInset + SlotLgDia/2, ScrewDist/2 - SlotSpacing * 1, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotLgDia, center=true); // Left cylinder
translate([Body/2 - SlotInset - SlotSmDia/2, ScrewDist/2 - SlotSpacing * 1, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotSmDia, center=true); // Right cylinder
}
// End slot1
// Slot2
hull() {
translate([- Body/2 + SlotInset + SlotSmDia/2, ScrewDist/2 - SlotSpacing * 2, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotSmDia, center=true); // Left cylinder
translate([Body/2 - SlotInset - SlotLgDia/2, ScrewDist/2 - SlotSpacing * 2, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotLgDia, center=true); // Right cylinder
}
// End slot2
// Slot3
hull() {
translate([- Body/2 + SlotInset + SlotLgDia/2, ScrewDist/2 - SlotSpacing * 3, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotLgDia, center=true); // Left cylinder
translate([Body/2 - SlotInset - SlotSmDia/2, ScrewDist/2 - SlotSpacing * 3, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotSmDia, center=true); // Right cylinder
}
// End slot3
// Slot4
hull() {
translate([- Body/2 + SlotInset + SlotSmDia/2, ScrewDist/2 - SlotSpacing * 4, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotSmDia, center=true); // Left cylinder
translate([Body/2 - SlotInset - SlotLgDia/2, ScrewDist/2 - SlotSpacing * 4, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotLgDia, center=true); // Right cylinder
}
// End slot4
// Slot5
hull() {
translate([- Body/2 + SlotInset + SlotLgDia/2, ScrewDist/2 - SlotSpacing * 5, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotLgDia, center=true); // Left cylinder
translate([Body/2 - SlotInset - SlotSmDia/2, ScrewDist/2 - SlotSpacing * 5, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotSmDia, center=true); // Right cylinder
}
// End slot5
// Slot last
hull() {
translate([- ScrewDist/2 + SlotInset + ScrewUpperDia/2 + SlotSmDia/2, - ScrewDist/2, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotSmDia, center=true); // Left cylinder
translate([ScrewDist/2 - SlotInset - ScrewUpperDia/2 - SlotMedDia/2, - ScrewDist/2 + SlotMedDia/2 - SlotSmDia/2, BodyThick/2])
cylinder (BodyThick + 0.01, d = SlotMedDia, center=true); // Right cylinder
}
// End slot last
} // End body minus screw holes and slots
//
EDIT: 80mm fan screw holes are 71.5mm center-to-center.