【FreeCAD初心者ガイド】FreeCAD付属のmatplotlibを使って3次元モデリングに便利なプロトタイプ関数を思索する


※ 当ページには【広告/PR】を含む場合があります。
2023/10/06
【FreeCAD使い方講座】翼形状をスクリプトで生成する〜Pythonコンソールの使い方③
【FreeCAD使い方講座】FreeCADのmatplotlibを使ってGyroid関数を3次元プロットしてみる
蛸壺の中の工作室|FreeCAD付属のmatplotlibを使って3次元モデリングに便利なプロトタイプ関数を思索する

3Dモデリング中やその他諸々の工学系の研究等で、関数形状を描画して確認したい場合、かつて(大昔?)は「gnuplot」や「matlab」が主流でしたが、現在は「matplotlib」を使う機会も多くなりました。

とはいえ、matplotlibを使えるようにpython周りを一からセットアップするのは、少々手間のかかる作業です。

FreeCADでは標準で「numpy」や「Scipy」といった高度数値計算ライブラリだけでなく、matlabライクな高機能関数プロッター・
「matplotlib」を使うことができます。

また、2次元グラフ限定ではあるものの、ラベルやレジェンドなどをGUIからちょこっと変更したい場合に便利な
「Plot」ワークベンチというものも外部ワークベンチとして提供されています。

参考|Plot Workbench

今回はFreeCADだけで、matplotlibをどんな感じに使えるかを軽い事例で紹介していきます。


基礎からのFreeCAD 三訂版 (I/O BOOKS)

FreeCAD入門

FreeCADの使い方 いろんな物を作りながら3DCADを学ぼう!: 3Dプリンターでの印刷も掲載

図面の描き方がやさしくわかる本

FreeCADでmatplotlibを使うための基本操作

FreeCADでmatplotlibを使うとはいっても、特別な操作をする必要はありません。

他のスクリプト同様、「pythonスクリプト」を使いながらパスや座標点などの計算を行うことで作図が可能になります。

下の図は一連のpythonスクリプトの作成の流れを示しています。

合同会社タコスキングダム|蛸壺の中の工作室

まず、メニューから
[マクロ]を選ぶか、メモ帳のようなアイコンをクリックして、[マクロの実行]ダイアログを呼び出します。

次にユーザーマクロ(ユーザーが自由に登録できるマクロ)に新しいマクロ(Pythonスクリプト)を登録します。

ちなみにユーザーマクロのファイルの置き場所は
[ユーザーマクロの場所]から任意のフォルダを登録することができます。

[作成]ボタンから新規で作成したいファイル名を入力し、[OK]を押すとFreeCAD上でpythonスクリプトが編集できるようになります。

では手始めに以下の正弦関数を描くだけのスクリプトを試してみます。

            import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.sin(x)

plt.plot(x,y)
plt.show()
        
スクリプトを保存し、実行ボタン(緑色の三角アイコン)を押すと、

合同会社タコスキングダム|蛸壺の中の工作室

いつのものmatplotlibが使えます。


基礎からのFreeCAD 三訂版 (I/O BOOKS)

FreeCAD入門

FreeCADの使い方 いろんな物を作りながら3DCADを学ぼう!: 3Dプリンターでの印刷も掲載

図面の描き方がやさしくわかる本

FreeCADで2次元グラフを描く〜Plotワークベンチ編

FreeCADで2次元グラフを描く場合には、先程も説明したように標準のmatplotlibでも十分機能するのですが、作業がちょっとだけ便利になるかもしれない「Plotワークベンチ」を導入しておきましょう。

Plotワークベンチのインストール

このブログではおなじみの「アドオンマネージャ」からインストールできます。

合同会社タコスキングダム|蛸壺の中の工作室

合同会社タコスキングダム|蛸壺の中の工作室

ワークベンチのインストール後に、FreeCADを再起動するとPlotワークベンチが利用できるようになっています。

合同会社タコスキングダム|蛸壺の中の工作室

Plotワークベンチを利用して関数を描画する

Plotワークベンチも基本的には、Pythonマクロからpythonスクリプトを呼び出して利用することができます。

先程のようなPythonマクロから作図する方法でも良いのですが、ここでは少しやり方を変えて、FreeCAD標準のpythonコンソールからmatplotlibを扱う手法で2次元グラフを作ってみましょう。

まずFreeCADのGUIウィンドウの一つである「Pythonコンソール」を表示させましょう。

合同会社タコスキングダム|蛸壺の中の工作室

まだ表示されていなければ
[表示] > [パネル] > [Pythonコンソール]でpythonコンソールを表示させて、ここから対話的に簡単な関数を描画させてみます。

二次元グラフを描く場合、matplotlibのラッパーモジュールである「Plot」モジュールを使うと少し楽に作図できます。

            from FreeCAD.Plot import Plot
        
なおFreeCADv0.20より以前のバージョンでは、

            from freecad.plot import Plot
        
となって名前空間の呼び出しが少し違います。

試しに2点間の直線を描画させてみましょう。

            Plot.plot([0, 1], [0, 2])
        
すると、FreeCADの画面上で、

合同会社タコスキングダム|蛸壺の中の工作室

対話的にmatplotlibによるグラフの描画できていることがわかります。

プロットの再描画や消去を行いたい場合、表示されているページを閉じるだけです。左下の
plot☓をクリックすることで気に入らないグラフページを消去できます。

もう少し対話的な手法で、Plotワークベンチの機能をいくつか試してみましょう。

Plotワークベンチでグラフを装飾する

Plotワークベンチは主に、作図した2次元グラフのちょっとした見栄えをGUIから修正するためのツールです。

            from FreeCAD.Plot import Plot
import numpy as np
t = np.linspace(0, 1, 101)
s = np.sin(2.0*np.pi*t)
c = np.cos(2.0*np.pi*t)
Plot.plot(t,s)
Plot.plot(t,c)
        
というようにシンプルな関数の作図ができました。

合同会社タコスキングダム|蛸壺の中の工作室

とはいえ、何も設定しなければ軸のキャプションもなければ、スケールの調整もしていない状態です。

ここからpythonコードでゴリゴリと設定を書いていっても良いですが、ちょっとした修正をサッとスマートに済ませることができます。

合同会社タコスキングダム|蛸壺の中の工作室

主に4つのツールがGUI的にグラフを編集でき、

            1. 横軸/縦軸の表示範囲を調整
2. ブロットの線種・点種・配色
3. ラベル(タイトル・x軸・y軸)の文字・フォントサイズ
4. ラベル・レジェンドの表示位置を修正
        
が可能です。


基礎からのFreeCAD 三訂版 (I/O BOOKS)

FreeCAD入門

FreeCADの使い方 いろんな物を作りながら3DCADを学ぼう!: 3Dプリンターでの印刷も掲載

図面の描き方がやさしくわかる本

FreeCADで3次元グラフを描く

FreeCAD中のmatplotlibでも当然ながら3次元グラフに対応しています。

むしろFreeCAD内のmatplotlibを利用したいケースのほとんどは、おそらく計算後のデータ点の確認のために3次元グラフとして視覚化したいという目的で使われると思います。

例えば、円筒座標系で簡単な直方体を描いてみましょう。

            from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(projection="3d")

z = np.linspace(0, 10, 2)
theta = np.linspace(-np.pi, np.pi, 5)
Theta, Z = np.meshgrid(theta, z)

r0 = 10
X = r0 * np.cos(Theta)
Y = r0 * np.sin(Theta)

ax.plot_wireframe(X, Y, Z, color='darkblue')

plt.show()
        
これをpythonマクロで実行すると、

合同会社タコスキングダム|蛸壺の中の工作室

この直方体を、分割数を増やして円筒に変形させてみましょう。

            from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(projection="3d")

z = np.linspace(0, 10, 5)
theta = np.linspace(-np.pi, np.pi, 100)
Theta, Z = np.meshgrid(theta, z)

r0 = 10
X = r0 * np.cos(Theta)
Y = r0 * np.sin(Theta)

ax.plot_wireframe(X, Y, Z, color='darkblue')

plt.show()
        
だいたい円周を100等分くらいしたら円筒に見えると思います。

合同会社タコスキングダム|蛸壺の中の工作室

こういった3DCAD上での関数計算的な手法でモデリングできるのは、「パラメトリック」を謳うFreeCADの大きな利点の一つと言えるでしょう。


基礎からのFreeCAD 三訂版 (I/O BOOKS)

FreeCAD入門

FreeCADの使い方 いろんな物を作りながら3DCADを学ぼう!: 3Dプリンターでの印刷も掲載

図面の描き方がやさしくわかる本

まとめ

今回はFreeCADでmatplotlibを操作する方法について紹介してみました。

matplotlib、numpy、scipyをPythonマクロとして使いこなすことができれば、FreeCADでのモデリングの表現能力も格段に向上します。

色々とPythonスクリプトの組み立てになれながら、FreeCADのテクニックをより深めていきましょう。
記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

電子工作を身近に知っていただけるように、材料調達からDIYのハウツーまで気になったところをできるだけ細かく記事にしてブログ配信してます。