Fem: Add option to use old Netgen mesher implementation
This commit is contained in:
committed by
Yorik van Havre
parent
5b3ab4759d
commit
5438cc3a7f
@@ -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
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
<file>ui/ConstraintSectionPrint.ui</file>
|
||||
<file>ui/ConstraintTie.ui</file>
|
||||
<file>ui/CurrentDensity.ui</file>
|
||||
<file>ui/DlgSettingsNetgen.ui</file>
|
||||
<file>ui/ElectrostaticPotential.ui</file>
|
||||
<file>ui/ElementFluid1D.ui</file>
|
||||
<file>ui/ElementGeometry1D.ui</file>
|
||||
|
||||
66
src/Mod/Fem/Gui/Resources/ui/DlgSettingsNetgen.ui
Normal file
66
src/Mod/Fem/Gui/Resources/ui/DlgSettingsNetgen.ui
Normal file
@@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Gui::Dialog::DlgSettingsNetgen</class>
|
||||
<widget class="QWidget" name="Gui::Dialog::DlgSettingsNetgen">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>500</width>
|
||||
<height>560</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Netgen</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_1">
|
||||
<property name="title">
|
||||
<string>Netgen</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_1">
|
||||
<item row="0" column="0">
|
||||
<widget class="Gui::PrefCheckBox" name="ckb_legacy">
|
||||
<property name="toolTip">
|
||||
<string>Use legacy Netgen object implementation</string>
|
||||
</property>
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Legacy Netgen</string>
|
||||
</property>
|
||||
<property name="prefEntry" stdset="0">
|
||||
<cstring>UseLegacyNetgen</cstring>
|
||||
</property>
|
||||
<property name="prefPath" stdset="0">
|
||||
<cstring>Mod/Fem/Netgen</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_1">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>Gui::PrefCheckBox</class>
|
||||
<extends>QCheckBox</extends>
|
||||
<header>Gui/PrefWidgets.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user