def write_gds( component: Component, gdspath: Optional[PosixPath] = None, gdsdir: PosixPath = tmp, unit: float = 1e-6, precision: float = 1e-9, auto_rename: bool = False, ) -> PosixPath: """Write component to GDS and returs gdspath Args: component: gdsfactory Component. gdspath: GDS file path to write to. unit unit size for objects in library. precision: for the dimensions of the objects in the library (m). remove_previous_markers: clear previous ones to avoid duplicates. auto_rename: If True, fixes any duplicate cell names. Returns: gdspath """ gdsdir = pathlib.Path(gdsdir) gdspath = gdspath or gdsdir / (component.name + ".gds") gdspath = pathlib.Path(gdspath) gdsdir = gdspath.parent gdsdir.mkdir(exist_ok=True, parents=True) component.write_gds( str(gdspath), unit=unit, precision=precision, auto_rename=auto_rename, ) component.path = gdspath return gdspath
def write_gds( component: Component, gdspath: Optional[PosixPath] = None, unit: float = 1e-6, precision: float = 1e-9, remove_previous_markers: bool = False, auto_rename: bool = False, with_settings_label: bool = conf.tech.with_settings_label, ) -> str: """write component to GDS and returs gdspath Args: component (required) gdspath: by default saves it into CONFIG['gds_directory'] auto_rename: False by default (otherwise it calls it top_cell) unit precission Returns: gdspath """ gdspath = gdspath or CONFIG["gds_directory"] / (component.name + ".gds") gdspath = pathlib.Path(gdspath) gdsdir = gdspath.parent gdspath = str(gdspath) gdsdir.mkdir(parents=True, exist_ok=True) if remove_previous_markers: # If the component HAS ports AND markers and we want to # avoid duplicate port markers, then we clear the previous ones port_layer = (LAYER.PORT, ) label_layer = (LAYER.TEXT, ) component.remove_layers([port_layer]) component.remove_layers([label_layer]) # write component settings into text layer if with_settings_label: settings = component.get_settings() for i, k in enumerate(sorted(list(settings.keys()))): v = clean_value(settings.get(k)) text = f"{k} = {clean_value(v)}" # print(text) component.add_label( text=text, position=component.center - [0, i * 1], layer=CONFIG["layers"]["TEXT"], ) component.write_gds( gdspath, precision=precision, auto_rename=auto_rename, ) component.path = gdspath return gdspath