summaryrefslogtreecommitdiff
path: root/graphics/circuit_macros/examples/ASME_Y14-5.m4
blob: fbcf8eb0032b63cfa433083071fea5f492b06808 (plain)
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
divert(-1)
#                                   `datumarrow(linespec,wid,ht)'
define(`datumarrow',`line `$1'
  M4_E: last line.end
  datum_ht = ifelse(`$3',,`textht',`$3')
  M4_P: vperp(last line,(datum_ht*2/sqrt(3)))
  M4_X: datum_ht/lin_leng(last line) between M4_E and last line.start 
  {ifsvg(,`m4fshade(m4fill,')line from M4_E to M4_E+M4_P/2 dnl
     then to M4_X then to M4_E-M4_P/2 then to M4_E ifsvg(`fill_(0)',`)')}')

#                          `Y14_frame( arg1, arg2, ... )
                             Each arg is a ;-separated sequence of 1 or more of
                               "string"[ wid val],
                               "(letter)",
                               or tolerance symbol.
                             The term "(letter)" expands to the circled letter.
                             The frame contains as many boxes as arguments.'
                            `Symbol definitions from ASME Y14.5 Appendix C'
define(`Y14_frameht',`textht*2')
define(`Y14_defaultwid',`textht*2')
#
define(`Y14_frame',`[ tmpthick = linethick; thicklines_
  right_; B:[ Y14_fram_($@) ]
  box wid B.wid ht Y14_frameht at B
  linethick = tmpthick ]')
define(`Y14_fram_',`ifelse(`$1',,,
`stacksplit_(`Y14',`$1',;) stackreverse_(`Y14')
 Bx: [stackdo_(`Y14',
 `[ifelse(index(Y14,`"('),0,
    `circle diam textht*5/3
     patsubst(Y14,`"(\(.\))"',`"\1"') ht textht*0.8 at last circle',
   index(Y14,`"'),0,
    `Y14 ifinstr(Y14,`wid ',,`wid textht*2/3*(len(Y14)-2)')',
   `Y14')]
   move right max(last [].wid+textht/2,Y14_defaultwid) with .c at last []; ')]
 ifelse(`$2',,,`{ line up Y14_frameht with .c at Here }')
 Y14_fram_(shift($@))') ')

#                           Each symbol definition has an abbreviated version
define(`Y14_straightness',
`line right textht*2 ')
define(`Y14_str_',`Y14_straightness($@)')

define(`Y14_flatness',
`line right textht*3/4 then down textht left textht/2 \
   then left textht*3/2 then up textht right textht/2 \
   then right textht*3/4 ')
define(`Y14_fla_',`Y14_flatness($@)')

define(`Y14_circularity',`circle diam textht*3/2 ')
define(`Y14_cir_',`Y14_circularity($@)')

define(`Y14_cylindricity',
`circle diam textht
 Y14_C: last circle
 Y14_R: (Rect_(last circle.rad,-30))
 Y14_A: (Rect_(textht,60))
 line from Y14_C+Y14_R+Y14_A to Y14_C+Y14_R-Y14_A/2
 line from Y14_C-Y14_R-Y14_A to Y14_C-Y14_R+Y14_A/2 ')
define(`Y14_cyl_',`Y14_cylindricity($@)')

define(`Y14_lineprofile',`arc from (textht,0) to (-textht,0) with .c at Here ')
define(`Y14_lin_',`Y14_lineprofile($@)')

define(`Y14_surfaceprofile',
`arc from (textht,0) to (-textht,0) with .c at Here
 line from last arc.start to last arc.end ')
define(`Y14_sur_',`Y14_surfaceprofile($@)')

define(`Y14_perpendicularity',
`line from (-textht,0) to (textht,0)
 line from (0,0) to (0,textht*3/2) ')
define(`Y14_per_',`Y14_perpendicularity($@)')

define(`Y14_angularity',
`line from (textht*3/2,0) to (0,0) then to (textht*3/2,textht*sqrt(3)/2) ')
define(`Y14_ang_',`Y14_angularity($@)')

define(`Y14_parallelism',
`line up textht*3/2*sqrt(3)/2 right textht*3/4
 move right textht*0.6
 line down textht*3/2*sqrt(3)/2 left textht*3/4 ')
define(`Y14_par_',`Y14_parallelism($@)')

define(`Y14_symmetry', dnl obsolete!
`line from (-textht/2,0) to (textht/2,0)
 line from (-textht/3,textht/4) to (textht/3,textht/4)
 line from (-textht/3,-textht/4) to (textht/3,-textht/4) ')
define(`Y14_sym_',`Y14_symmetry($@)')

define(`Y14_position',
`circle diam textht
 line up    textht*3/2 with .c at last circle
 line right textht*3/2 with .c at last circle ')
define(`Y14_pos_',`Y14_position($@)')

define(`Y14_concentricity', dnl obsolete!
`circle diam textht
 circle diam textht/2 at last circle ')
define(`Y14_con_',`Y14_concentricity($@)')

define(`Y14_circularrunout',
`arrow ht textht*0.8 wid textht*0.6 up textht*3/2 right textht*3/2 ')
define(`Y14_cir_',`Y14_circularrunout($@)')

define(`Y14_totalrunout',
`arrow <-> ht textht*0.8 wid textht*0.6 \
 down textht*3/2 left textht*3/2 then right textht*1.1 \
 then up textht*3/2 right textht*3/2 ')
define(`Y14_tot_',`Y14_totalrunout($@)')

define(`Y14_diameter',
`circle diam textht
 line up textht*3/2 right textht*3/4 with .c at last circle')
define(`Y14_dia_',`Y14_diameter($@)')

#                             The following are not Y14.5 but go well with them:

                             `r_box(angle,pos,string)
                              Rotated text on a white background
                              (requires pstricks)'
define(`r_box',
 `ifpstricks(`M4tmp: ifelse(`$2',,Here,`$2')
  command sprintf("\rput{%g}(%g,%g){",`$1',crl(M4tmp.x),crl(M4tmp.y))
  f_box(`$3') at Orig
 command "}%"')')
define(`crl',`int(`($1)'/scale*1000000)/1000000')

                             `r_dimen(linespec,offset,label,tic offset,<->,pos)
                              dimension_ with rotated text on white background'
define(`r_dimen',
 `M4tmp: dimension_(`$1',`$2',,,`$4',`$5')
  r_box(rp_ang*rtod_,ifelse(`$6',,M4tmp+vec_(0,`$2'),`$6'),`$3')')

                             `ctrline(linespec,cycle len)
                              Centerline'
define(`cdashl',0.1*scale)
define(`cgapl',0.03*scale)
define(`ctrline',`rpoint_(ifelse(`$1',,`to rvec_(linewid,0)',`$1'))
  define(`m4h',ifelse(`$2',,1*scale,`$2'))dnl
  m4n = int(rp_len/2/(m4h))*2+1
  for i=1 to m4n do {
    line to rvec_(rp_len/m4n/2-cdashl/2-cgapl,0)
    move to rvec_(cgapl,0); line to rvec_(cdashl,0); move to rvec_(cgapl,0)
    line to rvec_(rp_len/m4n/2-cdashl/2-cgapl,0) } ')

                             `ctrarcr(pos,radius,startang,endang,len)
                              Arc cr centerline'
define(`ctrarcr',`dnl
  define(`m5h',ifelse(`$5',,1*scale,`$5'))dnl
  rp_len = abs((`$2')*(`$4'-(`$3')))
  m5n = int(rp_len/2/(m5h))*2+1
  m5a = (rp_len/m5n/2-cdashl/2-cgapl)/(`$2')
  m5s = cdashl/(`$2')
  m5sa = `$3'
  for m4irr=1 to m5n do {
    arc from `$1'+(rect_(`$2',m5sa)) to `$1'+(rect_(`$2',m5sa+m5a)) \
      with .c at `$1'
    m5sa = m5sa+m5a+cgapl/(`$2')
    arc from `$1'+(rect_(`$2',m5sa)) to `$1'+(rect_(`$2',m5sa+m5s)) \
      with .c at `$1'
    m5sa = m5sa+m5s+cgapl/(`$2')
    arc from `$1'+(rect_(`$2',m5sa)) to `$1'+(rect_(`$2',m5sa+m5a)) \
      with .c at `$1'
    m5sa = m5sa+m5a
    } ')

divert(0)dnl