🐡

CAEのためのPython4(6面視画像の自動作成1)

2023/09/12に公開

動機

CAEの結果(形状やコンター図など)から資料を作成する機会6面視の画像を作成することが、
多くあると思います。(僕は多かったです。)
この作業、やってることは単純ですが案外やってみるとめんどくさいです。
こういう作業は、自動化ですね。
ちょっと長くなりそうなので2回に分けて書いていきます。

今回やること

1回目は、ファイルをドラック&ドロップすると6面視の画像が作成されるところまでやります。
今回は、LSTC社(現在は、Ansys社に買収)が作成したLs-Dyna用のフリープリポストである
lsprepostを自動的に操作して画像を作成します。
※私が使用しているバージョンは LS-PrePost-4.6です。
lsprepostダウンロードリンク

プログラムの説明

class MyApp(TkinterDnD.Tk):
    def __init__(self):
        super().__init__()
        width = 300
        height = 100
        self.geometry(f'{width}x{height}')
        self.minsize(width, height)
        self.maxsize(width, height)
        self.title(f'6面視作成')
        self.drop_target_register(DND_FILES)
        self.dnd_bind('<<Drop>>', Run(self).Cfile_Make)
  • ドラック&ドロップで動く部分です。
    lsprepostは、Cfileという独自のスクリプトファイルを読み込むことで操作を
    自動化することができます。
  • Cfileの書き込み→lsprepostでCfileを開く→lsprepostを閉じる
    の操作を行っています。
class Run():
    def Cfile_Make(self,e):
        cfile=os.path.splitext(e.data)[0]+".cfile"
        with open(cfile,'w') as F:
            F.writelines(self.Cfile_str_Make(e))
        self.Ls_Run(cfile)
  • スクリプトファイルの内容を作成
    def Cfile_str_Make(self,e):
        F=os.path.splitext(e.data)
	#対応させたい拡張子に合うよう書き換えてください
        key={".nas":"nastran",".k":"keyword"}
	#cfileの内容を作成
        str_list=[f"openc {key[F[1]]} {e.data}",#指定したファイルを開く
                    "Full",#全画面表示
                    "top",#上面視に視点を変える
                    "ac",#ファイル内のモデルを画面中心に最大限拡大する
                    "showlegend 0",#コンターバーの非表示
		    #画面の解像度でpngファイルを保存(パスは、{F[0]}_Top.png部で指定)
                    f"print png {F[0]}_Top.png nogamma enlisted OGL1x1",
                    "rx 90",#x軸を基準に90度視点を変換
                    f"print png {F[0]}_Left.png nogamma enlisted OGL1x1",
                    "rx -90",
                    "rx -90",
                    f"print png {F[0]}_Right.png nogamma enlisted OGL1x1",
                    "rx 90",
                    "rx 180",
                    f"print png {F[0]}_Bottom.png nogamma enlisted OGL1x1",
                    "rx -180",
                    "ry 90",
                    f"print png {F[0]}_Front.png nogamma enlisted OGL1x1",
                    "ry -90",
                    "ry -90",
                    f"print png {F[0]}_Back.png nogamma enlisted OGL1x1",
                    "ry 90",
                    "endfull",#全画面表示を終了する
		    "exit"#lsprepostを閉じる]
        return [i +"\n" for i in str_list]
  • lsprepostの実行
    def Ls_Run(self,Infile):
	#lsprepostのバージョンに従ってexeファイルのパスは変更してください
        self.NowRun_Prosess= subprocess.Popen([r"LS-PrePost4.6\lsprepost4.6_x64.exe" ,Infile],shell=True)
  • GUIのインスタンスを保存
def __init__(self,app):
        self.Run_app=app
  • main文
    if __name__ == "__main__":
	    app = MyApp()
	    app.mainloop()

使い方

動かすとGUIが開くのでそこに画像が欲しいモデルが入っているファイルをドラック&ドロップしてください。

今後

  • 次は、作成した画像データをエクセルに貼り付け保存できるようにしていきます。

Discussion