1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
.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)
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
|