From 4d25baf1eeb431afaf54a4c672dc63399dc83b47 Mon Sep 17 00:00:00 2001 From: marioalexis Date: Mon, 1 Sep 2025 15:32:35 -0300 Subject: [PATCH] Fem: Add support for 2D geometries to Centrif constraint --- src/Mod/Fem/femmesh/meshsetsgetter.py | 15 +++++---------- .../calculix/write_constraint_centrif.py | 14 +++++++++----- .../Fem/femtaskpanels/task_constraint_centrif.py | 5 ++++- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/Mod/Fem/femmesh/meshsetsgetter.py b/src/Mod/Fem/femmesh/meshsetsgetter.py index ce88857418..4eca3211f9 100644 --- a/src/Mod/Fem/femmesh/meshsetsgetter.py +++ b/src/Mod/Fem/femmesh/meshsetsgetter.py @@ -467,16 +467,11 @@ class MeshSetsGetter: # ******************************************************************************************** # element sets constraints def get_constraints_centrif_elements(self): - # get element ids and write them into the femobj - if not self.member.cons_centrif: - return - if ( - len(self.member.cons_centrif) == 1 - and not self.member.cons_centrif[0]["Object"].References - ): - self.member.cons_centrif[0]["FEMElements"] = self.ccx_evolumes - else: - self.get_solid_element_sets(self.member.cons_centrif) + for femobj in self.member.cons_centrif: + obj = femobj["Object"] + result = self._get_ccx_elements(obj) + + femobj["CentrifElements"] = result def get_constraints_bodyheatsource_elements(self): for femobj in self.member.cons_bodyheatsource: diff --git a/src/Mod/Fem/femsolver/calculix/write_constraint_centrif.py b/src/Mod/Fem/femsolver/calculix/write_constraint_centrif.py index a140f48a2e..39d34ecf53 100644 --- a/src/Mod/Fem/femsolver/calculix/write_constraint_centrif.py +++ b/src/Mod/Fem/femsolver/calculix/write_constraint_centrif.py @@ -60,12 +60,16 @@ def get_after_write_constraint(): def write_meshdata_constraint(f, femobj, centrif_obj, ccxwriter): + f.write(f"*ELSET,ELSET={centrif_obj.Name}\n") - if isinstance(femobj["FEMElements"], str): - f.write("{}\n".format(femobj["FEMElements"])) - else: - for e in femobj["FEMElements"]: - f.write(f"{e},\n") + for refs, elem, is_sub_el in femobj["CentrifElements"]: + if not is_sub_el: + for e in elem: + f.write(f"{e},\n") + + # use all elements if there are no references + if not femobj["CentrifElements"]: + f.write(f"{ccxwriter.ccx_eall}\n") def write_constraint(f, femobj, centrif_obj, ccxwriter): diff --git a/src/Mod/Fem/femtaskpanels/task_constraint_centrif.py b/src/Mod/Fem/femtaskpanels/task_constraint_centrif.py index 80104762fa..31d975fed3 100644 --- a/src/Mod/Fem/femtaskpanels/task_constraint_centrif.py +++ b/src/Mod/Fem/femtaskpanels/task_constraint_centrif.py @@ -62,10 +62,13 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel): self.axis_selection_widget = selection_widgets.GeometryElementsSelection( obj.RotationAxis, ["Edge"], False, False ) + self.axis_selection_widget.setWindowTitle( + self.axis_selection_widget.tr("Axis Reference Selector") + ) # loaded body selection widget self.body_selection_widget = selection_widgets.GeometryElementsSelection( - obj.References, ["Solid"], False, False + obj.References, ["Solid", "Face"], False, False ) # form made from param and selection widget