@@ -306,8 +306,32 @@ def startPanelizer(self, args, board=None, ordering=None, logger=None):
306306 # Set up layer table
307307 layertable = {}
308308 numlayers = pcbnew .PCB_LAYER_ID_COUNT
309+ edgeLayerNumber = None
310+ vScoreLayerNumber = None
311+ vScoreTextLayerNumber = None
309312 for i in range (numlayers ):
310- layertable [board .GetLayerName (i )] = i
313+ layertable [i ] = {'standardName' : board .GetStandardLayerName (i ), 'actualName' : board .GetLayerName (i )}
314+ if "Edge.Cuts" in board .GetStandardLayerName (i ):
315+ edgeLayerNumber = i
316+ if V_SCORE_LAYER in board .GetStandardLayerName (i ):
317+ vScoreLayerNumber = i
318+ if V_SCORE_TEXT_LAYER in board .GetStandardLayerName (i ):
319+ vScoreTextLayerNumber = i
320+
321+ if edgeLayerNumber is None :
322+ report += "Edge.Cuts not found in layertable. Quitting.\n "
323+ sysExit = 2
324+ return sysExit , report
325+
326+ if vScoreLayerNumber is None :
327+ report += V_SCORE_LAYER + " not found in layertable. Quitting.\n "
328+ sysExit = 2
329+ return sysExit , report
330+
331+ if vScoreTextLayerNumber is None :
332+ report += V_SCORE_TEXT_LAYER + " not found in layertable. Quitting.\n "
333+ sysExit = 2
334+ return sysExit , report
311335
312336 # Get dimensions of board
313337 # Note: the bounding box width and height _include_ the Edge.Cuts line width.
@@ -324,7 +348,7 @@ def startPanelizer(self, args, board=None, ordering=None, logger=None):
324348 cutWidth = 0
325349 drawings = board .GetDrawings ()
326350 for drawing in drawings :
327- if drawing .IsOnLayer (layertable [ "Edge.Cuts" ] ):
351+ if drawing .IsOnLayer (edgeLayerNumber ):
328352 if drawing .GetWidth () > cutWidth :
329353 cutWidth = drawing .GetWidth ()
330354 #report += "Subtracting Edge.Cuts line width of {}mm.\n".format(cutWidth / SCALE)
@@ -404,7 +428,7 @@ def startPanelizer(self, args, board=None, ordering=None, logger=None):
404428 sparkxLogoSeen = False
405429 solderMask = None
406430 silkscreen = None
407- numLayers = None
431+ numLayers = "Layers: {}" . format ( board . GetCopperLayerCount ())
408432 controlledImpedance = None
409433 finish = None
410434 thickness = None
@@ -427,11 +451,6 @@ def startPanelizer(self, args, board=None, ordering=None, logger=None):
427451 drill = sourceTrack .GetDrill ()
428452 if drill < minViaDrill :
429453 minViaDrill = drill
430- layer = sourceTrack .GetLayerName ()
431- if numLayers is None and ("In1.Cu" in layer or "In2.Cu" in layer ):
432- numLayers = "Layers: 4"
433- if "In3.Cu" in layer or "In4.Cu" in layer :
434- numLayers = "Layers: 6"
435454 for x in range (0 , NUM_X ): # iterate through x direction
436455 for y in range (0 , NUM_Y ): # iterate through y direction
437456 if (x != 0 ) or (y != 0 ): # do not duplicate source object to location
@@ -619,7 +638,7 @@ def startPanelizer(self, args, board=None, ordering=None, logger=None):
619638 # Erase all existing edgeCuts objects (individual board outlines)
620639 #drawings = board.GetDrawings()
621640 #for drawing in drawings:
622- # if drawing.IsOnLayer(layertable["Edge.Cuts"] ):
641+ # if drawing.IsOnLayer(edgeLayerNumber ):
623642 # drawing.DeleteStructure()
624643
625644 # Rail Edge.Cuts
@@ -742,7 +761,7 @@ def startPanelizer(self, args, board=None, ordering=None, logger=None):
742761 board .Add (edge )
743762 edge .SetStart (pcbnew .VECTOR2I (int (cut [0 ]), int (cut [1 ])))
744763 edge .SetEnd (pcbnew .VECTOR2I (int (cut [2 ]), int (cut [3 ])))
745- edge .SetLayer (layertable [ "Edge.Cuts" ] )
764+ edge .SetLayer (edgeLayerNumber )
746765
747766 # Re-calculate board dimensions with new edge cuts
748767 panelWidth = board .GetBoardEdgesBoundingBox ().GetWidth ()
@@ -806,7 +825,7 @@ def startPanelizer(self, args, board=None, ordering=None, logger=None):
806825 v_score_line = pcbnew .PCB_SHAPE (board )
807826 v_score_line .SetStart (pcbnew .VECTOR2I (int (x_loc ), int (vscore_top )))
808827 v_score_line .SetEnd (pcbnew .VECTOR2I (int (x_loc ), int (vscore_bottom )))
809- v_score_line .SetLayer (layertable [ V_SCORE_LAYER ] )
828+ v_score_line .SetLayer (vScoreLayerNumber )
810829 v_score_line .SetWidth (int (V_SCORE_WIDTH * SCALE ))
811830 board .Add (v_score_line )
812831 v_score_text = pcbnew .PCB_TEXT (board )
@@ -818,7 +837,7 @@ def startPanelizer(self, args, board=None, ordering=None, logger=None):
818837 v_score_text .SetTextSize (
819838 pcbnew .VECTOR2I (SCALE * V_SCORE_TEXT_SIZE , SCALE * V_SCORE_TEXT_SIZE )
820839 )
821- v_score_text .SetLayer (layertable [ V_SCORE_TEXT_LAYER ] )
840+ v_score_text .SetLayer (vScoreTextLayerNumber )
822841 v_score_text .SetTextAngle (pcbnew .EDA_ANGLE (900 , pcbnew .TENTHS_OF_A_DEGREE_T ))
823842 board .Add (v_score_text )
824843
@@ -856,7 +875,7 @@ def startPanelizer(self, args, board=None, ordering=None, logger=None):
856875 v_score_line = pcbnew .PCB_SHAPE (board )
857876 v_score_line .SetStart (pcbnew .VECTOR2I (int (vscore_left ), int (y_loc )))
858877 v_score_line .SetEnd (pcbnew .VECTOR2I (int (vscore_right ), int (y_loc )))
859- v_score_line .SetLayer (layertable [ V_SCORE_LAYER ] )
878+ v_score_line .SetLayer (vScoreLayerNumber )
860879 v_score_line .SetWidth (int (V_SCORE_WIDTH * SCALE ))
861880 board .Add (v_score_line )
862881 v_score_text = pcbnew .PCB_TEXT (board )
@@ -868,7 +887,7 @@ def startPanelizer(self, args, board=None, ordering=None, logger=None):
868887 v_score_text .SetTextSize (
869888 pcbnew .VECTOR2I (SCALE * V_SCORE_TEXT_SIZE , SCALE * V_SCORE_TEXT_SIZE )
870889 )
871- v_score_text .SetLayer (layertable [ V_SCORE_TEXT_LAYER ] )
890+ v_score_text .SetLayer (vScoreTextLayerNumber )
872891 v_score_text .SetTextAngle (pcbnew .EDA_ANGLE (0 , pcbnew .TENTHS_OF_A_DEGREE_T ))
873892 board .Add (v_score_text )
874893
@@ -919,7 +938,7 @@ def startPanelizer(self, args, board=None, ordering=None, logger=None):
919938 route_text = pcbnew .PCB_TEXT (board )
920939 route_text .SetText ("ROUTE OUT" )
921940 route_text .SetTextSize (pcbnew .VECTOR2I (SCALE * V_SCORE_TEXT_SIZE , SCALE * V_SCORE_TEXT_SIZE ))
922- route_text .SetLayer (layertable [ V_SCORE_TEXT_LAYER ] )
941+ route_text .SetLayer (vScoreLayerNumber )
923942 route_text .SetHorizJustify (pcbnew .GR_TEXT_H_ALIGN_CENTER )
924943 route_text .SetPosition (pcbnew .VECTOR2I (pos [0 ], pos [1 ]))
925944 route_text .SetTextAngle (pcbnew .EDA_ANGLE (pos [2 ], pcbnew .TENTHS_OF_A_DEGREE_T ))
@@ -930,7 +949,7 @@ def startPanelizer(self, args, board=None, ordering=None, logger=None):
930949 route_text = pcbnew .PCB_TEXT (board )
931950 route_text .SetText ("DO NOT REMOVE" )
932951 route_text .SetTextSize (pcbnew .VECTOR2I (SCALE * V_SCORE_TEXT_SIZE , SCALE * V_SCORE_TEXT_SIZE ))
933- route_text .SetLayer (layertable [ V_SCORE_TEXT_LAYER ] )
952+ route_text .SetLayer (vScoreTextLayerNumber )
934953 route_text .SetHorizJustify (pcbnew .GR_TEXT_H_ALIGN_CENTER )
935954 route_text .SetPosition (pcbnew .VECTOR2I (arrayCenter .x , arrayCenter .y ))
936955 board .Add (route_text )
0 commit comments