The Wouxun KG-UV3D has three holes along the base that capture three tabs in the battery case, with tapered edges to align the case with the contacts. After a few passes to get the dimensions right, the plate matching those features came out like this:

The solid model shows the edge tapering down to a single layer:

The compound taper on the corners must match both the base and the sides of the radio. The bottom plate and shell have corresponding tapers that extend across the glued joints:

That worked out surprisingly well, given the small dimensions and odd angles. The tabs, in particular, bumped right up against the 0.66 mm extrusion width; they’re 2.0 mm thick, so there’s barely one thread width inside the perimeter for fill. A bit of filing & slicing removed the usual enlargement at the end / start of each perimeter thread on the tabs, which is entirely acceptable for something this finicky.
The OpenSCAD source code with dimensions is all part of that post, but here’s the radio base shape that gets subtracted from the plate to make those tabs:

This seemed easier than adding a bunch of tiny pegs & triangles, but it’s certainly tedious working around a polygon:
module RadioBase() { linear_extrude(height=(BaseOpeningDepth + Protrusion),center=false,convexity=5) polygon(points=[ [-BaseOpeningMax/2,-Protrusion], [-BaseOpeningMin/2,BaseOpeningY], [-(BaseToothOC/2 + BaseToothBase/2),BaseOpeningY], [-(BaseToothOC/2 + BaseToothTip/2),(BaseOpeningY - BaseToothThick)], [-(BaseToothOC/2 - BaseToothTip/2),(BaseOpeningY - BaseToothThick)], [-(BaseToothOC/2 - BaseToothBase/2),BaseOpeningY], [ (BaseToothOC/2 - BaseToothBase/2),BaseOpeningY], [ (BaseToothOC/2 - BaseToothTip/2),(BaseOpeningY - BaseToothThick)], [ (BaseToothOC/2 + BaseToothTip/2),(BaseOpeningY - BaseToothThick)], [ (BaseToothOC/2 + BaseToothBase/2),BaseOpeningY], [ BaseOpeningMin/2,BaseOpeningY], [ BaseOpeningMax/2,-Protrusion], [ (BaseTabOC + BaseTabWidth/2),-Protrusion], [ (BaseTabOC + BaseTabWidth/2),BaseTabThick], [ (BaseTabOC - BaseTabWidth/2),BaseTabThick], [ (BaseTabOC - BaseTabWidth/2),-Protrusion], [ BaseTabWidth/2,-Protrusion], [ BaseTabWidth/2,BaseTabThick], [-BaseTabWidth/2,BaseTabThick], [-BaseTabWidth/2,-Protrusion], [-(BaseTabOC + BaseTabWidth/2),-Protrusion], [-(BaseTabOC + BaseTabWidth/2),BaseTabThick], [-(BaseTabOC - BaseTabWidth/2),BaseTabThick], [-(BaseTabOC - BaseTabWidth/2),-Protrusion], ], convexity=5 ); }
Then subtracting that shape and some inclines…

… lets the base plate pop out of this code:
module Base() { difference() { translate([0,0,(BaseThick + BaseOpeningDepth)/2]) rotate([-90,0,0]) CaseEnvelope(BaseThick + BaseOpeningDepth); translate([0,0,BaseThick]) RadioBase(); translate([(BaseToothOC + BaseTabWidth/2), -(BaseThick + BaseEndLip)/tan(BaseEndAngle), 0]) rotate([BaseEndAngle,0,0]) cube([BaseEndWidth,3*BaseOpeningY,BaseOpeningDepth],center=false); translate([-(BaseToothOC + BaseTabWidth/2 + BaseEndWidth), -(BaseThick + BaseEndLip)/tan(BaseEndAngle), 0]) rotate([BaseEndAngle,0,0]) cube([BaseEndWidth,3*BaseOpeningY,BaseOpeningDepth],center=false); } }
I’m still doodling the electronics, alas…
Not an engineering comment at all, but for some reason, I keep reading “Wouxun” as “Wouff Hong”. And THAT would be an amusing name for
a radio company!
I have beheld the mighty Wouff Hong with my very own eyes: it’s even more fearsome than its reputation!