!$XC_DATA/xmac_examples/ticks.mod * Draw diagonal ticks along a line/string/netline entity #include $XC_DATA/xminc/db.h main if ( !is_set(tick_n) ) tick_n = 1 if ( !is_set(tick_s) ) tick_s = tick_p * 0.05 ent_mask(mask, -1) ent_mask(mask, LINE) ent_mask(mask, STRING) ent_mask(mask, NETLINE) while( ents(1, index, mask, "Identify entity") == 1 ) num = srec_coords(index, xy) offset = tick_p tents = 1 for(num - 1, i) dx = x(xy[i+1]) - x(xy[i]) dy = y(xy[i+1]) - y(xy[i]) len = sqrt(dx * dx + dy * dy) while( offset <= len ) xo = x(xy[i]) yo = y(xy[i]) xp = xo + dx * (offset / len) yp = yo + dy * (offset / len) call draw_tick(xp, yp, \ tick_l, tick_n, tick_s, \ atan2(dy, dx), \ index, tents) offset += tick_p end offset -= len end link entity mutual : {id;index} end finish * draw tick function proc draw_tick(x, y, length, numt, tick_spc, ang, index, tents) txo = cos(ang) * tick_spc tyo = sin(ang) * tick_spc span = (numt - 1) * tick_spc txs = x - cos(ang) * (span / 2) tys = y - sin(ang) * (span / 2) td = cos(pi() / 4) * (length / 2) for(numt, i) draw line : {(txs + td):(tys + td)} \ {(txs - td):(tys - td)} txs += txo tys += tyo index[tents] = last_ent() tents += 1 end finish