Skip to content

Commit dfc313b

Browse files
authored
implement method to filter faces by area (#1258)
* implement method to filter faces by area * fix test aedt logger
1 parent e22728c commit dfc313b

File tree

3 files changed

+104
-0
lines changed

3 files changed

+104
-0
lines changed

_unittest/test_07_Object3D.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,19 @@
22
import math
33

44
from _unittest.conftest import BasisTest
5+
from pyaedt.generic.general_methods import is_ironpython
56
from pyaedt.generic.general_methods import isclose
67
from pyaedt.generic.general_methods import time_fn
78
from pyaedt.modeler.Object3d import _to_boolean
89
from pyaedt.modeler.Object3d import _uname
910
from pyaedt.modeler.Object3d import EdgePrimitive
1011
from pyaedt.modeler.Object3d import FacePrimitive
1112

13+
try:
14+
import pytest
15+
except ImportError:
16+
import _unittest_ironpython.conf_unittest as pytest
17+
1218

1319
class TestClass(BasisTest, object):
1420
def setup_class(self):
@@ -410,3 +416,53 @@ def test_23_volume(self):
410416
assert box3.volume == 100
411417
rec = self.aedtapp.modeler.create_rectangle(0, [0, 0, 0], [5, 10])
412418
assert rec.volume == 0.0
419+
420+
def test_24_filter_faces_by_area(self):
421+
faces_equal = []
422+
for obj in self.aedtapp.modeler.object_list:
423+
if obj.faces_by_area(100):
424+
faces_equal.append(obj.faces_by_area(100))
425+
if faces_equal:
426+
for face_object in faces_equal:
427+
for face in face_object:
428+
assert abs(face.area - 100) < 1e-12
429+
430+
faces_greater_equal = []
431+
for obj in self.aedtapp.modeler.object_list:
432+
if obj.faces_by_area(100):
433+
faces_greater_equal.append(obj.faces_by_area(100, ">="))
434+
if faces_greater_equal:
435+
for face_object in faces_greater_equal:
436+
for face in face_object:
437+
assert (face.area - 100) >= 1e-12
438+
439+
faces_smaller_equal = []
440+
for obj in self.aedtapp.modeler.object_list:
441+
if obj.faces_by_area(100):
442+
faces_smaller_equal.append(obj.faces_by_area(100, "<="))
443+
if faces_smaller_equal:
444+
for face_object in faces_smaller_equal:
445+
for face in face_object:
446+
assert (face.area - 100) <= 1e-12
447+
448+
faces_greater = []
449+
for obj in self.aedtapp.modeler.object_list:
450+
if obj.faces_by_area(100):
451+
faces_greater.append(obj.faces_by_area(100, ">"))
452+
if faces_greater:
453+
for face_object in faces_greater:
454+
for face in face_object:
455+
assert (face.area - 100) > 1e-12
456+
457+
faces_smaller = []
458+
for obj in self.aedtapp.modeler.object_list:
459+
if obj.faces_by_area(100):
460+
faces_smaller.append(obj.faces_by_area(100, "<"))
461+
if faces_smaller:
462+
for face_object in faces_smaller:
463+
for face in face_object:
464+
assert (face.area - 100) < 1e-12
465+
466+
if not is_ironpython:
467+
with pytest.raises(ValueError):
468+
self.aedtapp.modeler.object_list[0].faces_by_area(100, "<<")

_unittest/test_14_AedtLogger.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,12 @@ def test_01_formatter(self):
112112
logger = AedtLogger(filename=path)
113113
assert logger.formatter == settings.formatter
114114
settings.formatter = None
115+
logger.disable_log_on_file()
116+
117+
for handler in logger._global.handlers:
118+
if isinstance(handler, logging.FileHandler):
119+
handler.close()
120+
logger.removeHandler(handler)
115121

116122
def test_02_output_file_with_app_filter(self):
117123
content = None

pyaedt/modeler/Object3d.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2600,6 +2600,48 @@ def delete(self):
26002600
self._primitives.cleanup_objects()
26012601
self.__dict__ = {}
26022602

2603+
@pyaedt_function_handler()
2604+
def faces_by_area(self, area, area_filter="==", tolerance=1e-12):
2605+
"""Filter faces by area.
2606+
2607+
Parameters
2608+
----------
2609+
area : float
2610+
Value of the area to filter.
2611+
area_filter : str, optional
2612+
Comparer symbol.
2613+
Default value is "==".
2614+
tolerance : float, optional
2615+
tolerance for comparison.
2616+
2617+
Returns
2618+
-------
2619+
list of :class:`pyaedt.modeler.Object3d.FacePrimitive`
2620+
"""
2621+
filters = ["==", "<=", ">=", "<", ">"]
2622+
if area_filter not in filters:
2623+
raise ValueError('Symbol not valid, enter one of the following: "==", "<=", ">=", "<", ">"')
2624+
2625+
faces = []
2626+
for face in self.faces:
2627+
if area_filter is "==":
2628+
if abs(face.area - area) < tolerance:
2629+
faces.append(face)
2630+
if area_filter is ">=":
2631+
if (face.area - area) >= tolerance:
2632+
faces.append(face)
2633+
if area_filter is "<=":
2634+
if (face.area - area) <= tolerance:
2635+
faces.append(face)
2636+
if area_filter is ">":
2637+
if (face.area - area) > tolerance:
2638+
faces.append(face)
2639+
if area_filter is "<":
2640+
if (face.area - area) < tolerance:
2641+
faces.append(face)
2642+
2643+
return faces
2644+
26032645
@pyaedt_function_handler()
26042646
def _change_property(self, vPropChange):
26052647
return self._primitives._change_geometry_property(vPropChange, self._m_name)

0 commit comments

Comments
 (0)