翼型datファイルを読み込み、点結びしたdxfファイルに出力するpythonコード
学生の頃、点むすびというexcelアドインを使ってdatファイルをdxfファイルに出力する作業を行っていた。
最近調べてみるとそのアドインが置いてあったサイトがなくなっていることに気づいた。
そんなわけでタイトルにあるpythonコードを作成してみた。
実行環境
・python 3.11.3
必要なモジュール
・dxfgrabber 1.0.1
・ezdxf 1.0.3
import tkinter as tk from tkinter import filedialog import dxfgrabber import ezdxf # ファイル選択ダイアログを表示し、datファイルを選択する root = tk.Tk() root.withdraw() file_path = filedialog.askopenfilename(filetypes=[('DAT Files', '*.dat')]) # datファイルから座標データのみを読み取る points = [] with open(file_path, 'r') as f: for line in f: try: x, y = map(float, line.strip().split()) points.append([x, y]) except ValueError: pass # dxfファイルを作成する doc = ezdxf.new('R2010') msp = doc.modelspace() # 点を描画する for i in range(len(points) - 1): msp.add_line(points[i], points[i + 1]) # dxfファイルを保存する save_path = filedialog.asksaveasfilename(defaultextension='.dxf', filetypes=[('DXF Files', '*.dxf')]) if save_path: doc.saveas(save_path)
dae21翼型をdxfファイル出力した結果を示す。
airfoiltools.comの翼型datデータは最初2行が座標ではなく、
かつ翼上面と下面が真ん中改行で分かれている。一応airfoiltools.comのdatデータをそのままコピーしたと仮定してコードを修正した。
import tkinter as tk from tkinter import filedialog import dxfgrabber import ezdxf # ファイル選択ダイアログを表示し、datファイルを選択する root = tk.Tk() root.withdraw() file_path = filedialog.askopenfilename(filetypes=[('DAT Files', '*.dat')]) # datファイルから座標データのみを読み取る points = [] with open(file_path, 'r') as f: data_lines = f.read().splitlines() data_lines = data_lines[2:] # 最初の2行を無視 for line in data_lines: try: x, y = map(float, line.strip().split()) points.append([x, y]) except ValueError: pass # 上側の座標と下側の座標を閉じる if len(points) >= 2: points.append(points[0]) # dxfファイルを作成する doc = ezdxf.new('R2010') msp = doc.modelspace() # 点を描画する for i in range(len(points) - 1): msp.add_line(points[i], points[i + 1]) # dxfファイルを保存する save_path = filedialog.asksaveasfilename(defaultextension='.dxf', filetypes=[('DXF Files', '*.dxf')]) if save_path: doc.saveas(save_path)
dxfファイル出力した結果を示す。
上面のプロットと下面のプロットをつなぐ際に、
(0,0)と(1,0)の座標が線で結ばれてしまっているがあえて直していない。
(自分が使うときに結局前縁と後縁をつないでしまうため。)
datファイルをエクセルに張り付けて点結びのアドインを使うよりかは作業が楽になるかな~