|
63 | 63 | { gsave 0 0 moveto 10 dict begin /loosespec false def /griddpi 300 def 1 0.330 0.3295 0.3305 false false /gridfit render end |
64 | 64 | not { pop grestore } if % Discard info string, grestore |
65 | 65 | } /bwipp.renderGridfitXdimOutOfSpec isEqual |
| 66 | + |
| 67 | +% |
| 68 | +% snapy=true must mirror the x-axis retry direction so square matrix |
| 69 | +% symbols (QR, Data Matrix, Aztec, ...) stay square. The three cases |
| 70 | +% below exercise each xsnapmode outcome and assert scale_x == scale_y |
| 71 | +% by comparing |dtransform(1,0)| against |dtransform(0,1)| after gridfit. |
| 72 | +% Dev-px calculations assume the test device's 72 DPI resolution so |
| 73 | +% devpx = griddpi / 72 per user unit. |
| 74 | +% |
| 75 | +% snapy=true + ceiling retry (xsnapmode=2) |
| 76 | +% griddpi=300: devpx=4.167, round=4 eff=0.288 < xmin=0.295, frac=0.167 <0.5 |
| 77 | +% so retry picks ceiling=5 eff=0.360 within [0.295, 0.400]. y must |
| 78 | +% also snap to 5 rather than its independent round=4. |
| 79 | +% |
| 80 | +{ gsave 0 0 moveto 10 dict begin /loosespec false def /griddpi 300 def 1 0.300 0.295 0.400 false true /gridfit render |
| 81 | + { 1 0 dtransform abs exch abs add 0 1 dtransform abs exch abs add sub abs 0.0001 lt } |
| 82 | + { pop false } ifelse |
| 83 | + end grestore } true isEqual |
| 84 | + |
| 85 | +% |
| 86 | +% snapy=true + floor retry (xsnapmode=1) |
| 87 | +% griddpi=200: devpx=2.778, round=3 eff=0.410 > xmax=0.379, frac=0.778 >=0.5 |
| 88 | +% so retry picks floor=2 eff=0.274 within [0.200, 0.379]. y must |
| 89 | +% also snap to 2 rather than its independent round=3. |
| 90 | +% |
| 91 | +{ gsave 0 0 moveto 10 dict begin /loosespec false def /griddpi 200 def 1 0.380 0.200 0.379 false true /gridfit render |
| 92 | + { 1 0 dtransform abs exch abs add 0 1 dtransform abs exch abs add sub abs 0.0001 lt } |
| 93 | + { pop false } ifelse |
| 94 | + end grestore } true isEqual |
| 95 | + |
| 96 | +% |
| 97 | +% snapy=true + loosespec revert to snap1 (xsnapmode reset to 0) |
| 98 | +% griddpi=300: devpx=4.167, round=4 eff=0.288 < xmin=0.295 fail, |
| 99 | +% retry ceiling=5 eff=0.360 > xmax=0.350 fail. loosespec picks closer: |
| 100 | +% dist(0.288)=0.007 < dist(0.360)=0.010, so snap1 (round=4) wins and |
| 101 | +% xsnapmode must reset to 0 so y also rounds to 4, not stay at ceil=5. |
| 102 | +% |
| 103 | +{ gsave 0 0 moveto 10 dict begin /loosespec true def /griddpi 300 def 1 0.300 0.295 0.350 false true /gridfit render |
| 104 | + { 1 0 dtransform abs exch abs add 0 1 dtransform abs exch abs add sub abs 0.0001 lt } |
| 105 | + { pop false } ifelse |
| 106 | + end grestore } true isEqual |
0 commit comments