Skip to content

Commit 4c06ce7

Browse files
authored
Merge pull request #19 from sparkfun/release_candidate
Revert to 1/4" rails. Position the fiducials at 1/4 of the width. Resolves #15
2 parents 8eb25ab + c7725fe commit 4c06ce7

File tree

2 files changed

+34
-15
lines changed

2 files changed

+34
-15
lines changed

SparkFunKiCadPanelizer/panelizer/panelizer.py

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ def args_parse(self, args):
7373
)
7474
parser.add_argument("--hrail", type=float, default="0.0", help="Horizontal edge rail width (mm)")
7575
parser.add_argument("--vrail", type=float, default="0.0", help="Vertical edge rail width (mm)")
76+
7677
parser.add_argument("--hrailtext", help="Text to put on the horizontal edge rail")
7778
parser.add_argument("--vrailtext", help="Text to put on the vertical edge rail")
7879
parser.add_argument(
@@ -108,6 +109,11 @@ def args_parse(self, args):
108109
parser.add_argument(
109110
"--fiducialstb", action="store_true", help="Add panel fiducials top and bottom"
110111
)
112+
parser.add_argument(
113+
"--fiducialpos", type=float, default="0.5",
114+
help="Position the fiducials at this fraction of the rail width, default 0.5"
115+
)
116+
111117
parser.add_argument(
112118
"--exposeedge", action="store_true", help="Expose PCB bottom edge - e.g. for M.2 cards"
113119
)
@@ -190,6 +196,7 @@ def startPanelizer(self, args, board=None, ordering=None, logger=None):
190196
TITLE_Y = args.vtitle
191197
FIDUCIALS_LR = args.fiducialslr
192198
FIDUCIALS_TB = args.fiducialstb
199+
FIDUCIAL_POS = args.fiducialpos
193200
EXPOSED_EDGE = args.exposeedge
194201

195202
# Check if this is running in a plugin
@@ -280,21 +287,31 @@ def startPanelizer(self, args, board=None, ordering=None, logger=None):
280287
sysExit = 2
281288
return sysExit, report
282289

290+
# Check the fiducial position
291+
if (FIDUCIAL_POS < 0.0) or (FIDUCIAL_POS > 1.0):
292+
report += "Invalid fiducial position. Quitting.\n"
293+
sysExit = 2
294+
return sysExit, report
295+
283296
# Check the fiducials
284297
if FIDUCIALS_LR:
285-
if (VERTICAL_EDGE_RAIL_WIDTH < (FIDUCIAL_MASK + 1)):
286-
report += "Cannot add L+R fiducials - edge rails not wide enough.\n"
298+
fiducialExtent = (abs(0.5 - FIDUCIAL_POS) * VERTICAL_EDGE_RAIL_WIDTH) + (FIDUCIAL_MASK / 2)
299+
clampClearance = VERTICAL_EDGE_RAIL_WIDTH - ((FIDUCIAL_POS * VERTICAL_EDGE_RAIL_WIDTH) + (FIDUCIAL_MASK / 2))
300+
if fiducialExtent >= (VERTICAL_EDGE_RAIL_WIDTH / 2):
301+
report += "Cannot add L+R fiducials at the selected position - edge rails not wide enough.\n"
287302
FIDUCIALS_LR = False
288303
sysExit = 1
289-
elif (((VERTICAL_EDGE_RAIL_WIDTH - FIDUCIAL_MASK) / 2) < FIDUCIAL_CLAMP_CLEARANCE):
304+
elif clampClearance < FIDUCIAL_CLAMP_CLEARANCE:
290305
report += "Vertical edge rails do not provide adequate clamp clearance.\n"
291306
sysExit = 1
292307
if FIDUCIALS_TB:
293-
if (HORIZONTAL_EDGE_RAIL_WIDTH < (FIDUCIAL_MASK + 1)):
294-
report += "Cannot add T+B fiducials - edge rails not wide enough.\n"
308+
fiducialExtent = (abs(0.5 - FIDUCIAL_POS) * HORIZONTAL_EDGE_RAIL_WIDTH) + (FIDUCIAL_MASK / 2)
309+
clampClearance = HORIZONTAL_EDGE_RAIL_WIDTH - ((FIDUCIAL_POS * HORIZONTAL_EDGE_RAIL_WIDTH) + (FIDUCIAL_MASK / 2))
310+
if fiducialExtent >= (HORIZONTAL_EDGE_RAIL_WIDTH / 2):
311+
report += "Cannot add T+B fiducials at the selected position - edge rails not wide enough.\n"
295312
FIDUCIALS_TB = False
296313
sysExit = 1
297-
elif (((HORIZONTAL_EDGE_RAIL_WIDTH - FIDUCIAL_MASK) / 2) < FIDUCIAL_CLAMP_CLEARANCE):
314+
elif clampClearance < FIDUCIAL_CLAMP_CLEARANCE:
298315
report += "Horizontal edge rails do not provide adequate clamp clearance.\n"
299316
sysExit = 1
300317

@@ -1015,34 +1032,34 @@ def startPanelizer(self, args, board=None, ordering=None, logger=None):
10151032
fiducials = []
10161033
if FIDUCIALS_LR:
10171034
fiducials.append([
1018-
int(panelCenter.x - (panelWidth / 2 - VERTICAL_EDGE_RAIL_WIDTH / 2 * SCALE)),
1035+
int(panelCenter.x - (panelWidth / 2 - VERTICAL_EDGE_RAIL_WIDTH * (1.0 - FIDUCIAL_POS) * SCALE)),
10191036
int(panelCenter.y + (panelHeight / 2 - (SCALE * FIDUCIAL_OFFSET_FROM_RAIL + SCALE * HORIZONTAL_EDGE_RAIL_WIDTH))),
10201037
FIDUCIAL_FOOTPRINT_BIG
10211038
])
10221039
fiducials.append([
1023-
int(panelCenter.x - (panelWidth / 2 - VERTICAL_EDGE_RAIL_WIDTH / 2 * SCALE)),
1040+
int(panelCenter.x - (panelWidth / 2 - VERTICAL_EDGE_RAIL_WIDTH * (1.0 - FIDUCIAL_POS) * SCALE)),
10241041
int(panelCenter.y - (panelHeight / 2 - (SCALE * FIDUCIAL_OFFSET_FROM_RAIL + SCALE * HORIZONTAL_EDGE_RAIL_WIDTH))),
10251042
FIDUCIAL_FOOTPRINT_SMALL
10261043
])
10271044
fiducials.append([
1028-
int(panelCenter.x + (panelWidth / 2 - VERTICAL_EDGE_RAIL_WIDTH / 2 * SCALE)),
1045+
int(panelCenter.x + (panelWidth / 2 - VERTICAL_EDGE_RAIL_WIDTH * (1.0 - FIDUCIAL_POS) * SCALE)),
10291046
int(panelCenter.y - (panelHeight / 2 - (SCALE * FIDUCIAL_OFFSET_FROM_RAIL + SCALE * HORIZONTAL_EDGE_RAIL_WIDTH))),
10301047
FIDUCIAL_FOOTPRINT_SMALL
10311048
])
10321049
if FIDUCIALS_TB:
10331050
fiducials.append([
10341051
int(panelCenter.x - (panelWidth / 2 - (SCALE * FIDUCIAL_OFFSET_FROM_RAIL + SCALE * VERTICAL_EDGE_RAIL_WIDTH))),
1035-
int(panelCenter.y + (panelHeight / 2 - HORIZONTAL_EDGE_RAIL_WIDTH / 2 * SCALE)),
1052+
int(panelCenter.y + (panelHeight / 2 - HORIZONTAL_EDGE_RAIL_WIDTH * (1.0 - FIDUCIAL_POS) * SCALE)),
10361053
FIDUCIAL_FOOTPRINT_BIG
10371054
])
10381055
fiducials.append([
10391056
int(panelCenter.x - (panelWidth / 2 - (SCALE * FIDUCIAL_OFFSET_FROM_RAIL + SCALE * VERTICAL_EDGE_RAIL_WIDTH))),
1040-
int(panelCenter.y - (panelHeight / 2 - HORIZONTAL_EDGE_RAIL_WIDTH / 2 * SCALE)),
1057+
int(panelCenter.y - (panelHeight / 2 - HORIZONTAL_EDGE_RAIL_WIDTH * (1.0 - FIDUCIAL_POS) * SCALE)),
10411058
FIDUCIAL_FOOTPRINT_SMALL
10421059
])
10431060
fiducials.append([
10441061
int(panelCenter.x + (panelWidth / 2 - (SCALE * FIDUCIAL_OFFSET_FROM_RAIL + SCALE * VERTICAL_EDGE_RAIL_WIDTH))),
1045-
int(panelCenter.y - (panelHeight / 2 - HORIZONTAL_EDGE_RAIL_WIDTH / 2 * SCALE)),
1062+
int(panelCenter.y - (panelHeight / 2 - HORIZONTAL_EDGE_RAIL_WIDTH * (1.0 - FIDUCIAL_POS) * SCALE)),
10461063
FIDUCIAL_FOOTPRINT_SMALL
10471064
])
10481065
for pos in fiducials:

SparkFunKiCadPanelizer/plugin.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,19 +134,21 @@ def run_panelizer(dlg, p_panelizer):
134134
leftright = dlg.CurrentSettings()["productionFiducialsCheck"]
135135
if not exposeedge:
136136
if fiducials:
137-
# Default the rail width to 3/8".
137+
# Default the rail width to 1/4" and nudge by 1/4 of the rail width.
138138
# This provides the clearance needed for clamping and AOI Inspection of the fiducials.
139139
# This is nasty. The default should be in panelizer.py. But I can't think of a solution
140140
# which is good for everyone - including anyone running the panelizer from the command line.
141-
command.extend(['--hrail','9.525','--vrail','9.525'])
141+
command.extend(['--hrail','6.35','--vrail','6.35'])
142+
command.extend(['--fiducialpos','0.25'])
142143
if leftright:
143144
command.append('--fiducialslr')
144145
else:
145146
command.append('--fiducialstb')
146147
else:
147148
if fiducials:
148149
# Same comment as above
149-
command.extend(['--vrail','9.525'])
150+
command.extend(['--vrail','6.35'])
151+
command.extend(['--fiducialpos','0.25'])
150152
command.append('--fiducialslr')
151153

152154
self.logger.log(logging.INFO, command)

0 commit comments

Comments
 (0)