From 78e9b81850271034af9da11308ee269e9b0a5df3 Mon Sep 17 00:00:00 2001 From: Brendan Haines Date: Fri, 23 Sep 2022 01:24:47 -0600 Subject: [PATCH] split molex and samtec footprint generators --- fp_generator.py | 10 ++++-- generate.py | 83 ++++++++--------------------------------------- generate_molex.py | 69 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 72 deletions(-) create mode 100644 generate_molex.py diff --git a/fp_generator.py b/fp_generator.py index b60fffd..0a6b44d 100644 --- a/fp_generator.py +++ b/fp_generator.py @@ -10,9 +10,13 @@ class Footprint: # layer: (size_x, size_y, stroke) "F.SilkS": (0.030 * INCH, 0.030 * INCH, 0.007 * INCH), "B.SilkS": (0.030 * INCH, 0.030 * INCH, 0.007 * INCH), - "F.Fab": (0.030 * INCH, 0.030 * INCH, 0.005 * INCH), - "B.Fab": (0.030 * INCH, 0.030 * INCH, 0.005 * INCH), - None: (0.030 * INCH, 0.030 * INCH, 0.005 * INCH), + None: (0.025 * INCH, 0.025 * INCH, 0.005 * INCH), + } + + line_size = { + "F_SilkS": 0.007, + "B_SilkS": 0.007, + None: 0.005, } def __init__( diff --git a/generate.py b/generate.py index 98dc0f6..10a515e 100644 --- a/generate.py +++ b/generate.py @@ -1,13 +1,11 @@ import time import zipfile -from datetime import datetime from pathlib import Path from tempfile import TemporaryDirectory from typing import Optional, Union import numpy as np import regex as re -import requests from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.select import By @@ -18,11 +16,10 @@ from fp_generator import INCH, Footprint dir_ = Path(__file__).parent rng = np.random.default_rng() -SILK_WIDTH = 0.007 * INCH -PARTS_SAMTEC = [ +PARTS = [ # Pin Headers - *[f"TSW-1{i:02d}-07-L-S" for i in range(1, 5)], + *[f"TSW-1{i:02d}-07-L-S" for i in range(1, 5)], # quick for testing # *[f"TSW-1{i:02d}-07-L-S" for i in range(1, 51)], # *[f"TSW-1{i:02d}-07-L-D" for i in range(1, 51)], # # *[f"TSW-1{i:02d}-07-L-T" for i in range(1, 51)], @@ -43,25 +40,8 @@ PARTS_SAMTEC = [ # ), ] -PARTS_MOLEX = [ - # Micro-Fit 3.0 Single Row Headers - *[f"43650-{i:02d}10" for i in range(2, 13)], # 1 row, RA, press-fit retention clip - *[f"43650-{i:02d}13" for i in range(2, 13)], # 1 row, RA, solder tab - *[f"43650-{i:02d}22" for i in range(2, 13)], # 1 row, Vertical, press-fit retention clip - *[f"43650-{i:02d}25" for i in range(2, 13)], # 1 row, RA, solder tab - # Micro-Fit 3.0 Dual Row Headers - *[f"43045-{i:02d}07" for i in range(2, 25, 2)], # 2 row, RA, press-fit retention clip - *[f"43045-{i:02d}10" for i in range(2, 25, 2)], # 2 row, RA, solder tab - *[f"43045-{i:02d}16" for i in range(2, 25, 2)], # 2 row, Vertical, press-fit retention clip - *[f"43045-{i:02d}19" for i in range(2, 25, 2)], # 2 row, RA, solder tab - # Eurostyle 5.08mm Headers - # "39531-0002", - # Eurostyle 5.08mm Plugs - # "39530-0002", -] - -def download_step_samtec(part: str) -> None: +def download_step(part: str, headless: bool = True) -> None: print(part) with TemporaryDirectory(prefix=str(dir_ / "tmp") + "/") as tmp: tmp = Path(tmp) @@ -71,7 +51,8 @@ def download_step_samtec(part: str) -> None: "prefs", {"download.default_directory": str(tmp)}, ) - # chrome_options.add_argument("--headless") + if headless: + chrome_options.add_argument("--headless") with webdriver.Chrome( options=chrome_options, @@ -108,39 +89,7 @@ def download_step_samtec(part: str) -> None: (Path(tmp) / filename).rename(dir_ / "samtec.pretty" / "3dshapes" / filename) -def download_step_molex(part: Union[str, int]) -> None: - # remove dash - part = f'{int(str(part).replace("-", "")):09d}' - - print(part) - - with TemporaryDirectory(prefix=str(dir_ / "tmp") + "/") as tmp: - tmp = Path(tmp) - - for p in [part, part[:5] + "-" + part[5:]]: - try: - zipname = f"{part}_stp.zip" - - # download - with open(tmp / zipname, "wb") as f: - f.write(requests.get(f"https://www.molex.com/pdm_docs/stp/{p}_stp.zip").content) - - # unzip - with zipfile.ZipFile(tmp / zipname) as zip: - zip.extractall(path=str(tmp)) - - # move - filename = f"{part}.stp" - (Path(tmp) / filename).rename(dir_ / "molex.pretty" / "3dshapes" / filename) - - return - except zipfile.BadZipFile: - print(f"zip does not exist for part {p}") - - raise ValueError(f"Could not download .stp for part {part}") - - -def footprint_samtec(part: str, lib: Optional[Union[Path, str]] = None) -> str: +def footprint(part: str, lib: Optional[Union[Path, str]] = None) -> str: if any([part.startswith(s) for s in ["TSW-", "HTSW-"]]): # pinheader match = re.match( @@ -182,8 +131,8 @@ def footprint_samtec(part: str, lib: Optional[Union[Path, str]] = None) -> str: fp = Footprint(fp_name, description=description, keywords=keywords) fp.add_text("reference", "REF**", center[0], -2.032, layer="F.SilkS") - fp.add_text("value", "VAL**", center[0], center[1], rotation=90, layer="F.Fab", hidden=True) - fp.add_text("user", r"${REFERENCE}**", center[0], center[1], rotation=90, layer="F.Fab") + fp.add_text("value", "VAL**", center[0] - 0.025 * INCH, center[1], rotation=90, layer="F.Fab") + fp.add_text("user", r"${REFERENCE}**", center[0] + 0.025 * INCH, center[1], rotation=90, layer="F.Fab") fp.add_rect( [-0.05 * INCH] * 2, (0.05 * INCH + strobe[0] * (cols - 1), 0.05 * INCH + strobe[1] * (rows - 1)), @@ -219,15 +168,11 @@ if __name__ == "__main__": pool = Pool(10) - for part in PARTS_SAMTEC: - # time.sleep(rng.random() * 3) - # download_step_samtec(part) - footprint_samtec(part) + # for part in PARTS: + # # time.sleep(rng.random() * 3) + # # download_step(part) + # footprint(part) - # pool.map(download_step_samtec, PARTS_SAMTEC) - # pool.map(footprint_samtec, PARTS_SAMTEC) - - # for part in PARTS_MOLEX: - # download_step_molex(part) - # pool.map(download_step_molex, PARTS_MOLEX) + # pool.map(download_step, PARTS) + pool.map(footprint, PARTS) pool.close() diff --git a/generate_molex.py b/generate_molex.py new file mode 100644 index 0000000..a09d97c --- /dev/null +++ b/generate_molex.py @@ -0,0 +1,69 @@ +import zipfile +from pathlib import Path +from tempfile import TemporaryDirectory +from typing import Union + +import requests + +from fp_generator import INCH, Footprint + +dir_ = Path(__file__).parent + +PARTS = [ + # # Micro-Fit 3.0 Single Row Headers + # *[f"43650-{i:02d}10" for i in range(2, 13)], # 1 row, RA, press-fit retention clip + # *[f"43650-{i:02d}13" for i in range(2, 13)], # 1 row, RA, solder tab + # *[f"43650-{i:02d}22" for i in range(2, 13)], # 1 row, Vertical, press-fit retention clip + # *[f"43650-{i:02d}25" for i in range(2, 13)], # 1 row, RA, solder tab + # # Micro-Fit 3.0 Dual Row Headers + # *[f"43045-{i:02d}07" for i in range(2, 25, 2)], # 2 row, RA, press-fit retention clip + # *[f"43045-{i:02d}10" for i in range(2, 25, 2)], # 2 row, RA, solder tab + # *[f"43045-{i:02d}16" for i in range(2, 25, 2)], # 2 row, Vertical, press-fit retention clip + # *[f"43045-{i:02d}19" for i in range(2, 25, 2)], # 2 row, RA, solder tab + # # Eurostyle 5.08mm Headers + "39531-0002", + # Eurostyle 5.08mm Plugs + # "39530-0002", +] + + +def download_step_molex(part: Union[str, int]) -> None: + # remove dash + part = f'{int(str(part).replace("-", "")):09d}' + + print(part) + + with TemporaryDirectory(prefix=str(dir_ / "tmp") + "/") as tmp: + tmp = Path(tmp) + + for p in [part, part[:5] + "-" + part[5:]]: + try: + zipname = f"{part}_stp.zip" + + # download + with open(tmp / zipname, "wb") as f: + f.write(requests.get(f"https://www.molex.com/pdm_docs/stp/{p}_stp.zip").content) + + # unzip + with zipfile.ZipFile(tmp / zipname) as zip: + zip.extractall(path=str(tmp)) + + # move + filename = f"{part}.stp" + (Path(tmp) / filename).rename(dir_ / "molex.pretty" / "3dshapes" / filename) + + return + except zipfile.BadZipFile: + print(f"zip does not exist for part {p}") + + raise ValueError(f"Could not download .stp for part {part}") + + +if __name__ == "__main__": + from multiprocessing import Pool + + pool = Pool(10) + pool.map(download_step_molex, PARTS) + # for part in PARTS: + # download_step_molex(part) + pool.close()