Not sure if I understand your point there Peter ...
This morning I wrote a short perl script - it takes two input files :
boards.txt - this gives a simple "ID" for each board in the panel, and the XY of its origin in the panel. This example would be for four boards spaced on a 100mm matrix. Note that every board, including the one at 0,0, is listed.
A 0 0
B 100 0
C 0 100
D 100 100
components.txt - the P&P file (from the one that Rinus gave):
Component X Y Rotation Side Package
--------------------------------------------------------------------------------
BCS100 21.50000 2.50000 0.000 Top CON_SPOT-200X500
BCS101 27.75000 2.50000 0.000 Top CON_SPOT-250X300
BCS200 21.50000 6.50000 0.000 Top CON_SPOT-200X500
BCS201 27.70000 6.50000 0.000 Top CON_SPOT-250X300
R100 16.40000 2.75000 90.000 Top RESC1608x60
R101 10.00000 2.75000 270.000 Top RESC2012X65
R200 16.40000 6.25000 90.000 Top RESC1608x60
R201 10.00000 6.25000 270.000 Top RESC2012X65
T100 13.35000 2.75000 0.000 Top SOT95P240X110-3
T200 13.35000 6.25000 0.000 Top SOT95P240X110-3
Y001 0.00000 4.50000 0.000 Top CON_EDGE
and it makes this output file:
Component X Y Rotation Side Package
BCS100_A 21.5 2.5 0.000 Top CON_SPOT-200X500
BCS100_B 121.5 2.5 0.000 Top CON_SPOT-200X500
BCS100_C 21.5 102.5 0.000 Top CON_SPOT-200X500
BCS100_D 121.5 102.5 0.000 Top CON_SPOT-200X500
BCS101_A 27.75 2.5 0.000 Top CON_SPOT-250X300
BCS101_B 127.75 2.5 0.000 Top CON_SPOT-250X300
BCS101_C 27.75 102.5 0.000 Top CON_SPOT-250X300
BCS101_D 127.75 102.5 0.000 Top CON_SPOT-250X300
BCS200_A 21.5 6.5 0.000 Top CON_SPOT-200X500
BCS200_B 121.5 6.5 0.000 Top CON_SPOT-200X500
BCS200_C 21.5 106.5 0.000 Top CON_SPOT-200X500
BCS200_D 121.5 106.5 0.000 Top CON_SPOT-200X500
BCS201_A 27.7 6.5 0.000 Top CON_SPOT-250X300
BCS201_B 127.7 6.5 0.000 Top CON_SPOT-250X300
BCS201_C 27.7 106.5 0.000 Top CON_SPOT-250X300
BCS201_D 127.7 106.5 0.000 Top CON_SPOT-250X300
R100_A 16.4 2.75 90.000 Top RESC1608x60
R100_B 116.4 2.75 90.000 Top RESC1608x60
R100_C 16.4 102.75 90.000 Top RESC1608x60
R100_D 116.4 102.75 90.000 Top RESC1608x60
R101_A 10 2.75 270.000 Top RESC2012X65
R101_B 110 2.75 270.000 Top RESC2012X65
R101_C 10 102.75 270.000 Top RESC2012X65
R101_D 110 102.75 270.000 Top RESC2012X65
R200_A 16.4 6.25 90.000 Top RESC1608x60
R200_B 116.4 6.25 90.000 Top RESC1608x60
R200_C 16.4 106.25 90.000 Top RESC1608x60
R200_D 116.4 106.25 90.000 Top RESC1608x60
R201_A 10 6.25 270.000 Top RESC2012X65
R201_B 110 6.25 270.000 Top RESC2012X65
R201_C 10 106.25 270.000 Top RESC2012X65
R201_D 110 106.25 270.000 Top RESC2012X65
T100_A 13.35 2.75 0.000 Top SOT95P240X110-3
T100_B 113.35 2.75 0.000 Top SOT95P240X110-3
T100_C 13.35 102.75 0.000 Top SOT95P240X110-3
T100_D 113.35 102.75 0.000 Top SOT95P240X110-3
T200_A 13.35 6.25 0.000 Top SOT95P240X110-3
T200_B 113.35 6.25 0.000 Top SOT95P240X110-3
T200_C 13.35 106.25 0.000 Top SOT95P240X110-3
T200_D 113.35 106.25 0.000 Top SOT95P240X110-3
Y001_A 0 4.5 0.000 Top CON_EDGE
Y001_B 100 4.5 0.000 Top CON_EDGE
Y001_C 0 104.5 0.000 Top CON_EDGE
Y001_D 100 104.5 0.000 Top CON_EDGE
It's pretty simple, but I think it does the job? I will clean it up a bit and post it here if this seems to solve the problem. (perl is fastest for me to do this kind of job - it runs fine in windows with strawberry perl.)
Let me know if this looks useful.