.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 "") .PE