Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

kamakiri1225
October 04, 2022

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

kamakiri1225

October 04, 2022
Tweet

More Decks by kamakiri1225

Other Decks in Science

Transcript

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

    View full-size slide

  2. メッシュは削除

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  5. 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ファイルが出力

    View full-size slide