-
GCMC Radial Text
The Tektronix Circuit Computer needs text along radial lines:

Tek CC – original RC arrow layout Fortunately, this doesn’t require nearly as much effort as the text-on-arcs code, because GCMC includes functions to rotate paths around the origin:
return rotate_xy(TextPath,Angle) + CenterPt;The only trick is figuring out how to handle the justification, given the overall path length:
local pl = TextPath[-1].x; local ji = (Justify == TEXT_LEFT) ? 0mm : (Justify == TEXT_CENTERED) ? -pl/2 : (Justify == TEXT_RIGHT) ? -pl : 0mm;A testcase showed it worked:

Radial text testcase With that in hand, I took the liberty of slightly simplifying the original Tek layout:

Tek CC – radial text example If lives depended on it, one could duplicate the Tek layout, but they don’t and I didn’t. Fancy typography isn’t a GCMC thing.
And, yeah, laser printing is way crisper than a pen drawing.
The GCMC source code as a GitHub Gist:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characterscomment("RadialText test"); ctr = [0mm,0mm]; r = 20mm; a = 0deg; tp = scale(typeset("Left Inward",TextFont),LegendTextSize); tpr = RadialText(tp,ctr,r,a,TEXT_LEFT,INWARD); feedrate(TextSpeed); engrave(tpr,TravelZ,EngraveZ); tp = scale(typeset("Left Outward",TextFont),LegendTextSize); tpr = RadialText(tp,ctr,r,a,TEXT_LEFT,OUTWARD); feedrate(TextSpeed); engrave(tpr,TravelZ,EngraveZ); a = 90deg; tp = scale(typeset("Right Inward",TextFont),LegendTextSize); tpr = RadialText(tp,ctr,r,a,TEXT_RIGHT,INWARD); feedrate(TextSpeed); engrave(tpr,TravelZ,EngraveZ); tp = scale(typeset("Right Outward",TextFont),LegendTextSize); tpr = RadialText(tp,ctr,r,a,TEXT_RIGHT,OUTWARD); feedrate(TextSpeed); engrave(tpr,TravelZ,EngraveZ); a = 180deg; tp = scale(typeset("Center Inward",TextFont),LegendTextSize); tpr = RadialText(tp,ctr,r,a,TEXT_CENTERED,INWARD); feedrate(TextSpeed); engrave(tpr,TravelZ,EngraveZ); tp = scale(typeset("Center Outward",TextFont),LegendTextSize); tpr = RadialText(tp,ctr,r,a,TEXT_CENTERED,OUTWARD); feedrate(TextSpeed); engrave(tpr,TravelZ,EngraveZ); a = 270deg; RadialLegend("Offset to radius",ctr,r,a,TEXT_CENTERED,INWARD,-0.5); goto(ctr); move([0,-2*r,EngraveZ]); goto([r,0mm,-]); circle_cw(ctr); This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters//—– // Write text on a radial line function RadialText(TextPath,CenterPt,Radius,Angle,Justify,Orient) { local pl = TextPath[-1].x; // path length local ji = (Justify == TEXT_LEFT) ? 0mm : // justification indent (Justify == TEXT_CENTERED) ? -pl/2 : (Justify == TEXT_RIGHT) ? -pl : 0mm; if (Orient == INWARD) { TextPath = rotate_xy(TextPath,180deg); ji = -ji; } TextPath += [Radius + ji,0mm]; return rotate_xy(TextPath,Angle) + CenterPt; } //—– // Draw a radial legend // Offset in units of char height: 0 = baseline on radius, +/- = above/below function RadialLegend(Text,Center,Radius,Angle,Justify,Orient,Offset) { local tp = scale(typeset(Text,TextFont),LegendTextSize) + [0mm,Offset * LegendTextSize.y]; local tpr = RadialText(tp,Center,Radius,Angle,Justify,Orient); feedrate(TextSpeed); engrave(tpr,TravelZ,EngraveZ); }