Fem: Netgen local refinement

This commit is contained in:
marioalexis
2024-10-07 07:22:10 -03:00
parent 0c77ff85b7
commit e99a65a50d
4 changed files with 48 additions and 2 deletions

View File

@@ -863,7 +863,7 @@ class _MeshRegion(CommandManager):
super().__init__()
self.menutext = Qt.QT_TRANSLATE_NOOP("FEM_MeshRegion", "FEM mesh refinement")
self.tooltip = Qt.QT_TRANSLATE_NOOP("FEM_MeshRegion", "Creates a FEM mesh refinement")
self.is_active = "with_gmsh_femmesh"
self.is_active = "with_femmesh"
self.do_activated = "add_obj_on_gui_selobj_set_edit"

View File

@@ -112,6 +112,7 @@ NetgenTools.run_netgen(**{params})
"params": self.get_meshing_parameters(),
"second_order": self.obj.SecondOrder,
"result_file": self.result_file,
"mesh_region": self.get_mesh_region(),
}
def compute(self):
@@ -121,12 +122,27 @@ NetgenTools.run_netgen(**{params})
return self.process
@staticmethod
def run_netgen(brep_file, threads, heal, params, second_order, result_file):
def run_netgen(brep_file, threads, heal, params, second_order, result_file, mesh_region):
import pyngcore as ngcore
from netgen import meshing
geom = occ.OCCGeometry(brep_file)
ngcore.SetNumThreads(threads)
shape = geom.shape
for items, l in mesh_region:
for t, n in items:
if t == "Vertex":
shape.vertices.vertices[n - 1].maxh = l
elif t == "Edge":
shape.edges.edges[n - 1].maxh = l
elif t == "Face":
shape.faces.faces[n - 1].maxh = l
elif t == "Solid":
shape.solids.solids[n - 1].maxh = l
with ngcore.TaskManager():
geom = occ.OCCGeometry(shape)
if heal:
geom.Heal()
mesh = geom.GenerateMesh(mp=meshing.MeshingParameters(**params))
@@ -306,6 +322,22 @@ NetgenTools.run_netgen(**{params})
return params
def get_mesh_region(self):
import Part
d = []
for reg in self.obj.MeshRegionList:
for s, sub_list in reg.References:
if s.isDerivedFrom("App::GeoFeature") and isinstance(
s.getPropertyOfGeometry(), Part.Shape
):
geom = s.getPropertyOfGeometry()
sub_sh = [s.getSubObject(_) for _ in sub_list]
res = geom.findSubShape(sub_sh)
l = reg.CharacteristicLength.getValueAs("mm").Value
d.append((res, l))
return d
@staticmethod
def version():
result = "{}: {}\n" + "{}: {}\n" + "{}: {}\n" + "{}: {}"

View File

@@ -51,6 +51,16 @@ class MeshNetgen(base_fempythonobject.BaseFemPythonObject):
def _get_properties(self):
prop = []
prop.append(
_PropHelper(
type="App::PropertyLinkList",
name="MeshRegionList",
group="Base",
doc="Refinements of the mesh",
value=[],
)
)
# mesh parameters
prop.append(
_PropHelper(
type="App::PropertyString",

View File

@@ -151,6 +151,10 @@ class VPMeshNetgen(view_base_femobject.VPBaseFemObject):
FreeCAD.Console.PrintError(message + "\n")
return True
def claimChildren(self):
reg_childs = self.Object.MeshRegionList
return reg_childs
def dumps(self):
return None