Fem: Add displace mesh option to CalculiX

This commit is contained in:
marioalexis
2026-02-22 16:29:45 -06:00
committed by Chris Hennes
parent ca9e1ecdf3
commit d4c28786df
2 changed files with 32 additions and 0 deletions
+10
View File
@@ -331,6 +331,16 @@ class SolverCalculiX(base_fempythonobject.BaseFemPythonObject):
value=False,
)
)
prop.append(
_PropHelper(
type="App::PropertyBool",
name="DisplaceMesh",
group="Solver",
doc="Deform the mesh by the displacement field",
value=False,
)
)
return prop
def onDocumentRestored(self, obj):
@@ -31,6 +31,8 @@ import tempfile
import os
import shutil
from vtk.util import numpy_support as vtk_np
import FreeCAD
import Fem
@@ -174,6 +176,8 @@ class CalculiXTools(ObjectTools):
vtm_file = os.path.join(self.obj.WorkingDirectory, f)
pipeline.read(vtm_file)
pipeline.renameArrays(self.frd_var_conversion(self.obj.AnalysisType))
if self.obj.DisplaceMesh:
self._generate_disp_mesh(pipeline)
break
if create:
@@ -218,6 +222,24 @@ class CalculiXTools(ObjectTools):
case _:
return "None"
def _generate_disp_mesh(self, pipeline):
try:
mb = pipeline.Data
for i in range(mb.GetNumberOfBlocks()):
grid = mb.GetBlock(i)
if not grid.GetPointData().HasArray("Displacement"):
return
points = grid.GetPoints()
pd = points.GetData()
disp = grid.GetPointData().GetAbstractArray("Displacement")
disp_points = vtk_np.vtk_to_numpy(pd) + vtk_np.vtk_to_numpy(disp)
disp_points = vtk_np.numpy_to_vtk(disp_points)
points.SetData(disp_points)
pipeline.Data = mb
except Exception as e:
pass
def version(self):
p = QProcess()
ccx_bin = settings.get_binary("Calculix")