PS
# Plate.m4
# ASME_Y14-5.m4
#
https://en.wikipedia.org/wiki/Geometric_dimensioning_and_tolerancing
# See the ASME Y14.5 standard, Figure 6-30.
scale = 100/3
cct_init
ifdef(`ASME_Y14-5_',,
`sinclude(ASME_Y14-5.m4def)
sinclude(../ASME_Y14-5.m4def) ')
ifsvg(`svg_font(sans-serif,10bp__)',
`textht = 10bp__*2/3
ifpostscript(,latexcommand({\sf\small))')
# ASME Y14.5 specs:
arrowht = textht*0.8
arrowwid = textht*0.6
maxpswid = 12
# Diameters
d1 = (20.13+20.00)/2
d2 = 31.7
d3 = 36
d4 = (40.60+40.45)/2
d5 = 57
d6 = 86
d7 = 100
d8 = 8.0
adj = 1.5
Section: [
Orig: (0,0)
T0: (0,-d7/2)
T1: (6,-d5/2)
T2: (15.5,-d3/2)
T3: (22,-d3/2-adj)
T4: (32,-d2/2)
T5: (41.3,0)
T6: (9.5,-d4/2)
# for_(0,5,1,`"m4x" at T`'m4x')
# Hatching
H: hatchbox(invis ht d7 wid 41.3,2,thick 0.4,-45) with .w at Orig
box invis fill_(1) wid T5.x-T1.x ht T1.y-H.s.y with .se at H.se
box same with .ne at H.ne
box invis fill_(1) wid T3.x-T2.x ht T2.y-T1.y with .nw at T2
box same with .sw at (T2.x,-T2.y)
box invis fill_(1) wid T4.x-T3.x ht T3.y-T1.y with .nw at T3
box same with .sw at (T3.x,-T3.y)
box invis fill_(1) wid T5.x-T4.x ht T4.y-T1.y with .nw at T4
box same with .sw at (T4.x,-T4.y)
# Section outline lower
line from (0,-d4/2) to T0 then right T1.x-T0.x then up 1
arcto(T1,(T2,T1),1)
line to (T2,T1) then up 1
arcto(T2,(T3,T2),1)
arcto((T3,T2),T3,0.5)
arcto(T3,(T4,T3),0.5)
arcto((T4,T3),T4,1)
arcto(T4,(T5,T4),1)
line to (T5,T4) then to (T5.x,-T4.y) then left 1
# Section outline upper
line from (0,d4/2) to (0,-T0.y) then right T1.x-T0.x then down 1
arcto((T1.x,-T1.y),(T2.x,-T1.y),1)
line to (T2.x,-T1.y) then down 1
arcto((T2.x,-T2.y),(T3.x,-T2.y),1)
arcto((T3.x,-T2.y),(T3.x,-T3.y),0.5)
arcto((T3.x,-T3.y),(T4.x,-T3.y),0.5)
arcto((T4.x,-T3.y),(T4.x,-T4.y),1)
arcto((T4.x,-T4.y),(T5.x,-T4.y),1)
line to (T5.x,-T4.y)
box wid 6 ht d8 fill_(1) with .w at (0,d6/2)
box wid 6 ht d8 fill_(1) with .w at (0,-d6/2)
box invis wid T6.x ht d4 fill_(1) with .w at Orig
box wid T5.x-T6.x ht d1 fill_(1) with .e at T5
line from (Orig.x,-T6.y) to (Orig.x,T6.y)
arcto(T6,(T6,Orig),1)
arcto((T6.x,-T6.y),(0,-T6.y),1)
line to (0,-T6.y)
define(`dialabel',
`[tmpthick = linethick; linethick_(1)
[Y14_dia_]; [$1 wid ifelse(`$2',,textht,`$2')] with .w at last [].e+(0.5,0)
linethick_(tmpthick)]')
thinlines_
dimension_(from (0,T6.y) to (0,-T6.y),40,dialabel("40.60" "40.45",12),textht*3)
line up 4 from AE_dimen_.end
Y14_frame(Y14_per_,Y14_dia_;"0";"(M)","A") with .sw at Here
Y14_frame("B") with .s at last [].n+(0,6)
thicklines_(1)
datumarrow(from last [].s to 2nd last [].n)
thinlines_
dimension_(from T2 to (T2.x,-T2.y),30,
dialabel("35.5" "36.0",12),textht*3)
dimension_(from T0 to T0+(T1.x,0),-8,"6.1" "5.9",textht*3)
dimension_(from S_dimen_.end to S_dimen_.end+(T2.x,0),-9,
"15.4" "15.6",textht*4)
line from E_dimen_.start to (T2,T1) chop 0 chop 1
dimension_(from S_dimen_.end to S_dimen_.end+(T3.x,0),-9,
"21.9" "22.1",textht*4)
line from E_dimen_.start to T3 chop 0 chop 1
dimension_(from S_dimen_.end to S_dimen_.end+(T4.x,0),-9,
"31.9" "32.1",textht*4)
line from E_dimen_.start to (T4,T3) chop 0 chop 1
dimension_(from S_dimen_.end to S_dimen_.end+(T5.x,0),-9,
"41.2" "41.4",textht*4)
line from E_dimen_.start to (T5,T4) chop 0 chop 1
line from S_dimen_.start to T0 chop 0 chop 1
dimension_(from (0,d7/2) right T6.x,8,"9.6" "9.4",3*textht)
line from E_dimen_.start to (T6.x,d4/2) chop 0 chop 1
ctrline(from (-3,0) to T5+(3,0),T5.x/2)
ctrline(from (-3,d6/2) right T1.x+6)
ctrline(from (-3,-d6/2) right T1.x+6)
dimension_(from T5-(0,d1/2) to T5+(0,d1/2),-14,
dialabel("20.13" "20.00",4*textht),textht*3)
dimension_(from T5-(0,d2/2) to T5+(0,d2/2),-35,
dialabel("31.8" "31.6",3*textht),textht*3)
arrow <- from (T5.x+6,d1/2) by (Rect_(20,75)) then right 6
Y14_frame(Y14_cir_,"0.06" wid 3*textht,"A","B") with .w at Here
Y14_frame("C") with .n at last [].se+(-6,-8)
thicklines_(1)
datumarrow(from last [].n up 8)
thinlines_
arrow <- from (T5.x+6,-d2/2) by (Rect_(10,-75)) then right 4
Y14_frame(Y14_cir_,"0.1" wid textht*2,"C") with .w at Here
arrow <- from ((T3.x+T4.x)/2,d3/2+adj) by (Rect_(30,75)) then right 4
"M42 X 1.5 - 6g" wid 9*textht ljust
Y14_frame(Y14_pos_,Y14_dia_;"0.1" wid textht*2;"(M)","C";"(M)") \
with .nw at last "".sw+(0,-2)
line from (T2.x,-T1.y) up 25 chop 1 chop 0
Y14_frame(Y14_par_,"0.06" wid 3*textht,"A") with .sw at Here
Y14_frame(Y14_sur_," 0.1 " wid 3*textht,"A") with .sw at last [].nw
arrow <- from (0,-d6/2+10) left 13
Y14_frame(Y14_fla_,"0.02" wid 4*textht) with .e at Here
Y14_frame("A") with .n at last [].s+(0,-6)
datumarrow(from last [].n up 6)
]
Topview:[
C: circle diam d7
for i=0 to 7 do { circle diam d8 at C+(Rect_(d6/2,i/8*360)) }
C5: circle diam d5 at C
C4: circle diam d3+2*adj at C
C3: circle dashed diam d3 at C
C2: circle diam d2 at C
C1: circle diam d1 at C
thinlines_
dimension_(from C.w-(0,10) to C.e-(0,10),-C.rad-15,
dialabel("100" "99",textht*3),textht*5)
dimension_(from C5.w-(0,5) to C5.e-(0,5),-C.rad-5,
dialabel("57.2" "56.8",textht*4),textht*5)
arrow <-> from C+(Rect_(d6/2,-120)) to C+(Rect_(d6/2,60))
line from last arrow.end to C+(Rect_(d7/2+6,60)) then right 4
dialabel("86.2" "85.8",textht*4) with .w at Here+(1,0)
ctrline(from (C.x-(d6-d7/2),C.y) to (C.x+(d6-d7/2),C.y))
ctrline(from (C.x,C.y-d6/2+d8/2) to (C.x,C.y+d6/2-d8/2))
for_(0,315,45,`ctrarcr(C,d6/2,(m4x-22.5)*dtor_,(m4x+22.5)*dtor_)
ctrline(from C+(Rect_(d6-d7/2,m4x)) to C+(Rect_(d7/2,m4x))) ')
arcdimension_(from C+(0,d7/2) to C+(Rect_(d7/2,135)) with .c at C,
8,"8 X 45`'iflatex($^\circ$)" wid textht*3.5,15,1)
ifsvg("svg_deg" wid textht*2/3 with .w at last "".e)
move to C+(0,d6/2)
arrow <- from Here+(Rect_(8/2,75)) to Here+(Rect_(25,75)) then right_ 3
"8 X" wid 3*textht ljust
linethick_(1); [Y14_dia_] with .w at last "".e+(1,0)
"7.9 - 8.1" wid 8*textht ljust
Y14_frame(Y14_pos_,Y14_dia_;"0.14" wid 3*textht;"(M)","A","C") \
with .nw at 2nd last "".sw+(0,-2)
] with .C at Section.Orig+(4.5*scale,0)
ifpostscript(,latexcommand(}%))
ifsvg(command "</g>")
PE