HM-8040:Tclスクリプトからのマクロの作成

ここでは、Tclスクリプトからユーティリティメニューマクロを作成します。

内容:
  • 現在のHyperMeshモデルを保存するためのコマンドを定義
  • コマンド実行のためのユーティリティメニューマクロの作成

  • ユーティリティメニューのUser ページにマクロ実行のための新しいボタンを作成

HyperMesh ユーティリティメニューページ上のボタンからコマンドファイルコマンドまたはTclスクリプトを実行するにはまず、ユーティリティメニューマクロを定義する必要があります。ユーティリティメニューマクロには、適切な操作を実行する有効なコマンドファイルまたはtemplexコマンドが含まれており、*beginmacro および*endmacro コマンドを使って定義されます。マクロは、引数$1、$2 等を用いて渡されるデータを受け入れることができます。各引数は、どこで置換されるべきかを指定します。これらのマクロは、userpage.mac ファイルを含む各.mac ファイル内で定義されます。

以下は、ユーティリティメニューマクロの書式を示すものです:
*beginmacro(macroname)
            command statements go here
        *endmacro()

ユーティリティメニュー マクロは、HyperMesh Tcl 修正コマンドで構成されます。

コマンドファイルの削除

このステップでは、既存のコマンドファイルを削除します。

  1. 現時点のcommand.cmf ファイルは、現在の作業ディレクトリにあります。
  2. ファイルを削除します。

操作の実行

このステップでは、HyperMeshで操作を確認します。

HyperMeshで実行される各コマンドは、実行された順に現れ、コマンドファイル内に反映されます。

  1. メニューバーからFile > Save As > Modelを選択します。
  2. ファイルブラウザを使って、データを出力するディレクトリに移動し、テンポラリファイルをtemp.hmという名称で保存します。
  3. Saveをクリックします。

コマンドの抽出

このステップでは、コマンドファイルからコマンドを抜き出します。

  1. テキストエディタを使ってコマンドファイルを開きます。
  2. コマンドファイルの終わり付近にある*writefileコマンドを探し出します。これが、モデルファイルを書き出すコマンドです。
  3. この行を選択し、コピーします。

スクリプトの作成とコマンドの変換

このステップでは、savefile.tclという名前のTclスクリプトを作成し、コマンドをTCLフォーマットに変換します。

  1. テキストエディタを使って、savefile.tcl という名の新しいファイルを作成します。
  2. savefile.tclファイル内にコマンドファイルからコピーした*writefileコマンドをペーストします。
  3. ()はすべてスペースに置き換えて削除します。" ".についても同様に削除します。コマンドは下記のとおりです:
    *writefile temp.hm 0
  4. *writefile コマンドの後ろにコマンド*answer yes を追加します。

    コマンド*answer yes は、temp.hmが既に存在する場合にファイルを上書きするか確認されると、自動的に“yes”を選択します。括弧は入れません。

  5. カレント作業ディレクトリ内にsavefile.tcl スクリプトを保存します。

スクリプトを実行するマクロの作成

ここでは、Tclスクリプトを実行するユーティリティメニューマクロを作成します。

  1. マクロラッパーコマンド*beginmacroおよび*endmacroを使って、Tclスクリプトを実行するための*evaltclscriptコマンドをコールする新しいユーティリティメニューマクロを記述します。*beginmacroコマンド内で、マクロをEvalTclと命名します。
    *beginmacro("EvalTcl")
                    *evaltclscript($1,0)        
                *endmacro()

    マクロ名EvalTclは、 *createbuttonコマンド内のmacroNameフィールドを介し、ボタンとマクロを結びつけるために使用されます。

  2. userpage.macファイルを保存します。

マクロボタンの追加

このステップでは、ファイル Userにコマンドを追加します。

  1. userpage.macファイル内に新しいボタンを作成します。
    *createbutton(5,"SaveFile TCL",15,0,10,GREEN,"Save file using TCL macro", 
    "EvalTcl","savefile.tcl")

    これで、ページ5(User ページ)にボタンを作成し、ボタンに名前を付け、20行目に配置し、列0で開始し、幅を10に設定し、緑色を適用し、ヘルプ文字列を与えることを指定し、更にここからStep 5で定義されたマクロEvalTcl を参照することが指定されます。

    savefile.tcl スクリプトの参照にフルパスは使用されない点にご留意ください。HyperMeshがスクリプトを検索する予め定義されたパスのうちのいずれかにファイルが存在しない場合には、フルパスを指定することも可能です。ユーザーは、TCL_INCLUDE 環境変数を使って追加の検索パスを加えることができます。これらの検索パスから相対パスを使うことも可能です。

  2. userpage.macファイルを保存します。

コマンドファイルの再読み込み

このステップでは、現在の.macファイルを再度読み込み、修正されたuserpage.macを読み込みます。

メニューバーからPreferences > Menu Configを選択し、macro file横のretrieveをクリックします。

現在のユーザープロファイルに基づき、hm\scripts\<profile name>ディレクトリから正しい.macファイルを読み込んでください。ユーザープロファイルが読み込まれていない場合は、hm\bin\<platform>ディレクトリ内のデフォルトのhm.macを読み込みます。

マクロのテスト

このステップでは、マクロをテストします。

  1. ユーティリティメニュー メニューのUser ボタンをクリックします。
    Save File TCL という名称の新しいボタンがUser ページ上に表示されているはずです。
  2. このボタンをクリックし、ファイルを自動的に保存します。
    ファイルは、*writefile コマンドに指定されているディレクトリに保存されます。本演習では、ディレクトリを指定していないため、HyperMeshはファイルを起動ディレクトリまたは現在の作業ディレクトリに保存します。ファイルは常に、マクロ内で指定された名称(ここではtemp.hm)で保存されます。