MacroHelp
 

ホーム / 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('/', '\\')