Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions easyeda2kicad/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
id_already_in_symbol_lib,
set_logger,
update_component_in_symbol_lib_file,
add_sub_components_in_symbol_lib_file,
)
from easyeda2kicad.kicad.export_kicad_3d_model import Exporter3dModelKicad
from easyeda2kicad.kicad.export_kicad_footprint import ExporterFootprintKicad
Expand Down Expand Up @@ -259,6 +260,13 @@ def main(argv: List[str] = sys.argv[1:]) -> int:
importer = EasyedaSymbolImporter(easyeda_cp_cad_data=cad_data)
easyeda_symbol: EeSymbol = importer.get_symbol()
# print(easyeda_symbol)

#adding support for importing sub symbols
easyeda_sub_symbols: EeSymbol = []
for cad_data_subpart in cad_data.get("subparts", []):
importer = EasyedaSymbolImporter(easyeda_cp_cad_data=cad_data_subpart)
easyeda_sub_symbols.append(importer.get_symbol())
#END

is_id_already_in_symbol_lib = id_already_in_symbol_lib(
lib_path=f"{arguments['output']}.{sym_lib_ext}",
Expand All @@ -278,6 +286,13 @@ def main(argv: List[str] = sys.argv[1:]) -> int:
footprint_lib_name=arguments["output"].split("/")[-1].split(".")[0],
)

#adding support for subsymbol kicad export
kicad_sub_symbols_lib = []
for symbol in easyeda_sub_symbols:
exporter = ExporterSymbolKicad(symbol=symbol, kicad_version=kicad_version)
kicad_sub_symbols_lib.append(exporter.export(footprint_lib_name=arguments["output"].split("/")[-1].split(".")[0],))
#END

if is_id_already_in_symbol_lib:
update_component_in_symbol_lib_file(
lib_path=f"{arguments['output']}.{sym_lib_ext}",
Expand All @@ -291,6 +306,17 @@ def main(argv: List[str] = sys.argv[1:]) -> int:
component_content=kicad_symbol_lib,
kicad_version=kicad_version,
)
if kicad_sub_symbols_lib:
if (kicad_version == KicadVersion.v6):
add_sub_components_in_symbol_lib_file(
lib_path=f"{arguments['output']}.{sym_lib_ext}",
component_name=easyeda_symbol.info.name,
sub_components_content=kicad_sub_symbols_lib,
kicad_version=kicad_version,
)
else:
logging.error("The sub-symbols were not added. Only kicad version 6 is currently supported for adding multi unit symbols.")


logging.info(
f"Created Kicad symbol for ID : {component_id}\n"
Expand Down
4 changes: 2 additions & 2 deletions easyeda2kicad/easyeda/easyeda_importer.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,8 @@ def extract_easyeda_data(self, ee_data: dict, ee_data_info: dict) -> EeSymbol:
prefix=ee_data_info["pre"],
package=ee_data_info.get("package", None),
manufacturer=ee_data_info.get("BOM_Manufacturer", None),
datasheet=ee_data["lcsc"].get("url", None),
lcsc_id=ee_data["lcsc"].get("number", None),
datasheet=ee_data.get("lcsc", {}).get("url", None), #datasheet=ee_data["lcsc"].get("url", None), #edited to protect
lcsc_id=ee_data.get("lcsc", {}).get("number", None), #lcsc_id=ee_data["lcsc"].get("number", None), #edited to protect
jlc_id=ee_data_info.get("BOM_JLCPCB Part Class", None),
),
bbox=EeSymbolBbox(
Expand Down
47 changes: 47 additions & 0 deletions easyeda2kicad/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,53 @@ def add_component_in_symbol_lib_file(
)
)

initial_symbol_regex_pattern = {
# "v5": r"(#\n# {component_name}\n#\n.*?ENDDEF\n)",
"v6": r'\(symbol "{component_name}_0_1"\n.*?\)',
"v6_99": r"",
}

sub_symbol_regex_pattern = {
# "v5": r"(#\n# {component_name}\n#\n.*?ENDDEF\n)",
"v6": r'\(symbol "{component_name}_0_1".*?\n \)',
"v6_99": r"",
}

# replace the empty symbol, generated from the first iteration, with our sub symbols and discard all their header information.
def add_sub_components_in_symbol_lib_file(
lib_path: str,
component_name: str,
sub_components_content: list[str],
kicad_version: KicadVersion,
) -> None:
with open(file=lib_path, encoding="utf-8") as lib_file:
current_lib = lib_file.read()
components_content = ""
for i, component in enumerate(sub_components_content):
match = re.search(
sub_symbol_regex_pattern[kicad_version.name].format(
component_name=sanitize_for_regex(component_name)
),
component,
flags=re.DOTALL,
)
if match:
components_content += "\n " + match.group(0).replace(f"{component_name}_0_1", f"{component_name}_{i+1}_1") #iterate symbol names
new_lib = re.sub(
initial_symbol_regex_pattern[kicad_version.name].format(
component_name=sanitize_for_regex(component_name)
),
components_content,
current_lib,
flags=re.DOTALL,
)
new_lib = new_lib.replace(
"(generator kicad_symbol_editor)",
"(generator https://github.com/uPesy/easyeda2kicad.py)",
)
with open(file=lib_path, mode="w", encoding="utf-8") as lib_file:
lib_file.write(new_lib)


def get_local_config() -> dict:
if not os.path.isfile("easyeda2kicad_config.json"):
Expand Down