ホーム / Pythonスクリプト / PythonからFemtetを操作
PythonからFemtetを操作
PythonスクリプトからFemtetを操作する方法を説明します。
サンプルスクリプトについて
- サンプルスクリプトを取得(自己解凍形式)
-
このスクリプトは、Femtetヘルプ応力例題10のマクロ出力したVBAマクロファイルをもとにPythonスクリプトに変換したものです。
- 解凍を行うと以下のファイルが展開されます。
FemtetMacroSample.py(サンプルスクリプト本体)
- サンプルスクリプトの処理概要
- FemtetMain():メイン関数
・Femtetの自動起動(Python Femtet ユーティリティパッケージのauto_execute_femtet関数)
↓
・CFemtetクラスのインスタンスを作成(win32com.client.Dispatch関数)
↓
・新規プロジェクト作成(CFemtet.OpenNewProject関数)
↓
・解析条件設定(AnalysisSetup関数)
↓
・ボディ属性設定(BodyAttributeSetup関数)
↓
・材料定数設定(MaterialSetUp関数)
↓
・境界条件設定(BoundarySetUp関数)
↓
・モデル作成(MakeModel関数)
↓
・メッシュ生成(CGaudi.Mesh関数)
↓
・解析実行(CFemtet.Solve関数)
↓
・解析結果値の抽出(SamplingResult関数)
- サンプルスクリプトの実行方法
- サンプルスクリプトでは、標準出力に解析結果値の表示を行う処理を記述していますので、コマンドプロンプトからスクリプトの実行を行ってください。
- コマンドプロンプトから以下のコマンドを実行します。
python FemtetMacroSample.py

- Femtetが自動起動します。その後解析が実行された後、コマンドプロンプトに以下のような解析結果値が表示されます。

- 注意点
- スクリプトを途中で中断したい場合、Ctrl+Breakキーを押下することで中断することが可能です。
Python Femtet ユーティリティパッケージの使用について
- Python Femtet ユーティリティパッケージを使用すると、PythonスクリプトからFemtetの起動、別アプリケーションの起動等ができます。
- 作成するスクリプトに、Python Femtet ユーティリティパッケージのインポートを記述します。(サンプルスクリプト参照)
from femtetutils import util, const
- 関数を使用します。
- 例:Femtetを起動する
util.auto_execute_femtet()
Femtetインタフェースクラスのインスタンス作成について
- Python Femtet ユーティリティパッケージには、Femtetインタフェースクラスの名称が定義されています。これを利用してインスタンスの作成を行うと便利です。
- 定義されているFemtetインタフェースクラスを、以下に挙げます。
CFemtet, CGaudiPoint, CGaudiVector, CGaudiPlane, CComplex, CSYZMatrix
- 作成するスクリプトに、Python Femtet ユーティリティパッケージのインポートを記述します。(サンプルスクリプト参照)
from femtetutils import util, const
- Pythonの変数にFemtetインタフェースクラスのインスタンスを作成(Dispatch)します。(サンプルスクリプト参照)
Femtet = Dispatch(const.CFemtet) #CFemtetクラスのインスタンスを生成する場合
Femtetマクロの定数の使用について
- Femtetマクロの定数(例:SOLVER_T、SPACE_T、DYNAMIC_Tなど)をPythonで利用するためには以下の定義が必要です。
- 作成するスクリプトに、インスタンス作成/マクロ定数参照パッケージのインポートを記述します。(サンプルスクリプト参照)
from win32com.client import Dispatch, constants
- スクリプト内で定数使用する場合は、以下の赤字部分のように、constants.定数名と記述してください。
Als.Hertz.Dynamic = constants.HARMONIC_C
Python専用関数/プロパティ
- Python専用関数/プロパティについて
・Femtetの標準関数/プロパティは、VB/VBAでFemtetを操作できるように作成しています。
このため一部の関数/プロパティでは、Pythonで動作しないことを確認しています。
・動作しない関数/プロパティについては、別途Python専用関数/プロパテイを用意しています。
専用関数/プロパティが存在する場合、ヘルプの関数リスト/プロパティリストに
が表示されています。

- 標準関数/プロパティとの違い
・識別しやすいように、関数/プロパティ名の末尾に[_py]を付加しています。
(例) 標準関数:CGaudi.CreateWire1 ⇒ Python専用関数:CGaudi.CreateWire1_py
・標準関数に複数の戻り値が存在する場合は、タプル形式で1つの戻り値にまとめています。
(例) 標準関数:CGaudi.FindBodyAll(Points() As CGaudiPoint, BodyList() As CGaudiBody) As Booleanの場合、
BodyList()とFindBodyAll関数自体に戻り値が存在します。(2種類の戻り値)
↓
Python専用関数:CGaudi.FindBodyAll_py(CGaudiPoint[] Points)ではFindBodyAll関数自体に複数の戻り値をタプル形式にまとめています。
ret = FindBodyAll_py(Points)
この場合retの中身は以下のようになります。
ret[0] ⇒ TrueまたはFalseが戻ります。
ret[1][0~見つかったボデイ数 - 1] ⇒ 見つかったボディ(CGaudiBody)の動的配列が戻ります。
-
複数の戻り値が存在する場合、左辺の変数を種類別に複数指定することも可能です。
(例) ret, bodies = FindBodyAll_py(Points)のように記述すると、
retに実行結果(True/False)、bodiesにボディの動的配列がセットすることができます。
VBAマクロから移行する場合の注意点
- 引数のないFemtetマクロ関数は、必ず()を記述してください。Pythonでは()がなくてもエラーになりませんが、関数自体は実行されません。
(例) CFemtet.Redraw()、CGaudiBody.Fit()など
- Python専用関数(xxx_py)が提供されている場合、必ず使用してください。_pyを付け忘れていた場合、エラーが表示されたり、エラーにはならずに意図しない動作になることがあります。
ファイルパスについて
- Femtetのマクロ関数では、ファイルパスの区切り文字は\のみ対応しています。
区切り文字に'/'スラッシュを使用できませんので次のようなコードで変換してください。
path = path.replace('/', '\\')


