Skip to content

Commit

Permalink
Improve speed faces are loaded and ids are computed
Browse files Browse the repository at this point in the history
  • Loading branch information
maxcapodi78 authored and maxcapodi78 committed Oct 27, 2023
1 parent b3dddcc commit 583f95e
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 16 deletions.
7 changes: 7 additions & 0 deletions pyaedt/modeler/cad/Primitives.py
Original file line number Diff line number Diff line change
Expand Up @@ -2164,6 +2164,9 @@ def get_bodynames_from_position(self, position, units=None, include_non_model=Tr
>>> oEditor.GetBodyNamesByPosition
"""
if not isinstance(position, list):
# self.logger.error("A list of point has to be provided")
return []
XCenter, YCenter, ZCenter = self._pos_with_arg(position, units)
vArg1 = ["NAME:Parameters"]
vArg1.append("XPosition:="), vArg1.append(XCenter)
Expand Down Expand Up @@ -3230,6 +3233,10 @@ def __getitem__(self, partId):
Returns None if the part ID or the object name is not found.
"""
if isinstance(partId, (int, str)) and not (
partId in self.objects or partId in self._object_names_to_ids or partId in self.user_defined_components
):
self.refresh_all_ids()
if isinstance(partId, int):
if partId in self.objects:
return self.objects[partId]
Expand Down
27 changes: 14 additions & 13 deletions pyaedt/modeler/cad/elements3d.py
Original file line number Diff line number Diff line change
Expand Up @@ -267,10 +267,12 @@ def segment_info(self):
-------
list
Segment info if available."""
autosave = self._object3d._primitives._app.odesktop.GetAutosaveEnabled()
try:
self.oeditor.GetChildNames()
except: # pragma: no cover
return {}
self._object3d._primitives._app.autosave_disable()
ll = list(self.oeditor.GetObjectsInGroup("Lines"))
self.oeditor.CreateObjectFromEdges(
["NAME:Selections", "Selections:=", self._object3d.name, "NewPartsModelFlag:=", "NonModel"],
Expand All @@ -296,6 +298,7 @@ def segment_info(self):
segment[prop] = val
self._object3d._primitives._odesign.Undo()
self._object3d._primitives._odesign.Undo()
self._object3d._primitives._app.odesktop.EnableAutoSave(True if autosave else False)
return segment

@property
Expand Down Expand Up @@ -342,13 +345,6 @@ def midpoint(self):
"""
return [float(i) for i in self.oeditor.GetEdgePositionAtNormalizedParameter(self.id, 0.5)]
# if len(self.vertices) == 2:
# midpoint = GeometryOperators.get_mid_point(self.vertices[0].position, self.vertices[1].position)
# return list(midpoint)
# elif len(self.vertices) == 1:
# return self.vertices[0].position
# else:
# return [float(i) for i in self.oeditor.GetEdgePositionAtNormalizedParameter(self.id, 0)]

@property
def length(self):
Expand Down Expand Up @@ -440,6 +436,7 @@ def __init__(self, object3d, obj_id):
"""
self._id = obj_id
self._object3d = object3d
self._is_planar = None

@property
def oeditor(self):
Expand Down Expand Up @@ -567,11 +564,15 @@ def is_planar(self):
-------
bool
"""

if self._is_planar is not None:
return self._is_planar
try:
self.oeditor.GetFaceCenter(self.id)
self._is_planar = True
return True
except:
self.logger.clear_messages()
self._is_planar = False
return False

@property
Expand All @@ -595,10 +596,10 @@ def center(self):
>>> oEditor.GetFaceCenter
"""
try:
if self.is_planar:
return [float(i) for i in self.oeditor.GetFaceCenter(self.id)]
except: # pragma: no cover
self.logger.clear_messages()
else: # pragma: no cover
# self.logger.clear_messages()
vtx = self.vertices[:]
if len(vtx) > 1:
return GeometryOperators.get_polygon_centroid([pos.position for pos in vtx])
Expand All @@ -607,7 +608,7 @@ def center(self):
try:
edge = self.edges[0]
except IndexError:
self.logger.error("At least one edge is needed to compute face center.")
# self.logger.error("At least one edge is needed to compute face center.")
return
centroid = GeometryOperators.get_polygon_centroid(
[
Expand Down Expand Up @@ -757,7 +758,7 @@ def is_on_bounding(self, tol=1e-9):
"""
b = [float(i) for i in list(self.oeditor.GetModelBoundingBox())]
c = self.center
if (
if c and (
abs(c[0] - b[0]) < tol
or abs(c[1] - b[1]) < tol
or abs(c[2] - b[2]) < tol
Expand Down
12 changes: 9 additions & 3 deletions pyaedt/modeler/cad/object3d.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ def __init__(self, primitives, name=None):
self._object_type = None
self._mass = 0.0
self._volume = 0.0
self._faces = []
self._face_ids = []

@pyaedt_function_handler()
def _bounding_box_unmodel(self):
Expand Down Expand Up @@ -363,11 +365,15 @@ def faces(self):
"""
if self.object_type == "Unclassified":
return []
faces = []
face_ids = list(self._oeditor.GetFaceIDs(self.name))
if set(face_ids) == set(self._face_ids):
return self._faces
self._face_ids = face_ids
self._faces = []
for face in list(self._oeditor.GetFaceIDs(self.name)):
face = int(face)
faces.append(FacePrimitive(self, face))
return faces
self._faces.append(FacePrimitive(self, face))
return self._faces

@property
def faces_on_bounding_box(self):
Expand Down

0 comments on commit 583f95e

Please sign in to comment.