Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

REFACTOR: Icepak Mesh class initialization performance #4877

Merged
merged 8 commits into from
Jul 10, 2024
56 changes: 29 additions & 27 deletions pyaedt/modules/MeshIcepak.py
Original file line number Diff line number Diff line change
Expand Up @@ -279,11 +279,12 @@ def object(self):
::class::modeler.cad.object3d.Object3d
"""
if isinstance(self, Region):
return {
"CreateRegion": oo
for o, oo in self._app.modeler.objects_by_name.items()
if oo.history() and oo.history().command == "CreateRegion"
}.get("CreateRegion", None)
# use native apis instead of history() for performance reasons
for o, oo in self._app.modeler.objects_by_name.items():
child_names = self._app.oeditor.GetChildObject(o).GetChildNames()
if child_names and child_names[0].startswith("CreateRegion"):
return oo
return None
else:
return self._app.modeler.objects_by_name.get(self._name, None)

Expand Down Expand Up @@ -1089,30 +1090,31 @@ def boundingdimension(self):
def _get_design_mesh_operations(self):
"""Retrieve design mesh operations."""
meshops = []
dp = self._app.design_properties
try:
if settings.aedt_version > "2023.2":
for ds in self._app.design_properties["MeshRegion"]["MeshSetup"]:
if isinstance(self._app.design_properties["MeshRegion"]["MeshSetup"][ds], (OrderedDict, dict)):
if self._app.design_properties["MeshRegion"]["MeshSetup"][ds]["DType"] == "OpT":
for ds in dp["MeshRegion"]["MeshSetup"]:
if isinstance(dp["MeshRegion"]["MeshSetup"][ds], (OrderedDict, dict)):
if dp["MeshRegion"]["MeshSetup"][ds]["DType"] == "OpT":
meshops.append(
MeshOperation(
self,
ds,
self._app.design_properties["MeshRegion"]["MeshSetup"][ds],
dp["MeshRegion"]["MeshSetup"][ds],
"Icepak",
)
)
else:
for ds in self._app.design_properties["MeshRegion"]["MeshSetup"]["MeshOperations"]:
else: # pragma: no cover
for ds in dp["MeshRegion"]["MeshSetup"]["MeshOperations"]:
if isinstance(
self._app.design_properties["MeshRegion"]["MeshSetup"]["MeshOperations"][ds],
dp["MeshRegion"]["MeshSetup"]["MeshOperations"][ds],
(OrderedDict, dict),
):
meshops.append(
MeshOperation(
self,
ds,
self._app.design_properties["MeshRegion"]["MeshSetup"]["MeshOperations"][ds],
dp["MeshRegion"]["MeshSetup"]["MeshOperations"][ds],
"Icepak",
)
)
Expand All @@ -1130,12 +1132,13 @@ def _get_design_mesh_operations(self):
def _get_design_mesh_regions(self):
"""Retrieve design mesh regions."""
meshops = []
dp = self._app.design_properties
try:
if settings.aedt_version > "2023.2":
for ds in self._app.design_properties["MeshRegion"]["MeshSetup"]:
if isinstance(self._app.design_properties["MeshRegion"]["MeshSetup"][ds], (OrderedDict, dict)):
if self._app.design_properties["MeshRegion"]["MeshSetup"][ds]["DType"] == "RegionT":
dict_prop = self._app.design_properties["MeshRegion"]["MeshSetup"][ds]
for ds in dp["MeshRegion"]["MeshSetup"]:
if isinstance(dp["MeshRegion"]["MeshSetup"][ds], (OrderedDict, dict)):
if dp["MeshRegion"]["MeshSetup"][ds]["DType"] == "RegionT":
dict_prop = dp["MeshRegion"]["MeshSetup"][ds]
if ds == "Global":
meshop = GlobalMeshRegion(self._app)
else:
Expand All @@ -1144,12 +1147,10 @@ def _get_design_mesh_regions(self):
if el in meshop.__dict__:
meshop.__dict__[el] = dict_prop[el]
meshops.append(meshop)
else:
for ds in self._app.design_properties["MeshRegion"]["MeshSetup"]["MeshRegions"]:
if isinstance(
self._app.design_properties["MeshRegion"]["MeshSetup"]["MeshRegions"][ds], (OrderedDict, dict)
):
dict_prop = self._app.design_properties["MeshRegion"]["MeshSetup"]["MeshRegions"][ds]
else: # pragma: no cover
for ds in dp["MeshRegion"]["MeshSetup"]["MeshRegions"]:
if isinstance(dp["MeshRegion"]["MeshSetup"]["MeshRegions"][ds], (OrderedDict, dict)):
dict_prop = dp["MeshRegion"]["MeshSetup"]["MeshRegions"][ds]
if ds == "Global":
meshop = GlobalMeshRegion(self._app)
else:
Expand Down Expand Up @@ -1359,13 +1360,13 @@ def assign_priorities(self, assignment):
if not assignment or not isinstance(assignment, list) or not isinstance(assignment[0], list):
raise AttributeError("``assignment`` input must be a list of lists.")
props = {"PriorityListParameters": []}
self._app.logger.info("Parsing input objects information for priority assignment. This operation can take time")
udc = self.modeler.user_defined_components
udc._parse_objs()
for level, objects in enumerate(assignment):
level += 1
if isinstance(objects[0], str):
objects = [
self.modeler.objects_by_name.get(o, self.modeler.user_defined_components.get(o, None))
for o in objects
]
objects = [self.modeler.objects_by_name.get(o, udc.get(o, None)) for o in objects]
obj_3d = [
o
for o in objects
Expand Down Expand Up @@ -1405,6 +1406,7 @@ def assign_priorities(self, assignment):
raise AttributeError("Cannot assign components and parts on the same level.")
props["PriorityListParameters"].append(level_2d)
props = {"UpdatePriorityListData": props}
self._app.logger.info("Input objects information for priority assignment completed.")
args = []
_dict2arg(props, args)
self.modeler.oeditor.UpdatePriorityList(args[0])
Expand Down
Loading