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. View Slide

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

    View Slide

  3. メッシュは削除

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide