def exportPcbway(board, outputdir, assembly, schematic, ignore, manufacturer, partnumber, description, notes, soldertype, footprint, corrections, missingerror, nboards): """ Prepare fabrication files for PCBWay including their assembly service """ loadedBoard = pcbnew.LoadBoard(board) refsToIgnore = parseReferences(ignore) removeComponents(loadedBoard, refsToIgnore) Path(outputdir).mkdir(parents=True, exist_ok=True) gerberdir = os.path.join(outputdir, "gerber") shutil.rmtree(gerberdir, ignore_errors=True) gerberImpl(board, gerberdir, settings=exportSettingsPcbway) shutil.make_archive(os.path.join(outputdir, "gerbers"), "zip", outputdir, "gerber") if not assembly: return if schematic is None: raise RuntimeError( "When outputing assembly data, schematic is required") components = extractComponents(schematic) correctionFields = [x.strip() for x in corrections.split(",")] manufacturerFields = [x.strip() for x in manufacturer.split(",")] partNumberFields = [x.strip() for x in partnumber.split(",")] descriptionFields = [x.strip() for x in description.split(",")] notesFields = [x.strip() for x in notes.split(",")] typeFields = [x.strip() for x in soldertype.split(",")] footprintFields = [x.strip() for x in footprint.split(",")] addVirtualToRefsToIgnore(refsToIgnore, loadedBoard) bom = collectBom(components, manufacturerFields, partNumberFields, descriptionFields, notesFields, typeFields, footprintFields, refsToIgnore) missingFields = False for type, references in bom.items(): _, _, manu, partno, _, _ = type if not manu or not partno: missingFields = True for r in references: print( f"WARNING: Component {r} is missing manufacturer and/or part number" ) if missingFields and missingerror: sys.exit("There are components with missing ordercode, aborting") posData = collectPosData(loadedBoard, correctionFields, bom=components) posDataToFile(posData, os.path.join(outputdir, "pos.csv")) types = collectSolderTypes(loadedBoard) bomToCsv(bom, os.path.join(outputdir, "bom.csv"), nboards, types)
def exportJlcpcb(board, outputdir, assembly, schematic, forcesmd, ignore, field, corrections, missingerror): """ Prepare fabrication files for JLCPCB including their assembly service """ loadedBoard = pcbnew.LoadBoard(board) refsToIgnore = parseReferences(ignore) removeComponents(loadedBoard, refsToIgnore) Path(outputdir).mkdir(parents=True, exist_ok=True) gerberdir = os.path.join(outputdir, "gerber") shutil.rmtree(gerberdir, ignore_errors=True) gerberImpl(board, gerberdir) shutil.make_archive(os.path.join(outputdir, "gerbers"), "zip", outputdir, "gerber") if not assembly: return if schematic is None: raise RuntimeError( "When outputing assembly data, schematic is required") correctionFields = [x.strip() for x in corrections.split(",")] components = extractComponents(schematic) ordercodeFields = [x.strip() for x in field.split(",")] bom = collectBom(components, ordercodeFields, refsToIgnore) missingFields = False for type, references in bom.items(): _, _, lcsc = type if not lcsc: missingFields = True for r in references: print(f"WARNING: Component {r} is missing ordercode") if missingFields and missingerror: sys.exit("There are components with missing ordercode, aborting") posData = collectPosData(loadedBoard, correctionFields, posFilter=genPosFilter(forcesmd), bom=components) posDataToFile(posData, os.path.join(outputdir, "pos.csv")) bomToCsv(bom, os.path.join(outputdir, "bom.csv"))