numeric classyscale, classxscale ; classyscale := 2cm ; classxscale := 3.5cm ; vardef class ( expr name, x, y ) = save p, q ; path p, q, pd, qd ; pickup pencircle scaled 0.8pt ; pd := fullcircle xscaled classxscale yscaled classyscale ; qd := pd shifted (x + 5pt, y); fill qd withcolor black ; draw qd ; p := fullcircle xscaled 3.5cm yscaled 2cm ; q := p shifted (x, y) ; fill q withcolor 0.7white ; label(name, center q) withcolor blue ; draw q; q enddef ; def inheritfrom ( expr child, parent, n ) = save p ; pair a, b ; path p ; pickup pencircle scaled 3pt ; a := point n of parent shifted (0, -5pt) ; b := point 2 of child shifted (0, 5pt) ; p := b -- unitvector (a) ; draw p ; enddef ;