MV-1040:Tclを用いたモデルの構築
このチュートリアルでは、アプリケーションのTclインターフェースの操作方法と、Tclコマンドを使って簡単なモデルを構築する方法を学びます。
- Tcl
- Tcl (Tool Command Language。"ティクル"または"ティーシーエル"と発音)は、素早いプロトタイピング、スクリプト化されたアプリケーション、GUI、テストなどに一般的に使用されるスクリプト言語です。
- Tclは、シンプルでプログラム可能なシンタックスを有します。
- Tclは、オープンソースです。
- HyperWorks Desktopには、エンドユーザーを補助するライブラリを有したTclインタープリターがビルトインされています。
- Tclは、スタンドアロンで、もしくはMotionViewを含むHyperWorks Desktopなどのアプリケーションに埋め込んで使用することができます。
- コンパイル言語であるCとは異なり、Tclはインタープリター言語です。Tclプログラムは、Tclインタープリターによって処理されるTclコマンドから成るシンプルなスクリプトです。
- Tclは拡張が可能です。新規のTclコマンドは、C言語を使ってインプリメントでき、簡単に統合できます。多くの人達が共通のタスクについて拡張パッケージを書いており、それらはインターネット上で自由に入手できます。
- エンジニアリングチームは異なるリソースやアプリケーションを使用します。Tclは、それらのリソースを繋ぐために使用することができます。これは、ワークフローの自動化において大いに役立ちます。
- Tkは、強力なGUIの迅速な作成を可能とするグラフィカルユーザーインターフェースツールキットです。
- Tcl/Tkは非常にポータブルで、Unix、windows、Macintoshをはじめとした異なる環境で実行されます。これは、いろいろなプラットフォームで作業を行うユーザー達に数々の恩恵をもたらします。
- MotionViewで大規模なマルチボディモデルを構築する際、同じ手順を複数回繰り返すような状況に出会うことがあります。そのような手順または手順のセットは、Tclを使って自動化し、時間のかかる反復的なタスクを行うことで浪費される時間と手間を節減することが可能です。
- すべてのHyperWorks Desktopアプリケーションがそうであるように、MotionViewも、製品の様々な機能にアクセスし、それらを活用してプロセスを自動化するためのスクリプトの記述を補助するTclコマンドレイヤーを有しています。
- Tclスクリプトは、Tkアプリケーションによりコールされる、もしくはProcess Managerに結びつけることが可能です。
- Tclスクリプトは、プリファレンスファイルに登録でき、メニューのショートカットで製品の一部となり得ます。
HyperWorks DesktopハンドルとHyperWorks Desktopデータベースはオブジェクトの階層構造で成っており、そのルートは自動的に作成されるhwiオブジェクトです。hwiは、hwiSessionオブジェクトおよび幾つかのハイレベルのユーティリティへのアクセスを提供します。現時点では、HyperWorks Desktopは1つの実行毎に1つのセッションしかサポートしません。セッションオブジェクトは、Tclコマンドプロンプトにおいて、以下のコマンドでリトリーブできます:(System32) 1 % hwi GetSessionHandle sess1.
- (System32) 2 % sess1 GetProjectHandle proj1
- (System32) 3 % proj1 GetPageHandle page1 1
- (System32) 4 % page1 GetWindowHandle win1 1
- (System32) 5 % win1 SetClientType "Animation"
- (System32) 6 % win1 GetClientHandle post1
1つのウィンドウのクライアントタイプは、クライアントハンドルがリトリーブされた後は変更できません。ウィンドウのクライアントタイプが変更された場合、クライアントハンドルは開放され、再度リトリーブされる必要があります。
- ListMethods:オブジェクトに実行されるメソッドコマンドを表示します。
- ListHandles:同じタイプの全コマンドオブジェクトの名称をリストします。
- ReleaseHandle:コマンドオブジェクトを開放します。
トップレベルのhwiコマンドオブジェクトは、ユーティリティコマンドListAllHandles(現在使用されているすべてのコマンドオブジェクトを表示)をサポートします。
Tclコマンドを使ったシンプルな振り子モデルの構築
このステップでは、シンプルな振子モデルを構築するためのTclスクリプトを作成します。
hwi OpenStack
Obtain All necessary handles
Perform some function
Release All obtained handles individually
hwi CloseStack
- 新しいMotionViewセッションを開きます。
-
menu barで をクリックします。
TkConウィンドウが開き、アプリケーションとインストールされているTcl and Tkのバージョンが表示されますApplications。
-
コマンドプロンプトで、hwi GetSessionHandle sessと入力します。
コマンドが成功した場合、プロンプトはコマンド出力としてsessと印字します。このコマンドは、変数"
sess
"にセッションハンドルを割り当てます。注: hwiクラスで使用可能なオプション / コマンドを確認するには、コマンドプロンプトでhwi ListMethodsと入力します。これによって、hwiの下で使用できるすべてのオプションが表示されます。 -
sess GetProjectHandle projと入力し、変数"
project
"にプロジェクトハンドルを割り当てます。 -
ページハンドルを取得するために、コマンドproj GetPageHandle page
1を入力します。
変数"
page
"は、セッションの最初のページのページハンドルを指しています。注: これらコマンドのシンタックスの詳細については、"HyperView, MotionView and HyperGraph" Reference Guideの"Programming with Tcl/Tk Commands" オンラインヘルプをご参照ください。 -
コマンドpage GetWindowHandle
win 1を入力し、ウィンドウハンドルを取得します。
これは、最初のウィンドウのウィンドウハンドルを変数"
win
"に割り当てます。 -
コマンドwin GetClientHandle
mcを入力し、クライアントハンドルを取得します。
注: 1つのセッションは、複数のクライアント(HyperView、MotionView、HyperGraph 2Dなど)を有します。MotionViewが起動されると、デフォルトのクライアントはMotionViewとなります。GetClientHandleコマンドは、クライアントハンドルを介してMotionViewモデルオブジェクトへのアクセスを提供します。
-
コマンドwin
GetViewControlHandle vchで、ビューコントロールハンドルを取得します。
これにより、異なるビューを設定したり、モデルをmodeling windowにフィットさせたりすることができます。
-
コマンドmc CreateBlankModelを使用し、新しいブランクモデルから開始します。コマンドmc
GetModelHandle mで、このモデルのハンドルを取得します。
これで、振り子モデルのエンティティの作成を開始できるようになりました。InterpretEntityおよびInterpretSetステートメントを使用します。このモデルを構築するために、2つのポイントエンティティ、1つのボディエンティティ、3つのグラフィックエンティティ、および1つの回転ジョイントが必要です。以下に、InterpretEntityコマンドのシンタックスを示します:
modelHandle InterpretEntity EntityHandle Entitytype EntityVariableName EntityLabel <Parameters>
- EntityHandleは、エンティティのハンドルを指定します。
- Entitytypeは、作成するエンティティのタイプ(Point、Body、Graphicなど)を指定します。
- EntityVariableNameは、MotionViewで確認するエンティティの変数名を指定します。
- EntityLabelは、MotionViewで確認するエンティティのラベルを指定します。
- Parametersは、対応するエンティティの作成に必要なパラメータ(例えば、BodyにはCM Point)を指定します。
-
振子のピボットに、ポイントエンティティを追加します。
- コマンドm InterpretEntity p Point p_0 "\"Pivot\""を使って、変数名p_0、ラベル Pivotであるポイントを作成します。
- コマンドm InterpretSet SetPoint p_0 0.0 0.0 0.0で、ポイントのプロパティを設定します。
- ポイントハンドル(Tcl内のp)をコマンドp ReleaseHandleでリリースします。
-
以下のコマンドのセットを用いて、振り子の位置にポイントを作成します:
m InterpretEntity p Point p_1 "\"Mass\"" m InterpretSet SetPoint p_1 p_0.x+100 p_0.y p_0.z p ReleaseHandle
-
以下のコマンドのセットで、振子のボディを追加し、その質量と慣性プロパティを設定します:
m InterpretEntity b Body b_0 "\"Pendulum\"" p_1 m InterpretSet SetBodyInertia b_0 0.5 100 100 100 m InterpretSet SetOrientation b_0.cm TWOAXES ZX b ReleaseHandle
-
以下のコマンドのセットを用いて、ボディ状に3つのグラフィックスを追加します。
m InterpretEntity g Graphic gra_0 "\"Graphic_Pivot\"" CYLINDER B_Ground p_0 V_Global_Y 1 1 10 -5 CAPBOTH g ReleaseHandle m InterpretEntity g Graphic gra_1 "\"Graphic_Pendulum_Cylinder\"" CYLINDER b_0 p_0 p_1 1 CAPBOTH g ReleaseHandle m InterpretEntity g Graphic gra_2 "\"GraphicMass_Cylinder\"" CYLINDER b_0 p_1 V_Global_Y 5 5 3 -2 CAPBOTH g ReleaseHandle
-
以下のコマンドのセットを用いて、回転ジョイントで振り子をグラウンドに接続します。
m InterpretEntity j RevJoint j_0 "\"Joint_Pivot_Rev\"" B_Ground b_0 p_0 V_Global_Y j ReleaseHandle
- エンティティを追加した後、コマンドm Evaluateでデータベースを更新します。
- コマンドで、vch Fitモデルをモデリングウィンドウにフィットさせます。
- これで、モデル実行の準備が整いました。Runパネルに進み、結果ファイルの名称を指定し、RunボタンをクリックしてMotionSolveでモデルを実行します。Animateボタン をクリックし、アニメーションを表示します。
-
上記の手順でコマンドを介して得られたハンドルは、ReleaseHandleコマンドを使ってリリースされなくてはなりません。次のコマンドを使用します:
m ReleaseHandle; mc ReleaseHandle; win ReleaseHandle; page ReleaseHandle; proj ReleaseHandle; sess ReleaseHandle;
-
テキストエディタで、上記のTclコマンドをすべてペーストし、ファイルをpendulum.tclとして<作業ディレクトリ>に保存します。
ファイルは"ソース化"され、モデルはワンステップで作成できます。参照用として完全なスクリプトをステッププリファレンスファイルでのTclの登録に記します。注: もしくは、ファイルを<作業ディレクトリ>にコピーすることで、automationフォルダーからpendulum.tclファイルを使用できます。
Tclファイルの読み込み
このステップでは、振子モデルのTclファイルを読み込みます。
- 新しいMotionViewセッションを開始します。
-
menu barで をクリックします。
図 1.
画面の下部にTkConウィンドウが開きます。図 2.
- cdコマンドを入力し、ディレクトリを現在の<作業ディレクトリ>に変更します。
-
コマンドsource pendulum.tclを入力し、Tclスクリプトを起動します。
これで、ファイル内のコマンドが1行ずつ順に実行され、完全なモデルを構築します。
プリファレンスファイルでのTclの登録
このステップでは、MotionViewでTclファイルをプリファレンスファイルとして登録する方法について学習します。
- 新しいファイルでテキストエディタを開きます。
-
以下のステートメントを入力します:
*Id("HyperWorks vXX.X")
*BeginModelDefaults()
*BeginMenu(scripts, "My Scripts")
*MenuItem(flexprep, "Build Simple Pendulum", Tcl, "<workingdirectory>/pendulum.tcl")
*EndMenu()
*EndModelDefaults()
注: <working_directory>を、マシン上の実際の作業ディレクトリのパスに置き換えます。パスには、フォワードスラッシュを使用します。注: シンタックスの詳細については、オンラインヘルプをご参照ください。 - ファイルを<作業ディレクトリ>にmypreference.mvwとして保存します。
- 新しいMotionViewセッションを開始します。
- menu barで をクリックします。
-
PreferencesダイアログからRegisterをクリックします。
図 3.
-
mypreference.mvwファイルを選択します。
これで、新しいプリファレンスがリストに追加されます。
- 新しいプリファレンスを選択し、Loadをクリックします。セッションを閉じます。
-
新しいセッションを開始します。
モデリングクライアントで、My Scriptsという新しいメニューが見えるはずです。プリファレンスファイルが登録されている限り、MotionViewセッションを開くたびにこのメニューは使用できます。
-
をクリックします。スクリプトを実行します。参照用として完全なスクリプトを以下に記します:
## Macro to Build a Simple Model in MotionView ## ## Requesting for the Handles required to Use MotionView ## hwi OpenStack hwi GetSessionHandle sess sess GetProjectHandle proj proj GetPageHandle page [proj GetActivePage] page GetWindowHandle win [page GetActiveWindow] win GetClientHandle mc win GetViewControlHandle vch mc CreateBlankModel mc GetModelHandle m ## Building the Model using the InterpretEntity statements ## m InterpretEntity p Point p_0 "\"Pivot\"" m InterpretSet SetPoint p_0 0.0 0.0 0.0 p ReleaseHandle m InterpretEntity p Point p_1 "\"Mass\"" m InterpretSet SetPoint p_1 p_0.x+100 p_0.y p_0.z p ReleaseHandle m InterpretEntity b Body b_0 "\"Pendulum\"" p_1 m InterpretSet SetBodyInertia b_0 0.5 100 100 100 m InterpretSet SetOrientation b_0.cm TWOAXES ZX b ReleaseHandle ## Adding graphics to the pendulum and the Ground to improve result visualization m InterpretEntity g Graphic gra_0 "\"Graphic_Pivot\"" CYLINDER B_Ground p_0 V_Global_Y 1 1 10 -5 CAPBOTH g ReleaseHandle m InterpretEntity g Graphic gra_1 "\"Graphic_Pendulum_Cylinder\"" CYLINDER b_0 p_0 p_1 1 CAPBOTH g ReleaseHandle m InterpretEntity g Graphic gra_2 "\"GraphicMass_Cylinder\"" CYLINDER b_0 p_1 V_Global_Y 5 5 3 -2 CAPBOTH g ReleaseHandle ## Adding the Revolute joint between the Ground and the pendulum body m InterpretEntity j RevJoint j_0 "\"Joint_Pivot_Rev\"" B_Ground b_0 p_0 V_Global_Y j ReleaseHandle m Evaluate vch Fit after 1000 ## Running the Model ## mc ExportModel simple_pendu.xml mc RunSolverScript simple_pendu.xml ## Releasing All the Handles m ReleaseHandle; mc ReleaseHandle; win ReleaseHandle; page ReleaseHandle; proj ReleaseHandle; sess ReleaseHandle; hwi CloseStack; ## End of Script