Configuration file for MCAD assembly#

The configuration file allows you to assemble 3D components, 3D layout components in HFSS 3D.

The code loads the configuration file and creates an assembled design in HFSS 3D:

from ansys.aedt.core.extensions.hfss.mcad_assembly import run

run(config_data="assembly_config.json")

File structure example:

example

This code creates a configure file and create an assembled design in HFSS 3D:

import json
from pathlib import Path


from ansys.aedt.core.extensions.hfss.mcad_assembly import Arrange
from ansys.aedt.core.extensions.hfss.mcad_assembly import MCADAssemblyBackend
from ansys.aedt.core.extensions.hfss.mcad_assembly import run

CUR_DIR = Path(__file__).parent


def create_config() -> MCADAssemblyBackend:

    top_assembly = MCADAssemblyBackend()
    top_assembly.add_mcad_component_model(
        name="case", path="mcad_assembly/Chassi.a3dcomp"
    )
    top_assembly.add_mcad_component_model(
        name="cable", path="mcad_assembly/Cable.a3dcomp"
    )
    top_assembly.add_mcad_component_model(
        name="clamp_monitor", path="mcad_assembly/BCI_MONITORING_CLAMP.a3dcomp"
    )
    top_assembly.add_mcad_component_model(
        name="cap0402", path="mcad_assembly/Capacitor_HFSS.a3dcomp"
    )
    top_assembly.add_ecad_component_model(
        name="pcb", path="mcad_assembly/DCDC-Converter-App_main.aedb"
    )

    cs = top_assembly.add_coordinate_system(name="GLOBAL_2")
    cs.origin = ["100mm", "0mm", "0mm"]
    cs = top_assembly.add_coordinate_system(name="CS_CLAMP")
    cs.origin = ["-130mm", "80mm", "12mm"]
    cs.reference_coordinate_system = "GLOBAL_2"

    sub_comp = top_assembly.add_sub_mcad_component(name="case", model="case")
    sub_comp.target_coordinate_system = "GLOBAL_2"
    sub_comp.reference_coordinate_system = "GLOBAL_2"

    sub_comp_ = sub_comp.add_sub_ecad_component(name="pcb", model="pcb")
    sub_comp_.target_coordinate_system = "Guiding_Pin"
    sub_comp_.layout_coordinate_systems = [
        "CABLE1_via_65",
        "CABLE2_via_65",
        "H0_via_65",
    ]
    sub_comp_.reference_coordinate_system = "H0_via_65"
    sub_comp_.arranges = [Arrange(operation="rotate", axis="X", angle="0deg")]

    sub_comp__ = sub_comp_.add_sub_mcad_component(name="cable_a", model="cable")
    sub_comp__.use_pin_mapping = True
    sub_comp__.placement_pin_mapping.reference_designator = "CABLE1"
    sub_comp__.placement_pin_mapping.pin_1_loc = (0, 0, 0)

    sub_comp__ = sub_comp_.add_sub_mcad_component(name="cable_b", model="cable")
    sub_comp__.use_pin_mapping = True
    sub_comp__.placement_pin_mapping.reference_designator = "CABLE2"
    sub_comp__.placement_pin_mapping.pin_1_loc = (0, 0, 0)

    sub_comp__ = sub_comp_.add_sub_mcad_component(name="cap_c4", model="cap0402")
    sub_comp__.use_pin_mapping = True
    sub_comp__.placement_pin_mapping.reference_designator = "C2"
    sub_comp__.placement_pin_mapping.pin_1_loc = (0, 0, 0)
    sub_comp__.placement_pin_mapping.pin_2_loc = (0.7375e-3, 0, 0)

    sub_comp__ = sub_comp_.add_sub_mcad_component(name="cap_c4", model="cap0402")
    sub_comp__.use_pin_mapping = True
    sub_comp__.placement_pin_mapping.reference_designator = "C3"
    sub_comp__.placement_pin_mapping.pin_1_loc = (0, 0, 0)
    sub_comp__.placement_pin_mapping.pin_2_loc = (0.7375e-3, 0, 0)

    sub_comp__ = sub_comp_.add_sub_mcad_component(name="cap_c4", model="cap0402")
    sub_comp__.use_pin_mapping = True
    sub_comp__.placement_pin_mapping.reference_designator = "C4"
    sub_comp__.placement_pin_mapping.pin_1_loc = (0, 0, 0)
    sub_comp__.placement_pin_mapping.pin_2_loc = (0.7375e-3, 0, 0)

    sub_comp__ = sub_comp_.add_sub_mcad_component(name="cap_r7", model="cap0402")
    sub_comp__.use_pin_mapping = True
    sub_comp__.placement_pin_mapping.reference_designator = "R7"
    sub_comp__.placement_pin_mapping.pin_1_loc = (0, 0, 0)
    sub_comp__.placement_pin_mapping.pin_2_loc = (0.7375e-3, 0, 0)

    sub_comp = top_assembly.add_sub_mcad_component(
        name="clamp_monitor", model="clamp_monitor"
    )
    sub_comp.target_coordinate_system = "CS_CLAMP"

    return top_assembly


if __name__ == "__main__":
    config = create_config()

    output_path = CUR_DIR / "assembly_config.json"
    with output_path.open("w", encoding="utf-8") as f:
        json.dump(config.model_dump(exclude_none=True), f, indent=4)

    print(f"Saved JSON config to: {output_path}")

    run(config_data=output_path, model_dir=str(CUR_DIR))