/* Custom Acrylic Panel for pi-topCEED
Custom panel with pi-topPULSE speaker opening, and finger holes/CPU vent
Paste this script into OpenSCAD and export as DXF for your laser cutter!
Created 11/10/2020 by Andrew Thiel
*/
$fn = 25; //Resolution of round features
CorneRound = .220*25.4; //Radius of rounded corners. That’s RADIUS, not diameter.
Width = 325.47; //Left-to-right
Height = 99.67; //Top-to-bottom (as in when it’s installed in the slot)
speakerleft = 148; //Speaker edge locations as measured from the lefthand side
speakeright = 169;
speakertall = 70; //Vertical dimension of the center speaker slot
slots = 3; //Number of speaker slots (in either direction)
slottaper = 5; //Speaker slots shorten by this much as they get further from the center
slotspace = 5; //Center-to-center distance between slots
heatsink = 266; //Location of CPU heatsink as measured from lefthand side
holes = 5; //Quantity of CPU vent/finger holes
holespace = 15; //Vertical distance between CPU vent/finger holes
difference(){
//This is the main body of the panel…
hull(){
translate([CorneRound,CorneRound]) circle(r=CorneRound); //Construct a rectangle between four round corners
translate([CorneRound,Height-CorneRound]) circle(r=CorneRound);
translate([Width-CorneRound,CorneRound]) circle(r=CorneRound);
translate([Width-CorneRound,Height-CorneRound]) circle(r=CorneRound);
}
//Everything else is holes we’re taking out of the panel…
translate([11, Height]) circle(d=4); //Notch
for(i=[0:1:slots-1]){ //Speaker grille (left)
hull(){ //Left-side slots
translate([(speakerleft+speakeright)/2-slotspacei, Height/2-speakertall/2+slottaperi]) circle(d=2);
translate([(speakerleft+speakeright)/2-slotspacei, Height/2+speakertall/2-slottaperi]) circle(d=2);
}
hull(){ //Right-side slots
translate([(speakerleft+speakeright)/2+slotspace*i, Height/2-speakertall/2+slottaper*i]) circle(d=2);
translate([(speakerleft+speakeright)/2+slotspace*i, Height/2+speakertall/2-slottaper*i]) circle(d=2);
}
}
for(i=[0:1:holes-1]){ //Holes for CPU cooling and panel removal
translate([heatsink,Height/2+iholespace-(holespace(holes-1))/2]) circle(d=10);
}
}