With the reverse-engineered wire cover model in hand, a bit of tinkering extends one side into a relentlessly rectangular block with a hole for the filament guide tube:

Because the block sits somewhat to the rear of the spool, I added a conical entrance to help ease the filament around the corner into the tube. The hole fits the larger 1/4 inch tube that I’m trying out, with a stop equal to the tube’s 0.17 inch ID just before the conical section, as shown in this cross-section view:

It fits just about the way you’d expect:

The perspective makes the guide tube look more angled than it really is; most of that curve is toward the front, so it’s considerably foreshortened in this view.
The metal bar with the cross pin sticking up in front is a bar clamp that holds an oak strip across the back of the bench to keep the M2 from walking away.
The OpenSCAD source code:
// Improved M2 filament guide and X-min switch wire guide // Ed Nisley KE4ZNU - Oct 2013 Layout = "Build"; // Build Section //- Useful Stuff function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); Protrusion = 0.1; HoleWindage = 0.2; //- Sizes PlateMinThick = 8.0; // basic thickness excluding wire guides PlateLength = 55.0; // from side of frame beyond top wire guide TopGuideLength = 7.0; // protrusion from plate PlateThick = PlateMinThick + TopGuideLength; echo(str("Total thickness: ",PlateThick)); GuideTubeOD = 6.3; // max diameter! GuideTubeID = 4.3; // max diameter! GuideTubeOffset = 45.0; // centerline from edge of frame //- Adjust hole diameter to make the size come out right 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); } //- Put peg grid on build surface module ShowPegGrid(Space = 10.0,Size = 1.0) { RangeX = floor(100 / Space); RangeY = floor(125 / Space); for (x=[-RangeX:RangeX]) for (y=[-RangeY:RangeY]) translate([x*Space,y*Space,Size/2]) %cube(Size,center=true); } //- Define basic block shape // Mostly reverse engineered from // https://github.com/MakerGear/M2/blob/master/Printed%20Parts/STL/M2%20X%20Endstop%20Wire%20Cover%20with%20Filament%20Guide.stl // Hence all the magic numbers... module BaseBlock() { SideGuideLength = 4.0; // protrusion = even with frame interior ChannelDepth = 4.5; // wiring channel FrameOffset = 28; translate([18,28,0]) { // align neatly for later processing if (true) color("Green",0.2) translate([-18,22,15]) rotate([-90,0,-90]) import("file:///mnt/bulkdata/Project%20Files/Thing-O-Matic/M2%20Parts/Filament%20Guide/M2+X+Endstop+Wire+Cover+with+Filament+Guide.stl", convexity=10); difference() { linear_extrude(height=PlateThick,convexity=5) // main block polygon(points=[[0,0],[0,22],[12,22],[12,7.5],[22,7.5], [22,-(PlateLength + FrameOffset)],[-18,-(PlateLength + FrameOffset)], [-18,0] ]); for (i=[-1,0]) translate([17,((i*15.0)+ 1.05),-Protrusion]) rotate(180/6) { PolyCyl(3.1,(PlateMinThick + 2*Protrusion),6); // screw holes PolyCyl(5.7,(3.0 + Protrusion),6); // ... countersink } translate([0,0,(PlateMinThick - ChannelDepth)]) // wire channel linear_extrude(height=15,convexity=5) polygon(points=[[2,-5],[2,19],[10,19],[10,-22],[-15,-22],[-15,-5] ]); translate([-10,14,PlateMinThick]) // M2 frame rotate(-90) cube([42,35,10],center=false); translate([-5,5,(PlateMinThick + SideGuideLength)]) // shorten side guide cube([20,20,10],center="false"); } } } //- Complete object module GuideCover() { difference() { BaseBlock(); translate([50,-GuideTubeOffset,PlateThick/2]) rotate([0,-90,0]) rotate(180/6) PolyCyl(GuideTubeID,60,6); translate([25,-GuideTubeOffset,PlateThick/2]) rotate([0,-90,0]) rotate(180/6) PolyCyl(GuideTubeOD,60,6); translate([41,-GuideTubeOffset,PlateThick/2]) rotate([0,-90,0]) rotate(180/6) cylinder(r1= 0.5*PlateThick,r2=GuideTubeID/2,h=8,$fn=12); } } //- Build it ShowPegGrid(); if (Layout == "Section") difference() { GuideCover(); translate([2*100/3,-GuideTubeOffset,-PlateThick]) rotate(180) cube([100,PlateLength,3*PlateThick]); } if (Layout == "Build") GuideCover();