Source code for liatool.foam

from os import path, makedirs
import re
import bpy
import bmesh


def _FOAMheader(location, object):
    answ = '\
FoamFile\n\
{\n\
    version     2.0;\n\
    format      ascii;\n\
    class       dictionary;\n\
    location    "' + location + '";\n\
    object      ' + object + ';\n\
}\n\n'
    return answ


[docs] def writeFOAMfile(caseDir, location, object, body): data = _FOAMheader(location, object) + body fileDir = path.join(caseDir, location) try: makedirs(fileDir) except Exception: pass filePath = path.join(fileDir, object) f = open(filePath, "w") f.write(data) f.close()
[docs] class BlenderObj2PolyMesh: def __init__(self, *, obj=None, meshCase=None): self._blenderObj = obj self._blenderMesh = obj.data self._meshCase = meshCase self._noOrigVertices = len(self._blenderMesh.vertices) self._noOrigPolygons = len(self._blenderMesh.polygons) print('Blender Surface Mesh:') print('number of vertices', self._noOrigVertices) print('number of polygons', self._noOrigPolygons) self._points = [] self._faces = [] self._owner = [] for vertice in self._blenderMesh.vertices: self._points.append(self._blenderObj.matrix_world @ vertice.co) # boundary faces for polygon in self._blenderMesh.polygons: face = [] for vertice in polygon.vertices: face.append(vertice) self._faces.append(face) self._owner.append(polygon.index) # extrusion endPoint = len(self._points) for polygon in self._blenderMesh.polygons: face = [] for _ in polygon.vertices: self._points.append(self._points[vertice]) face.append(endPoint) endPoint += 1 self._faces.append(face) self._owner.append(polygon.index) noNewFaces = len(face) vB = [] for vertice in polygon.vertices: vB.append(vertice) vB.append(vB[0]) vT = [] for vertice in face: vT.append(vertice) vT.append(vT[0]) for i in range(0, noNewFaces): self._faces.append([vB[i], vB[i + 1], vT[i + 1], vT[i]]) self._owner.append(polygon.index) print('\nOpenFOAM Mesh:') print('number of points', len(self._points)) print('number of faces', len(self._faces)) print('number of cells', self._noOrigPolygons) body = str(len(self._points)) + '\n(\n' for p in self._points: body += '(' + str(p[0]) + ' ' + str(p[1]) + ' ' + str(p[2]) + ')\n' body += ')\n' writeFOAMfile(self._meshCase, path.join('constant', 'polyMesh'), 'points', body) body = str(len(self._faces)) + '\n(\n' for f in self._faces: body += str(len(f)) + '(' for p in f: body += str(p) + ' ' body += ')\n' body += ')\n' writeFOAMfile(self._meshCase, path.join('constant', 'polyMesh'), 'faces', body) body = str(len(self._owner)) + '\n(\n' for o in self._owner: body += str(o) + '\n' body += ')\n' writeFOAMfile(self._meshCase, path.join('constant', 'polyMesh'), 'owner', body) body = '0 \n(\n' + ')\n' writeFOAMfile(self._meshCase, path.join('constant', 'polyMesh'), 'neighbour', body) body = '1 \n(\n' body += ' laser\n' body += ' {\n' body += ' type patch;\n' body += ' startFace 0;\n' body += ' nFaces ' + str(len(self._blenderMesh.polygons)) + ';\n' body += ' }\n' body += ')\n' writeFOAMfile(self._meshCase, path.join('constant', 'polyMesh'), 'boundary', body)