FEM FemMesh2Mesh/de: Difference between revisions

From FreeCAD Documentation
(Created page with "{{GuiCommand/de |Name=FEM FemMesh2Mesh |Name/de=FEM FemNetzZuNetz |MenuLocation=Mesh → FEM mesh to mesh |Workbenches=FEM |SeeAlso=FEM_tutorial/de|FEM...")
(Updating to match new version of source page)
 
(12 intermediate revisions by 2 users not shown)
Line 2: Line 2:


{{Docnav
{{Docnav
|[[FEM_MeshGroup|FEM mesh group]]
|[[FEM_CreateNodesSet|Nodes set]]
|[[FEM_SolverCalculixCxxtools|Solver CalculiX Standard]]
|[[FEM_SolverCalculixCxxtools|Solver CalculiX Standard]]
|[[FEM_Workbench|FEM]]
|[[FEM_Workbench|FEM]]
|IconL=FEM_CreateNodesSet.svg
|IconL=FEM_MeshGroup.svg
|IconR=FEM_SolverCalculixCxxtools.svg
|IconR=FEM_SolverCalculixCxxtools.svg
|IconC=Workbench_FEM.svg
|IconC=Workbench_FEM.svg
Line 18: Line 18:
}}
}}


== Description ==
<span id="Description"></span>
==Beschreibung==


This tool converts surfaces of 3D elements of a selected FEM mesh to mesh. Internally it picks FEM mesh element faces which are unique (not shared by two elements) and uses them to create faces of a mesh. Optionally it allows to create a deformed mesh caused by the action of the defined forces. This is done by adding the displacement of the FEM results to the mesh nodes.
This tool converts surfaces of 3D elements of a selected FEM mesh to mesh or converts 2D FEM mesh to mesh. Internally, it picks FEM mesh element faces that are unique (not shared by two elements) and uses them to create faces of a mesh. Optionally, it can be used to save a deformed mesh. This is done by adding the displacement of the FEM results to the mesh nodes (the scale of the displacement can be set using Python).


<span id="Usage"></span>
Two dimensional elements from the FEM mesh are not taken into account. If you need to convert them, you can use a python script below.
==Anwendung==


# Ein FEM-mesh-Objekt auswählen
==Usage==

# Select a FEM mesh object.
# Optionally also select the FEM results.
# Optionally also select the FEM results.
# Es gibt mehrereMöglichkeiten den Befehl aufzurufen:
# There are several ways to invoke the command:
#* Press the {{Button|[[Image:FEM_FemMesh2Mesh.svg|16px]] [[FEM_FemMesh2Mesh|FEM FemMesh2Mesh]]}} button.
#* Die Schaltfläche {{Button|[[Image:FEM_FemMesh2Mesh.svg|16px]] [[FEM_FemMesh2Mesh/de|FEM-Netz zu Netz]]}} drücken.
#* Select the {{MenuCommand|Mesh → [[Image:FEM_FemMesh2Mesh.svg|16px]] FEM mesh to mesh}} option from the menu.
#* Den Menüeintrag {{MenuCommand|Netz → [[Image:FEM_FemMesh2Mesh.svg|16px]] FEM-Netz zu Netz}} auswählen.


== Scripting ==
<span id="Scripting"></span>
==Skripten==


'''Note''': The parameter ''scale'' was {{Version|0.21}}. For older versions of FreeCAD omit it from your code.
Example: Load FreeCAD's 3D FEM example from the Start Workbench and run the following code


The cantilever example:
{{Code|code=
femmesh_obj = App.ActiveDocument.getObject("Result_mesh").FemMesh
result = App.ActiveDocument.getObject("CalculiX_static_results")
import femmesh.femmesh2mesh
out_mesh = femmesh.femmesh2mesh.femmesh_2_mesh(femmesh_obj, result)
import Mesh
Mesh.show(Mesh.Mesh(out_mesh))
}}

== Converting 2D elements ==

Select a mesh and run the following python script


{{Code|code=
{{Code|code=
from os.path import join
import FreeCAD as App
import Mesh
import Mesh
from femmesh import femmesh2mesh


path = join(App.getResourceDir(), "examples", "FemCalculixCantilever3D.FCStd")
def extend_by_triangle(i, j, k):
doc = App.openDocument(path)
triangle = [input_mesh.getNodeById(element_nodes[i]),
fem_mesh = doc.Box_Mesh.FemMesh
input_mesh.getNodeById(element_nodes[j]),
result = doc.CCX_Results
input_mesh.getNodeById(element_nodes[k])]
scale = 1 # displacement scale factor
return output_mesh.extend(triangle)
out_mesh = femmesh2mesh.femmesh_2_mesh(fem_mesh, result, scale)

Mesh.show(Mesh.Mesh(out_mesh))
selection = FreeCADGui.Selection.getSelection()
input_mesh = App.ActiveDocument.getObject(selection[0].Name).FemMesh
output_mesh = []
for element in input_mesh.Faces:
element_nodes = input_mesh.getElementNodes(element)
if len(element_nodes) in [3, 6]: # tria3 or tria6 (ignoring mid-nodes)
extend_by_triangle(0, 1, 2)
elif len(element_nodes) in [4, 8]: # quad4 or quad8 (ignoring mid-nodes)
extend_by_triangle(0, 1, 2)
extend_by_triangle(2, 3, 0)

obj = Mesh.Mesh(output_mesh)
Mesh.show(obj)
}}
}}




{{Docnav
{{Docnav
|[[FEM_MeshGroup|FEM mesh group]]
|[[FEM_CreateNodesSet|Nodes set]]
|[[FEM_SolverCalculixCxxtools|Solver CalculiX Standard]]
|[[FEM_SolverCalculixCxxtools|Solver CalculiX Standard]]
|[[FEM_Workbench|FEM]]
|[[FEM_Workbench|FEM]]
|IconL=FEM_CreateNodesSet.svg
|IconL=FEM_MeshGroup.svg
|IconR=FEM_SolverCalculixCxxtools.svg
|IconR=FEM_SolverCalculixCxxtools.svg
|IconC=Workbench_FEM.svg
|IconC=Workbench_FEM.svg

Latest revision as of 10:14, 2 March 2024

FEM FemNetzZuNetz

Menüeintrag
Mesh → FEM mesh to mesh
Arbeitsbereich
FEM
Standardtastenkürzel
Keiner
Eingeführt in Version
-
Siehe auch
FEM Tutorium

Beschreibung

This tool converts surfaces of 3D elements of a selected FEM mesh to mesh or converts 2D FEM mesh to mesh. Internally, it picks FEM mesh element faces that are unique (not shared by two elements) and uses them to create faces of a mesh. Optionally, it can be used to save a deformed mesh. This is done by adding the displacement of the FEM results to the mesh nodes (the scale of the displacement can be set using Python).

Anwendung

  1. Ein FEM-mesh-Objekt auswählen
  2. Optionally also select the FEM results.
  3. Es gibt mehrereMöglichkeiten den Befehl aufzurufen:
    • Die Schaltfläche FEM-Netz zu Netz drücken.
    • Den Menüeintrag Netz → FEM-Netz zu Netz auswählen.

Skripten

Note: The parameter scale was introduced in version 0.21. For older versions of FreeCAD omit it from your code.

The cantilever example:

from os.path import join
import FreeCAD as App
import Mesh
from femmesh import femmesh2mesh

path = join(App.getResourceDir(), "examples", "FemCalculixCantilever3D.FCStd")
doc = App.openDocument(path)
fem_mesh = doc.Box_Mesh.FemMesh
result = doc.CCX_Results
scale = 1  # displacement scale factor
out_mesh = femmesh2mesh.femmesh_2_mesh(fem_mesh, result, scale)
Mesh.show(Mesh.Mesh(out_mesh))