Skip to content

Commit 5a0ef09

Browse files
Add detach_faces method (#4534)
Co-authored-by: Kathy Pippert <[email protected]>
1 parent 7d5d680 commit 5a0ef09

File tree

3 files changed

+66
-0
lines changed

3 files changed

+66
-0
lines changed

_unittest/test_08_Primitives3D.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1965,3 +1965,13 @@ def test_91_primitives_builder(self, add_app):
19651965
primitives_builder = PrimitivesBuilder(q2d, input_dict=primitive_dict)
19661966
primitive_names = primitives_builder.create()
19671967
assert all(element is None for element in primitive_names)
1968+
1969+
def test_92_detach_faces(self):
1970+
box = self.aedtapp.modeler.create_box([0, 0, 0], [1, 2, 3])
1971+
out_obj = box.detach_faces(box.top_face_z)
1972+
assert len(out_obj) == 2
1973+
assert isinstance(out_obj[0], Object3d)
1974+
box = self.aedtapp.modeler.create_box([0, 0, 0], [1, 2, 3])
1975+
out_obj = box.detach_faces([box.top_face_z.id, box.bottom_face_z.id])
1976+
assert len(out_obj) == 3
1977+
assert all(isinstance(o, Object3d) for o in out_obj)

pyaedt/modeler/cad/Primitives.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3714,6 +3714,40 @@ def intersect(self, assignment, keep_originals=False, **kwargs):
37143714
self.logger.info("Intersection Succeeded")
37153715
return self.convert_to_selections(assignment[0], False)
37163716

3717+
@pyaedt_function_handler()
3718+
def detach_faces(self, assignment, faces):
3719+
"""Section the object.
3720+
3721+
Parameters
3722+
----------
3723+
assignment : Object3d or str
3724+
Object from which to detach faces.
3725+
faces : List[FacePrimitive] or List[int] or int or FacePrimitive
3726+
Face or faces to detach from the object.
3727+
3728+
Returns
3729+
-------
3730+
List[:class:`pyaedt.modeler.cad.object3d.Object3d`]
3731+
List of objects resulting from the operation (including the original one).
3732+
3733+
References
3734+
----------
3735+
3736+
>>> oEditor.DetachFaces
3737+
3738+
"""
3739+
if isinstance(assignment, str):
3740+
assignment = self._modeler[assignment]
3741+
if isinstance(faces, FacePrimitive) or isinstance(faces, int):
3742+
faces = [faces]
3743+
if isinstance(faces[0], FacePrimitive):
3744+
faces = [f.id for f in faces]
3745+
result = self.oeditor.DetachFaces(
3746+
["NAME:Selections", "Selections:=", assignment.name, "NewPartsModelFlag:=", "Model"],
3747+
["NAME:Parameters", ["NAME:DetachFacesToParameters", "FacesToDetach:=", faces]],
3748+
)
3749+
return [assignment] + [self._modeler[o] for o in result]
3750+
37173751
@pyaedt_function_handler(theList="assignment")
37183752
def connect(self, assignment):
37193753
"""Connect objects from a list.

pyaedt/modeler/cad/object3d.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1710,6 +1710,28 @@ def section(self, plane, create_new=True, section_cross_object=False):
17101710
self._primitives.section(self, plane, create_new, section_cross_object)
17111711
return self
17121712

1713+
@pyaedt_function_handler()
1714+
def detach_faces(self, faces):
1715+
"""Section the object.
1716+
1717+
Parameters
1718+
----------
1719+
faces : List[FacePrimitive] or List[int] or int or FacePrimitive
1720+
Face or faces to detach from the object.
1721+
1722+
Returns
1723+
-------
1724+
List[:class:`pyaedt.modeler.cad.object3d.Object3d`]
1725+
List of object resulting from the operation.
1726+
1727+
References
1728+
----------
1729+
1730+
>>> oEditor.DetachFaces
1731+
1732+
"""
1733+
return self._primitives.detach_faces(self, faces)
1734+
17131735
@pyaedt_function_handler()
17141736
def clone(self):
17151737
"""Clone the object and return the new 3D object.

0 commit comments

Comments
 (0)