FEM and Blender

From wikiluntti
Revision as of 09:59, 8 July 2025 by Mol (talk | contribs) (→‎Results)

Introduction

Blender and CAD

import bpy
import csv

def export_selected_mesh_dimensions_to_csv(filepath):
    """Export Parts
    Args:
        filepath (str): Le chemin du fichier CSV de sortie.
    """

    with open(filepath, 'w', newline='', encoding='utf-8') as csvfile:
        fieldnames = ['Part', 'Section X (mm)', 'Section Y (mm)', 'Length Z (mm)']
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

        writer.writeheader()
        for obj in bpy.context.selected_objects:
            if obj.type == 'MESH':
                
                dimensions = obj.dimensions
                x = [0,0,0]
                x[0] = round(dimensions.x * 1000, 3)
                x[1] = round(dimensions.y * 1000, 3)
                x[2] = round(dimensions.z * 1000, 3)
                x.sort()

                writer.writerow({'Part': obj.name, 'X (mm)': x[0], 'Y (mm)': x[1], 'Z (mm)': x[2]})

filepath = "/home/user/Downloads/part_list.csv"  # Replace destination path

export_selected_mesh_dimensions_to_csv(filepath)

FreeCAD import

Steps:

  • Export from Blender. If exporting STL, scale on export 1000x. Problems with non-manifold geometry.
    • Use Boolean to make on mesh
    • Non-manifold: Select -> Select All by Trait -> Non Manifold, also the others from there. Remove the faces and then dissolve the edges (Limited Dissolve or X > Dissolve Edges).
      • (Select Similar). This is often useful to select vertices with only one connecting edge
      • (Select Linked)
      • W > Specials > Remove doubles Doubles,
    • Check the normals outward: Edit mode, Select All, Mesh -> Normals -> Outward (Shift + N)
    • Eliminate the bolts and some holes
  • FreeCAD
    • Part -> Create shape from mesh
    • Part -> MakeSolid


Some problems (see a Part check Geometry)

  • Geometry is a shell -- not a solid: a shell mesh on meshing
    • Check this by right clicking on the mesh and printing mesh informations (Tasks: Node count vs Triangle count vs Tetrahedron count)
  • Self intersections
    • Use Boolean in Blender for all parts (both, if two are overlapping)
    • Self intersecting meshes are considered dirty
    • Use Part -> View -> Transparency to see the intersection points, if they persist.
    • eg Netfabb cleans

FEM Calculations of the Door Canopy

Images of the displacement.

Results

Material: Wood-Generic

  • Density 700 kg/m3
  • Young's Modulus 12.00 GPa
  • Poisson Ratio 0.05

Roof is done with fine mesh, no roofed with even finer mesh.


Caption
Design Displacement magnitude Displacement X Displacement Y Displacement Z von Mises Stress Max Principal Stress Min Principal Stress Max Shear Stress
Min Max [mm] Min [µm] Max [µm] Min [µm] Max [µm] Min [mm] Max [nm] Min Max [kPa] Min [kPa] Max [kPa] Min [kPa] Max [kPa] Min Max [kPa]
No Rafters 0.00 2.01 -110 320 240 100 -2.01 800.04 0.00 5847.87 -191.14 6037.13 -5486.84 285.32 0.00 2969.41
22.5° rafter 0.00 0.22 -17.67 92.32 -46.55 14.54 -0.23 164.74 0.00 2020.39 -118.97 2101.76 -1742,35 119.10 0.00 1014.03
22.5° × 2 rafters 0.00 0.16 -13.67 63.63 -35.62 9.99 -0.15 148.73 0.00 1324.45 -108.65 1142.64 -1356.50 60.92 0 672.31
45° rafter short 0.0 0.42 -21.53 58.41 -72.82 30.83 -0.42 5650 0.0 2401.54 -211.93 1492.78 -2688.61 163.16 0.0 1238.34
45° rafter long 10 11 12
No Rafters + Roof 0.00 0.20 -31.32 1.46 -12.69 15.98 -0.20 1810 0 1250.0 -184.54 1140.49 -1295.94 126.83 0.0 628.53
Roof + 22.5° rafter 0.00 0.056 -13.27 4.16 -7.57 4.78 -0.055 481.98 0.00 681.47 -86.48 584.56 -709.20 48.88 0.00 348.28
Roof + 22.5° × 2 rafters 0.00 0.051 -12.77 3.01 -5.27 4.28 -0.050 417.70 0.00 583.69 -84.33 397.96 -618.15 27.47 0.00 299.63
Roof + 45° rafter 10 11 12

Simulation parameters

  • Roof Sheet: 1200 x 900 x 22 (distance 634 mm + 20 mm) and 1200 x 700 x 22

Material: Wood-Generic

  • Density 700 kg/m3
  • Young's Modulus 12.00 GPa
  • Poisson Ratio 0.05

Force: 1000 N, downwards (about).

Caption text
Header text Nodes Triangles Tetrahedron Header text
No Rafters 16413 5424 7786 Example
22.5° rafter 20407 6684 9775 Example
22.5° × 2 rafters 20185 6650 9627 Example
45° rafter Example Example Example Example
No Rafters + roof 138706 29970 80746 Example
22.5° rafter + roof Example Example Example Example
22.5° × 2 rafters + roof Example Example Example Example
45° rafter + roof Example Example Example Example


Size

Name Width Height Length
sivuvaaka 40.0 60.0 1200.0
sivuvaaka2 40.0 60.0 1200.0
etulyhytpysty 40.0 60.0 400.0
lyhytvino2 40.0 60.0 1207.695
pystyseina 40.0 60.0 535.61
pitkavino 40.0 60.0 740.106
lujyvino 40.0 60.0 1207.695
pystyseina2 40.0 60.0 535.61
pitkavino2 40.0 60.0 740.106
vinavase 40.0 60.0 686.624
takapalkki 40.0 60.0 1270.0
vinooikea2 40.0 60.0 771.684
takapalkki.001 40.0 60.0 1270.0
vinavase.002 40.0 60.0 686.624
vinooikea1 40.0 60.0 771.684
vinavase.004 40.0 60.0 686.624
vinooikea 40.0 60.0 771.684

Convergence tests

To ensure that the FEM simulation results converge, we try a simple simulation with different size of triangulation.

Workflow and test examples

  1. Plan and sketch using Blender
  2. Create the FEM model using FreeCAD
  3. Do the simulations
  4. Make the plans.

Below is the non working idea.

  1. Make the Blender mesh and export as .obj file
  2. Make the mesh using GMSH or FreeCAD, and use FreeCAD to FEM calculations

Simple Cube

Works OK with the FreeCAD, not with the Gmsh

OBJ

STL

Two Cubes

The Door Canopy

Couldn't do the model using Blender and Freecad/ Gmsh.

Make it step by step.

Gmsh

FreeCAD Tutorials

Good tutorials for noobies

Theory

Frame formulas: https://structx.com/frames.html

References