diff --git a/src/Mod/Fem/Gui/CMakeLists.txt b/src/Mod/Fem/Gui/CMakeLists.txt
index ec05485b75..73939d9c06 100755
--- a/src/Mod/Fem/Gui/CMakeLists.txt
+++ b/src/Mod/Fem/Gui/CMakeLists.txt
@@ -400,6 +400,7 @@ SET(FemGuiPythonUI_SRCS
Resources/ui/ConstraintTie.ui
Resources/ui/ConstraintSectionPrint.ui
Resources/ui/CurrentDensity.ui
+ Resources/ui/DlgSettingsNetgen.ui
Resources/ui/ElectrostaticPotential.ui
Resources/ui/ElementFluid1D.ui
Resources/ui/ElementGeometry1D.ui
diff --git a/src/Mod/Fem/Gui/Resources/Fem.qrc b/src/Mod/Fem/Gui/Resources/Fem.qrc
index 49a7df6e26..db84762ef8 100755
--- a/src/Mod/Fem/Gui/Resources/Fem.qrc
+++ b/src/Mod/Fem/Gui/Resources/Fem.qrc
@@ -123,6 +123,7 @@
ui/ConstraintSectionPrint.ui
ui/ConstraintTie.ui
ui/CurrentDensity.ui
+ ui/DlgSettingsNetgen.ui
ui/ElectrostaticPotential.ui
ui/ElementFluid1D.ui
ui/ElementGeometry1D.ui
diff --git a/src/Mod/Fem/Gui/Resources/ui/DlgSettingsNetgen.ui b/src/Mod/Fem/Gui/Resources/ui/DlgSettingsNetgen.ui
new file mode 100644
index 0000000000..d803a33c5d
--- /dev/null
+++ b/src/Mod/Fem/Gui/Resources/ui/DlgSettingsNetgen.ui
@@ -0,0 +1,66 @@
+
+
+ Gui::Dialog::DlgSettingsNetgen
+
+
+
+ 0
+ 0
+ 500
+ 560
+
+
+
+ Netgen
+
+
+ -
+
+
+ Netgen
+
+
+
-
+
+
+ Use legacy Netgen object implementation
+
+
+ Qt::LeftToRight
+
+
+ true
+
+
+ Legacy Netgen
+
+
+ UseLegacyNetgen
+
+
+ Mod/Fem/Netgen
+
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+
+
+
+
+ Gui::PrefCheckBox
+ QCheckBox
+
+
+
+
+
+
diff --git a/src/Mod/Fem/InitGui.py b/src/Mod/Fem/InitGui.py
index f32ec68677..0ec9b478bf 100644
--- a/src/Mod/Fem/InitGui.py
+++ b/src/Mod/Fem/InitGui.py
@@ -72,6 +72,8 @@ class FemWorkbench(Workbench):
import FemGui
import femcommands.commands
+ FreeCADGui.addPreferencePage(":/ui/DlgSettingsNetgen.ui", "FEM")
+
# dummy usage to get flake8 and lgtm quiet
False if Fem.__name__ else True
False if FemGui.__name__ else True
diff --git a/src/Mod/Fem/ObjectsFem.py b/src/Mod/Fem/ObjectsFem.py
index 5148f2b891..bd0eb7d301 100644
--- a/src/Mod/Fem/ObjectsFem.py
+++ b/src/Mod/Fem/ObjectsFem.py
@@ -537,6 +537,13 @@ def makeMeshNetgen(doc, name="MeshNetgen"):
return obj
+def makeMeshNetgenLegacy(doc, name="MeshNetgen"):
+ """makeMeshNetgenLegacy(document, [name]):
+ makes a old implementation Netgen FEM mesh object"""
+ obj = doc.addObject("Fem::FemMeshShapeNetgenObject", name)
+ return obj
+
+
def makeMeshRegion(doc, base_mesh, element_length=0.0, name="MeshRegion"):
"""makeMeshRegion(document, base_mesh, [element_length], [name]):
creates a FEM mesh refinement object to define properties for a refinement of a FEM mesh
diff --git a/src/Mod/Fem/femcommands/commands.py b/src/Mod/Fem/femcommands/commands.py
index bc41a058a4..78085ce8b4 100644
--- a/src/Mod/Fem/femcommands/commands.py
+++ b/src/Mod/Fem/femcommands/commands.py
@@ -817,14 +817,20 @@ class _MeshNetgenFromShape(CommandManager):
def Activated(self):
# a mesh could be made with and without an analysis,
# we're going to check not for an analysis in command manager module
+ netgen_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem/Netgen")
FreeCAD.ActiveDocument.openTransaction("Create FEM mesh Netgen")
mesh_obj_name = "FEMMeshNetgen"
# if requested by some people add Preference for this
# mesh_obj_name = sel[0].Name + "_Mesh"
FreeCADGui.addModule("ObjectsFem")
- FreeCADGui.doCommand(
- "ObjectsFem.makeMeshNetgen(FreeCAD.ActiveDocument, '" + mesh_obj_name + "')"
- )
+ if netgen_prefs.GetBool("UseLegacyNetgen", 1):
+ FreeCADGui.doCommand(
+ "ObjectsFem.makeMeshNetgenLegacy(FreeCAD.ActiveDocument, '" + mesh_obj_name + "')"
+ )
+ else:
+ FreeCADGui.doCommand(
+ "ObjectsFem.makeMeshNetgen(FreeCAD.ActiveDocument, '" + mesh_obj_name + "')"
+ )
FreeCADGui.doCommand(
"FreeCAD.ActiveDocument.ActiveObject.Shape = FreeCAD.ActiveDocument.{}".format(
self.selobj.Name
diff --git a/src/Mod/Fem/femtest/app/test_object.py b/src/Mod/Fem/femtest/app/test_object.py
index 57471886cb..ce4b47e9b0 100644
--- a/src/Mod/Fem/femtest/app/test_object.py
+++ b/src/Mod/Fem/femtest/app/test_object.py
@@ -241,6 +241,9 @@ class TestObjectType(unittest.TestCase):
self.assertEqual("Fem::MeshGroup", type_of_obj(ObjectsFem.makeMeshGroup(doc, mesh)))
self.assertEqual("Fem::MeshRegion", type_of_obj(ObjectsFem.makeMeshRegion(doc, mesh)))
self.assertEqual("Fem::FemMeshNetgen", type_of_obj(ObjectsFem.makeMeshNetgen(doc)))
+ self.assertEqual(
+ "Fem::FemMeshShapeNetgenObject", type_of_obj(ObjectsFem.makeMeshNetgenLegacy(doc))
+ )
self.assertEqual("Fem::MeshResult", type_of_obj(ObjectsFem.makeMeshResult(doc)))
self.assertEqual("Fem::ResultMechanical", type_of_obj(ObjectsFem.makeResultMechanical(doc)))
solverelmer = ObjectsFem.makeSolverElmer(doc)
@@ -408,6 +411,9 @@ class TestObjectType(unittest.TestCase):
self.assertTrue(is_of_type(ObjectsFem.makeMeshGroup(doc, mesh), "Fem::MeshGroup"))
self.assertTrue(is_of_type(ObjectsFem.makeMeshRegion(doc, mesh), "Fem::MeshRegion"))
self.assertTrue(is_of_type(ObjectsFem.makeMeshNetgen(doc), "Fem::FemMeshNetgen"))
+ self.assertTrue(
+ is_of_type(ObjectsFem.makeMeshNetgenLegacy(doc), "Fem::FemMeshShapeNetgenObject")
+ )
self.assertTrue(is_of_type(ObjectsFem.makeMeshResult(doc), "Fem::MeshResult"))
self.assertTrue(is_of_type(ObjectsFem.makeResultMechanical(doc), "Fem::ResultMechanical"))
solverelmer = ObjectsFem.makeSolverElmer(doc)
@@ -744,6 +750,9 @@ class TestObjectType(unittest.TestCase):
mesh_netgen = ObjectsFem.makeMeshNetgen(doc)
self.assertTrue(is_derived_from(mesh_netgen, "App::DocumentObject"))
self.assertTrue(is_derived_from(mesh_netgen, "Fem::FemMeshShapeBaseObjectPython"))
+ mesh_netgen = ObjectsFem.makeMeshNetgenLegacy(doc)
+ self.assertTrue(is_derived_from(mesh_netgen, "App::DocumentObject"))
+ self.assertTrue(is_derived_from(mesh_netgen, "Fem::FemMeshShapeNetgenObject"))
# MeshResult
mesh_result = ObjectsFem.makeMeshResult(doc)
@@ -972,6 +981,9 @@ class TestObjectType(unittest.TestCase):
self.assertTrue(
ObjectsFem.makeMeshNetgen(doc).isDerivedFrom("Fem::FemMeshShapeBaseObjectPython")
)
+ self.assertTrue(
+ ObjectsFem.makeMeshNetgenLegacy(doc).isDerivedFrom("Fem::FemMeshShapeNetgenObject")
+ )
self.assertTrue(ObjectsFem.makeMeshResult(doc).isDerivedFrom("Fem::FemMeshObjectPython"))
self.assertTrue(
ObjectsFem.makeResultMechanical(doc).isDerivedFrom("Fem::FemResultObjectPython")
@@ -1081,6 +1093,7 @@ def create_all_fem_objects_doc(doc):
ObjectsFem.makeMeshGroup(doc, msh)
ObjectsFem.makeMeshRegion(doc, msh)
analysis.addObject(ObjectsFem.makeMeshNetgen(doc))
+ analysis.addObject(ObjectsFem.makeMeshNetgenLegacy(doc))
rm = ObjectsFem.makeMeshResult(doc)
res = analysis.addObject(ObjectsFem.makeResultMechanical(doc))[0]