$30 off During Our Annual Pro Sale. View Details »

FreeCADマクロ stlファイル出力自動化

kamakiri1225
October 04, 2022

FreeCADマクロ stlファイル出力自動化

kamakiri1225

October 04, 2022
Tweet

More Decks by kamakiri1225

Other Decks in Science

Transcript

  1. None
  2. ASCIIファイルをstlファイルにする 一連の面倒な操作はPythonのマクロ でやってしまおう

  3. メッシュは削除

  4. stlファイル出力したい面だけ 「bc:」と頭に付ける

  5. 「マクロ」>「マクロ…」 「export_stl.py」を以下に保存 or 編集 C:/ユーザ名/AppData/Roaming/FreeCAD/Macro

  6. export_stl.py import os import Mesh import MeshPart # 現在のディレクトリ PWD

    = r'C:¥work¥openfoam¥20220929_FreeCAD_stl¥stl' print('現在のディレクトリ:',PWD) labels = [] doc = App.ActiveDocument print(doc) for obj in doc.Objects: if obj.Label[0:3] == 'bc:': mesh = doc.addObject("Mesh::Feature", "Mesh") print(mesh) # mefisto #mesh.Mesh = MeshPart.meshFromShape(Shape=obj.Shape, MaxLength=10) # standard mesh.Mesh = Mesh.Mesh(obj.Shape.tessellate(0.01)) print(mesh.Mesh) label = obj.Label[3:] labels.append(label) Mesh.export([mesh], fr'{PWD}/{label}.ast') print(label) doc.removeObject(mesh.Name) print(doc.Label) print(labels, type(labels)) with open(rf'{PWD}/{doc.Label}.stl', 'w') as f: print('test') for label in labels: with open(rf'{PWD}/{label}.ast', 'r') as fi: for line in fi: if line[:5] == 'solid': line = 'solid ' + label + '¥n' elif line[:8] == 'endsolid': line = 'endsolid ' + label + '¥n' f.write(line) for label in labels: os.remove(rf'{PWD}/label.ast') 中身の編集 「export_stl.py」を実行 stlファイルが出力