Récemment pour une simulation CFD j'ai eu besoin de faire un offset de mes pièces 3D pour reproduire les pièces dans OpenFoam. C'est l'occas' de mettre en place une modif automatique d'un fichier texte template.
import re
def offset(initial_data, on):
reg = r'vertex\s\s.+'
found = re.findall(reg, initial_data)
for found_reg in found:
# take only the number
x, y, z = found_reg.split()[1:]
x, y, z = float(x), float(y), float(z)
# add something
x += on['x']
y += on['y']
z += on['z']
initial_data = initial_data.replace(found_reg, f'vertex {x:.2E} {y:.2E} {z:.2E}')
return initial_data
if __name__ == "__main__":
with open('initialePos.txt', 'r') as f:
initial_data = f.read()
# on which data to add offset
on = {"x": 6, "y": 3, "z": 0}
offset_data = offset(initial_data, on)
with open('initialPos_offset.txt', 'w') as f:
f.write(offset_data)
# initialPos.txt
facet normal -1.000000e+00 0.000000e+00 0.000000e+00
outer loop
vertex 0.000000e+00 6.666667e-02 0.000000e+00
vertex 0.000000e+00 0.000000e+00 0.000000e+00
vertex 0.000000e+00 0.000000e+00 6.666667e-02
endloop
endfacet
# initialPos_offset.txt
facet normal -1.000000e+00 0.000000e+00 0.000000e+00
outer loop
vertex 6.00E+00 3.07E+00 0.00E+00
vertex 6.00E+00 3.00E+00 0.00E+00
vertex 6.00E+00 3.00E+00 6.67E-02
endloop
endfacet
En fait c'est vraiment très basique. On se donne un fichier template dans lequel on va identifier un mot clé ou un pattern (faisable avec une regex). Ici le pattern à trouver est reg = r'vertex\s\s.+'
. Il suffit ensuite de définir par quoi on remplace ce qu'on a trouvé au niveau de la regex et on garde toute le reste.
Top comments (0)