As part of the Thermal Lockout project, I planned to put a pair of big pushbutton switches on the end of a little Pactec box, thusly:

I was in the midst of figuring out how to clamp that tiny panel to the Sherline milling machine’s table and gnaw out those big holes, when I realized I could just print out a new panel with the holes already in place:

No muss, no fuss, no exciting chips… and no tedious corner filing, either.
The 3D model has the hole for an LED that I added later; the panel shown above acquired that hole during a brief conference with Mr Drill Press.

In actual point of fact, I had to do a bit of edge filing for the switches, as the holes came out slightly undersized. The HoleWindage setting should take care of that for the next time around. The panel was a drop-in replacement for the original: all the outside dimensions & thicknesses were spot on.
The OpenSCAD source code:
// End panel for PacTec 61191-01 box
// Panel 61580-01
// Ed Nisley - KE4ZNU - Feb 2011
Layer1Z = 1.50;
Layer2Z = 1.00;
HoleWindage = 0.55; // approximately equal to extrusion width
Protrusion = 0.1; // stick out over top and bottom
SwitchOffsetX = 15.0;
SwitchX = 16.0 + HoleWindage;
SwitchY = 12.0 + HoleWindage;
SwitchZ = Layer1Z + Layer2Z;
LedR = (5.0 + HoleWindage)/2;
LedZ = SwitchZ;
difference() {
union() {
translate([0,0,Layer1Z/2]) cube([55,22.5,Layer1Z],center=true);
translate([0,0,(Layer1Z + Layer2Z)/2]) cube([52.6,19.5,Layer1Z + Layer2Z],center=true);
}
translate([SwitchOffsetX,0,SwitchZ/2])
cube([SwitchX,SwitchY,SwitchZ + 2*Protrusion],center=true);
translate([-SwitchOffsetX,0,SwitchZ/2])
cube([SwitchX,SwitchY,SwitchZ + 2*Protrusion],center=true);
translate([0,0,LedZ/2])
cylinder(r=LedR,h=LedZ + 2*Protrusion,center=true,$fn=10);
}










