From 0faf92870162b91571e0e4b3260271187f224e75 Mon Sep 17 00:00:00 2001 From: Hui Zhou Date: Tue, 12 Nov 2024 16:23:12 +0100 Subject: [PATCH 1/4] DOCS: configure layout doc (#5409) Co-authored-by: ring630 <@gmail.com> --- .../project/configure_edb.rst | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/doc/source/User_guide/pyaedt_extensions_doc/project/configure_edb.rst b/doc/source/User_guide/pyaedt_extensions_doc/project/configure_edb.rst index d8317179049..077094fa6e2 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/project/configure_edb.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/project/configure_edb.rst @@ -18,10 +18,6 @@ integrity as well as power integrity analysis. :width: 800 :alt: Principle of working of Layout UI -Please refer to EDB Configuration `User Guide`_ for details - -.. _User Guide: https://edb.docs.pyansys.com/version/stable/examples/use_configuration/index.html - -------------------------------------------------------------------------- A brief description of which options are defined in the configuration file -------------------------------------------------------------------------- @@ -83,4 +79,20 @@ Configure design in siwave project 3, Click ``Select and Apply Configuration`` and browse to your configuration files. -4, In the second pop-up window. Specify where to save the new project. \ No newline at end of file +4, In the second pop-up window. Specify where to save the new project. + +~~~~~~~~~ +Resources +~~~~~~~~~ + +1, EDB Configuration `User Guide`_ for details + +.. _User Guide: https://edb.docs.pyansys.com/version/stable/examples/use_configuration/index.html + +2, `Demo video`_ + +.. _Demo video: https://www.linkedin.com/posts/electronics-simulation_accelerate-hfss-configuration-via-ansys-pyedb-activity-7252325488168177666-ypbN/?utm_source=share&utm_medium=member_desktop + +3, `Webinar Automating Signal and Power Integrity workflow with PyAEDT`_ + +.. _Webinar Automating Signal and Power Integrity workflow with PyAEDT: https://www.ansys.com/webinars/automating-signal-power-integrity-workflow-pyaedt?campaignID=7013g000000Y8uOAAS&utm_campaign=product&utm_content=digital_electronics_oktopost-Ansys+Electronics_oktopost-%25campaign_n&utm_medium=social-organic&utm_source=LinkedIn \ No newline at end of file From f73c6c9387593397daff19498c0610ff25527b20 Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Tue, 12 Nov 2024 18:27:01 +0100 Subject: [PATCH 2/4] FIX: Fix hardcoded path (#5414) --- .../core/workflows/templates/run_extension_manager.py_build | 4 ++-- .../workflows/templates/run_pyaedt_toolkit_script.py_build | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ansys/aedt/core/workflows/templates/run_extension_manager.py_build b/src/ansys/aedt/core/workflows/templates/run_extension_manager.py_build index 8ec46c8c71f..0d831bc42a4 100644 --- a/src/ansys/aedt/core/workflows/templates/run_extension_manager.py_build +++ b/src/ansys/aedt/core/workflows/templates/run_extension_manager.py_build @@ -50,10 +50,10 @@ def main(): # Get AEDT version version_short = oDesktop.GetVersion()[2:6].replace(".", "") # Launch extension manager - python_exe = r"C:\Users\smorais\AppData\Roaming\.pyaedt_env\3_10\Scripts\python.exe" + python_exe = r"##PYTHON_EXE##" % version # Extensions directory current_dir = os.path.dirname(os.path.abspath(os.path.realpath(__file__))) - pyaedt_extensions_dir = os.path.normpath(os.path.join(current_dir, r"Lib")) + pyaedt_extensions_dir = os.path.normpath(os.path.join(current_dir, r"##TOOLKIT_REL_LIB_DIR##")) pyaedt_script = os.path.join(pyaedt_extensions_dir, "extension_manager.py") # Check if CPython interpreter and AEDT release match python_exe = pyaedt_utils.sanitize_interpreter_path(python_exe, version_short) diff --git a/src/ansys/aedt/core/workflows/templates/run_pyaedt_toolkit_script.py_build b/src/ansys/aedt/core/workflows/templates/run_pyaedt_toolkit_script.py_build index 56216d02a61..aa624beffdc 100644 --- a/src/ansys/aedt/core/workflows/templates/run_pyaedt_toolkit_script.py_build +++ b/src/ansys/aedt/core/workflows/templates/run_pyaedt_toolkit_script.py_build @@ -34,7 +34,7 @@ is_linux = os.name == "posix" if is_linux: import subprocessdotnet as subprocess -toolkits_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) +toolkits_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) sys.path.append(toolkits_dir) From 2805e17ca64fe58f16ce012c0f54c8e7ffcb2471 Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Wed, 13 Nov 2024 17:32:22 +0100 Subject: [PATCH 3/4] FEAT: Material appearance (#5427) Co-authored-by: atlanswer Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- src/ansys/aedt/core/modeler/cad/object_3d.py | 40 +++++++++++++++++++ src/ansys/aedt/core/modeler/cad/primitives.py | 6 ++- tests/system/general/test_07_Object3D.py | 2 +- tests/system/general/test_08_Primitives3D.py | 6 +++ 4 files changed, 52 insertions(+), 2 deletions(-) diff --git a/src/ansys/aedt/core/modeler/cad/object_3d.py b/src/ansys/aedt/core/modeler/cad/object_3d.py index d5e53ff5d32..364d4b56138 100644 --- a/src/ansys/aedt/core/modeler/cad/object_3d.py +++ b/src/ansys/aedt/core/modeler/cad/object_3d.py @@ -98,6 +98,7 @@ def __init__(self, primitives, name=None): self._surface_material = None self._color = None self._wireframe = None + self._material_appearance = None self._part_coordinate_system = None self._model = None self._m_groupName = None @@ -1342,6 +1343,45 @@ def display_wireframe(self, fWireframe): self._change_property(vWireframe) self._wireframe = fWireframe + @property + def material_appearance(self): + """Material appearance property of the part. + + Returns + ------- + bool + ``True`` when material appearance is activated for the part, ``False`` otherwise. + + References + ---------- + + >>> oEditor.GetPropertyValue + >>> oEditor.ChangeProperty + + """ + if self._material_appearance is not None: + return self._material_appearance + if "Material Appearance" in self.valid_properties: + material_appearance = self._oeditor.GetPropertyValue( + "Geometry3DAttributeTab", self._m_name, "Material Appearance" + ) + if material_appearance == "true" or material_appearance == "True": + self._material_appearance = True + else: + self._material_appearance = False + return self._material_appearance + + @material_appearance.setter + def material_appearance(self, material_appearance): + vMaterialAppearance = [ + "NAME:Material Appearance", + "Value:=", + material_appearance, + ] + + self._change_property(vMaterialAppearance) + self._material_appearance = material_appearance + @pyaedt_function_handler() def history(self): """Object history. diff --git a/src/ansys/aedt/core/modeler/cad/primitives.py b/src/ansys/aedt/core/modeler/cad/primitives.py index a4198684c54..48be85d11f3 100644 --- a/src/ansys/aedt/core/modeler/cad/primitives.py +++ b/src/ansys/aedt/core/modeler/cad/primitives.py @@ -6311,7 +6311,11 @@ def update_geometry_property(self, assignment, name=None, value=None): "solve_inside": {"property_name": "Solve Inside", "reset_attr": ["_solve_inside"]}, "color": {"property_name": "Color", "reset_attr": ["_color"]}, "transparency": {"property_name": "Transparent", "reset_attr": ["_transparency"]}, - "part_coordinate_system": {"property_name": "Orientation", "reset_attr": ["_part_coordinate_system"]}, + "part_coordinate_system": { + "property_name": "Orientation", + "reset_attr": ["_part_coordinate_system"], + }, + "material_appearance": {"property_name": "Material Appearance", "reset_attr": ["_material_appearance"]}, } # Check if property name is valid diff --git a/tests/system/general/test_07_Object3D.py b/tests/system/general/test_07_Object3D.py index 3d31f82d27f..f40858e3a91 100644 --- a/tests/system/general/test_07_Object3D.py +++ b/tests/system/general/test_07_Object3D.py @@ -241,6 +241,7 @@ def test_07_object_clone_and_get_properties(self): assert new_object.solve_inside == initial_object.solve_inside assert new_object.model == initial_object.model assert new_object.display_wireframe == initial_object.display_wireframe + assert new_object.material_appearance == initial_object.material_appearance assert new_object.part_coordinate_system == initial_object.part_coordinate_system assert new_object.transparency == 0.76 assert new_object.color == initial_object.color @@ -248,7 +249,6 @@ def test_07_object_clone_and_get_properties(self): assert len(new_object.vertices) == 8 assert len(new_object.faces) == 6 assert len(new_object.edges) == 12 - assert new_object.display_wireframe == initial_object.display_wireframe new_object.name = "Properties_Box" assert not new_object.name == "Properties_Box" diff --git a/tests/system/general/test_08_Primitives3D.py b/tests/system/general/test_08_Primitives3D.py index baff07f0c44..9fef8369acc 100644 --- a/tests/system/general/test_08_Primitives3D.py +++ b/tests/system/general/test_08_Primitives3D.py @@ -2071,3 +2071,9 @@ def test_95_update_geometry_property(self): self.aedtapp.modeler.update_geometry_property([box2.name], "part_coordinate_system", cs.name) assert box2.part_coordinate_system == cs.name assert box1.part_coordinate_system == "Global" + + self.aedtapp.modeler.update_geometry_property([box1.name], "material_appearance", True) + assert box1.material_appearance + + self.aedtapp.modeler.update_geometry_property([box1.name, box2.name], "material_appearance", True) + assert box2.material_appearance From aa3f648560c4c1e6739a6371792c093a58d8187e Mon Sep 17 00:00:00 2001 From: Ramin Aghajafari <153928265+ramin4667@users.noreply.github.com> Date: Thu, 14 Nov 2024 02:11:53 -0500 Subject: [PATCH 4/4] FIX: FilterSolutions Sphinx Update (#5425) --- doc/source/API/Application.rst | 1 - doc/source/API/FilterSolutions.rst | 41 ++++++++++++++++++++++++++ doc/source/API/index.rst | 2 +- src/ansys/aedt/core/filtersolutions.py | 2 +- 4 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 doc/source/API/FilterSolutions.rst diff --git a/doc/source/API/Application.rst b/doc/source/API/Application.rst index d7ad0ed6724..74951455342 100644 --- a/doc/source/API/Application.rst +++ b/doc/source/API/Application.rst @@ -27,7 +27,6 @@ Available PyAEDT apps are: ansys.aedt.core.maxwellcircuit.MaxwellCircuit ansys.aedt.core.emit.Emit ansys.aedt.core.twinbuilder.TwinBuilder - ansys.aedt.core.filtersolutions.FilterSolutions All other classes and methods are inherited into the app class. diff --git a/doc/source/API/FilterSolutions.rst b/doc/source/API/FilterSolutions.rst new file mode 100644 index 00000000000..d8b84f5a181 --- /dev/null +++ b/doc/source/API/FilterSolutions.rst @@ -0,0 +1,41 @@ +Filter solutions +========================== +The ``FilterSolutions`` module contains all classes needed to create and edit an object including. + + +* ``Attributes`` to defines attributes and parameters of filters. +* ``DllInterface`` to interface with the FilterSolutions DLL. +* ``GraphSetup`` to define the frequency and time limits of the exported responses. +* ``IdealResponse`` to return the data for available ideal filter responses. +* ``MultipleBandsTable`` to manipulate access to the entries of multiple bands table. +* ``TransmissionZeros`` to manipulates access to ratio and bandwidth entries in the transmission zeros table. +* ``LumpedTopology`` to define attributes and parameters of filters implemented with lumped topology. +* ``LumpedParasitics`` to define attributes of the lumped element parasitic values. +* ``LumpedNodesandLeads`` to define attributes of the lumped node capacitors and lead inductors. +* ``LumpedTerminationImpedance`` to manipulate access to the entries of source and load complex impedance table. +* ``ExportToAedt`` to define attributes and parameters of the export page for exporting to AEDT. +* ``OptimizationGoalsTable`` to manipulate access to the entries of the optimization goals table. + + + +They are accessible through: + + +.. currentmodule:: ansys.aedt.core.filtersolutions_core + +.. autosummary:: + :toctree: _autosummary + :nosignatures: + + attributes.Attributes + dll_interface.DllInterface + graph_setup.GraphSetup + ideal_response.IdealResponse + multiple_bands_table.MultipleBandsTable + transmission_zeros.TransmissionZeros + lumped_topology.LumpedTopology + lumped_parasitics.LumpedParasitics + lumped_nodes_and_leads.LumpedNodesandLeads + lumped_termination_impedance_table.LumpedTerminationImpedance + export_to_aedt.ExportToAedt + optimization_goals_table.OptimizationGoalsTable diff --git a/doc/source/API/index.rst b/doc/source/API/index.rst index 0d7dbde7ad4..c97cddcdc19 100644 --- a/doc/source/API/index.rst +++ b/doc/source/API/index.rst @@ -98,7 +98,7 @@ Example with ``Desktop`` class implicit initialization: Configuration SetupTemplates CableModeling - + FilterSolutions diff --git a/src/ansys/aedt/core/filtersolutions.py b/src/ansys/aedt/core/filtersolutions.py index 4b65297c319..df733dc0fae 100644 --- a/src/ansys/aedt/core/filtersolutions.py +++ b/src/ansys/aedt/core/filtersolutions.py @@ -40,7 +40,7 @@ class FilterSolutions: - """Provides the ``FilterSolutions`` application interface. + """Provides the FilterSolutions application interface. This class has access to ideal filter attributes and calculated output parameters.