Our Larval Engineer reports that the PLA pivot for the Sienna’s hood rod didn’t survive contact with the van’s NYS Inspection. I’m not surprised, as PLA tends to be brittle and the inspection happened on a typical February day in upstate New York. Seeing as how PETG claims to be stronger and more durable than PLA, I ran off some replacements:

The square cap fit snugly over the bottom of the post; PETG tolerances seem pretty much the same as for PLA.
A slightly larger loop may be more durable, so I changed one parameter in the OpenSCAD code to get this:

Which printed just like you’d expect:

Despite the hairs stretching between each part, the nozzle didn’t deposit any boogers during the print. The top and bottom use Hilbert Curve infill, which looks pretty and keeps the nozzle from zipping back and forth quite so much; perhaps that’s a step in the right direction.
Tapping the holes for 6-32 stainless machines screws went easily enough:

She gets one of each and I keep the others for show-n-tell sessions.
The OpenSCAD source code, which differs from the original by a constant or two:
// Sienna Hood Rod Pivot
// Ed Nisley KE4ZNU November 2013
//- Extrusion parameters must match reality!
// Print with 2 shells and 3 solid layers
ThreadThick = 0.25;
ThreadWidth = 0.40;
HoleWindage = 0.2;
Protrusion = 0.1; // make holes end cleanly
inch = 25.4;
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
//----------------------
// Dimensions
ShellOD = 20.0;
ShellID = 8.75;
ShellLength = 10.0;
TaperLength = 1.5;
TaperID = 11.4;
BaseWidth = 20.0;
BaseThick = 3.0;
PegSide = 9.5; // mounting peg through sheet metal
PegLength = 7.0;
PegCornerTrim = 0.75;
PegHoleOD = 0.107*inch; // 6-32 tap hole
PegTrimSide = sqrt(2)*PegSide - PegCornerTrim;
ClampWall = 3.0; // clamping cap under sheet metal
ClampHoleOD = 0.150*inch; // 6-32 clearance hole
ClampCap = 3.0; // solid end thickness
PanelThick = 2.0; // sheet metal under hood
NumSides = 6*4;
//----------------------
// Useful routines
module PolyCyl(Dia,Height,ForceSides=0) { // based on nophead's polyholes
Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);
FixDia = Dia / cos(180/Sides);
cylinder(r=(FixDia + HoleWindage)/2,
h=Height,
$fn=Sides);
}
module ShowPegGrid(Space = 10.0,Size = 1.0) {
Range = floor(50 / Space);
for (x=[-Range:Range])
for (y=[-Range:Range])
translate([x*Space,y*Space,Size/2])
%cube(Size,center=true);
}
//----------------------
// Build it
//ShowPegGrid();
// pivot
translate([-ShellOD,0,0])
difference() {
union() {
cylinder(r=ShellOD/2,h=ShellLength,$fn=NumSides); // housing
translate([-ShellOD/2,0,0]) // filler
cube([ShellOD,(ShellOD/2 + BaseThick),ShellLength],center=false);
translate([0,(ShellOD/2 + BaseThick/2),ShellLength/2]) // foot
cube([BaseWidth,BaseThick,ShellLength],center=true);
translate([0, // peg
(ShellOD/2 + PegLength/2 + BaseThick - Protrusion),
PegSide/2])
intersection() {
cube([PegSide,(PegLength + Protrusion),PegSide],center=true);
rotate([0,45,0])
cube([PegTrimSide,2*PegLength,PegTrimSide],center=true);
}
}
PolyCyl(ShellID,ShellLength,NumSides); // central hole
translate([0,0,-Protrusion]) // end bevels
cylinder(r1=TaperID/2,r2=ShellID/2,h=(TaperLength + Protrusion),$fn=NumSides);
translate([0,0,(ShellLength + Protrusion)])
rotate([180,0,0])
cylinder(r1=TaperID/2,r2=ShellID/2,h=(TaperLength + Protrusion),$fn=NumSides);
translate([0,0,PegSide/2]) // screw tap hole
rotate([-90,0,0])
PolyCyl(PegHoleOD,(ShellOD + BaseThick + PegLength),6);
}
// anchor cap
translate([2*PegSide,0,0])
difference() {
translate([0,0,(PegLength + ClampCap)/2]) // overall shape
cube([(PegSide + ClampWall),(PegSide + ClampWall),(PegLength + ClampCap)],center=true);
translate([0,0,(PegLength/2 + ClampCap + Protrusion)]) // peg cutout
cube([(PegSide + ThreadWidth),(PegSide + ThreadWidth),(PegLength + Protrusion)],center=true);
translate([0,0,-Protrusion]) // screw clearance
PolyCyl(ClampHoleOD,2*PegLength,6);
}