diff --git a/doc/changelog.d/5993.fixed.md b/doc/changelog.d/5993.fixed.md new file mode 100644 index 00000000000..2eff23b299f --- /dev/null +++ b/doc/changelog.d/5993.fixed.md @@ -0,0 +1 @@ +Copy Design #5623 \ No newline at end of file diff --git a/src/ansys/aedt/core/application/design.py b/src/ansys/aedt/core/application/design.py index 3562d08a393..600c50203ac 100644 --- a/src/ansys/aedt/core/application/design.py +++ b/src/ansys/aedt/core/application/design.py @@ -3639,7 +3639,7 @@ def copy_design_from(self, project, design, save_project=True, set_active_design if set_active_design: self._close_edb() self._init_design(project_name=self.project_name, design_name=new_designname) - self.set_active_design(active_design) + self.set_active_design(new_designname) # return the pasted design name return new_designname diff --git a/src/ansys/aedt/core/desktop.py b/src/ansys/aedt/core/desktop.py index 9a6366f8763..6006b131ba5 100644 --- a/src/ansys/aedt/core/desktop.py +++ b/src/ansys/aedt/core/desktop.py @@ -31,6 +31,7 @@ import atexit import datetime +from difflib import get_close_matches import gc import os from pathlib import Path @@ -692,6 +693,42 @@ def install_path(self): except Exception: # pragma: no cover return self.installed_versions[version_key + "CL"] + @pyaedt_function_handler() + def get_example(self, example_name, folder_name="."): + """Retrieve the path to a built-in example project. + + Parameters + ---------- + example_name : str + Name of the example for which the full path is desired. + folder_name : str, optional + Name of the example for which the full path is desired. + + Returns + ------- + str + Return the full path and name of the example file if found, otherwise ``None``. + """ + + root = Path(self.install_path) / "Examples" / folder_name + + # Gather all files + all_files = [f for f in root.rglob("*") if f.is_file() and not f.suffix.lower() == ".pdf"] + + # Normalize names for fuzzy matching + filenames = [f.name.lower() for f in all_files] + name_lower = example_name.lower() + + # Get close matches + close = get_close_matches(name_lower, filenames, n=1, cutoff=0.6) + + if close: + match_name = close[0] + # Find the original Path object that matches the filename (case-insensitive) + for file in all_files: + if file.name.lower() == match_name: + return str(file.resolve()) + @property def logger(self): """AEDT logger.""" diff --git a/tests/system/general/test_01_Design.py b/tests/system/general/test_01_Design.py index 72de9496339..214f3e93726 100644 --- a/tests/system/general/test_01_Design.py +++ b/tests/system/general/test_01_Design.py @@ -206,6 +206,12 @@ def test_15b_copy_design_from(self): new_design = self.aedtapp.copy_design_from(origin, "myduplicateddesign") assert new_design in self.aedtapp.design_list + def test_15c_copy_example(self): + example_name = self.aedtapp.desktop_class.get_example("5G_SIW_Aperture_Antenna") + self.aedtapp.copy_design_from(example_name, "0_5G Aperture Element") + assert self.aedtapp.design_name == "0_5G Aperture Element" + assert not self.aedtapp.desktop_class.get_example("fake") + def test_16_renamedesign(self, add_app, test_project_file): prj_file = test_project_file(test_project_name) self.aedtapp.load_project(file_name=prj_file, design="myname", close_active=True)