自分の覚え書きも兼ねて、Open CASCADE Draw Test Harness の日本語版情報を公開しておきたいと思います。
- Draw Test Harnessとは
- Draw Test Harnessの使い方
- コマンドリファレンス
- 基本コマンド グラフィックコマンド
- ジオメトリーコマンド
- トポロジーコマンド
- アプリケーションフレームワーク
- データ変換コマンド
- 形状修復コマンド
- Tcl 言語自体に関して
Draw Test Harness の使い方
この章では、Draw Test Harness の基本的な使い方について紹介しています。
1. 起動と終了
1.1. UNIX 系 OS の場合
Draw Test Harness のコマンド名は、DRAWEXE となっています。OCCT を正常にインストールできている環境であれば、DRAWEXE コマンドが環境変数 PATH に設定されたディレクトリに配置されますので、ターミナルで次のコマンドを実行するだけで起動できます。
DRAWEXE
“this isn’t a Tk application” というメッセージが表示され起動できない場合は、X サーバに接続ができるか確認してみてください。DRAWEXE はコンソールにて OpenCASCADE のコマンドを実行できる環境ですが、GUI フロントエンドとして Tcl/Tk ベースのメニューバー、ウィンドウを持った画面を備えています。
また、終了するには次のコマンドをタイプします。
exit
1.2. Microsoft Windows の場合
Microsoft Windows の場合、OS 自体がそもそも開発環境として貧弱ですのであまりお勧めできませんが、UNIX と同様に利用することができます。 ただし、環境変数の取り扱いが煩雑であったり、OpenCASCADE とは関係のない予期せぬエラーが発生する場合がありますのでご注意ください。
Microsoft Windows では、DRAWEXE.exe は次の場所にインストールされます。
C:\OpenCASCADE6.6.0\ros\win32\vc10\bin\DRAWEXE.exe
標準構成でインストールした場合の例ですので、バージョン、プラットフォーム、開発環境によってインストール場所が変わります。また、このインストール場所は環境変数 PATH に入っていないはずですので、PATH や CASROOT といった環境変数を設定してから DRAWEXE を起動するためのバッチファイルが必要になります。
この起動用バッチファイルは標準で次の場所にインストールされます。
C:\OpenCASCADE6.6.0\ros\draw.bat
インストール直後では上記の場所にありますが、構成を変えたり、複数のバージョンを混在して利用する場合、ユーザー自ら、内容を書き直さなければなりません。 また、コマンドプロンプトから DRAW を使う際にも、いくつか留意点がありますので、後述したいと思います。
DRAWEXE を起動するには、エクスプローラーから draw.bat をダブルクリックするか、コマンドプロンプトから draw.bat を実行してください。終了方法は UNIX と同じく、exit コマンドを用います。
2. コマンドを使う
OCCT の各種コマンドは、Tcl のプラグインとして実装されています。起動しただけでは、これらのプラグインを使うことができませんので、起動直後に以下のコマンドを実行します。
pload ALL
大文字と小文字に注意してください。プラグインが正常にロードされると、GUI メニューに OCCT コマンドの項目が追加されます。これで、OCCT のコマンドを使うことができます。
3. テスト実行
プラグインをロードしたら、OCCT コマンドが正常に動作するか試してみましょう。次のコマンドを実行してください。
axo
box mybox 10 10 10
fit
axo コマンドで、AXO (平行投影・鳥瞰)ビューを表示し、box コマンドで大きさ 10, 10, 10 のボックス(箱)を作成し、fit コマンドでビューをフィットさせています。
上手く動作すれば、次のような見た目になると思います。
1. 注意事項
基本コマンド
この章では、基本的な描画パッケージで定義されたすべてのコマンドについて解説しています。 いくつかの Tcl コマンドを除いて、ほとんどが Draw で策定されています。これらのコマンドは、すべて Draw アプリケーション内で確認することが出来ます。 また、コマンドは 4 つのセクションに分けられます。
- 全般コマンド … Draw の使用方法や Tcl 管理
- 変数管理コマンド … ストアやダンプといった Draw 変数の管理
- グラフィックコマンド … ビューの制御などのグラフィックシステムの管理
- 変数表示コマンド … 与えられたビュー内に表示されたオブジェクトを管理
Draw にも一般的な GUI メニューバーが付属しています。これらをコマンドの変わりに使う事も出来ます。
全般コマンド
このセクションでは、いくつかの便利なコマンドについて解説します。
help – コマンドのオンラインヘルプを表示する
help を引数なしで実行すると、全グループのそれぞれに含まれるコマンドを一覧表示します。引数として文字列を指定する場合、その文字列から始まる全てのコマンドのヘルプを一覧表示します。
構文
help [command [helpstring group]]
- command 対象となるコマンド
- helpstring ヘルプ文字列
- group ヘルプグループ
例
# a から始まる全てのコマンドのオンラインヘルプを表示する。
help a
source – スクリプトファイルを実行する
スクリプトファイルパスで指定されたスクリプトファイルを現在のシェルで実行します。UNIX 系シェルの組み込みコマンド source と同じような効果が得られます。
構文
source filename
- filename スクリプトファイルパス
例
# スクリプトファイルを実行する。
source foo.tcl
spy – 入力されたコマンドをファイルに保存する
入力されたコマンドをファイルに保存します。既に spy が実行中の場合、現在の出力ファイルをクローズします。また、引数を指定せずに実行すると現在のファイルをクローズし、spy を停止します。 ファイルがすでに存在する場合、ファイルは上書きされます。コマンドは追加されません。コマンドがエラーを返した場合、エラーメッセージはコメントとして保存されます。 また、spy によって作成されたファイルは、source コマンドで実行することができます。
構文
spy [filename]
- filename 出力ファイルパス
例
# session ファイルにコマンドを保存する。
spy session
# この間に入力されたコマンドは session に保存される。
# session ファイルを閉じ、spy を終了する。
spy
cpulimit – 処理のタイムアウト秒数を設定する
指定した秒数後に処理をタイムアウトさせます。無限ループを回避させるテストや長い処理に突入してしまう場合などに使用する事が出来ます。 また、引数なしで実行すると既存のすべてのタイムアウトを解除します。
構文
cpulimit [nbseconds]
- nbseconds 秒数
例
# 1 時間後に処理をタイムアウトさせる。
cpulimit 3600
wait – 一定時間待機する
指定した秒数だけ、一定時間待機します。引数を省略した場合、10 秒待機します。スクリプトをスライドショーのように表示させる場合に便利です。
構文
wait [nbseconds]
- nbseconds 秒数
例
# 10 秒待つ。
wait
chrono – 処理時間を計測する
処理時間を計測するクロノメータと呼ばれるタイマーを設定します。引数を省略した場合、Draw クロノメータがアクティブになり、経過時間と CPU 時間(システム・ユーザ)が表示されます。 また、引数を指定すると詳細な管理を行うことが出来ます。このコマンドは UNIX の time コマンドに相当します。
構文
chrono [name start|stop|reset|show]
- name クロノメータに個々の名前をつけます。
- start クロノメータを実行します。
- stop クロノメータを停止します。
- reset クロノメータを 0 にリセットします。
- show クロノメータの現在の時間を表示します。
例
# クロノメータをアクティブにする。
chrono
==>Chronometers activated.
# 何か処理をする。
ptorus t 20 5
==>Elapsed time: 0 Hours 0 Minutes 0.0318 Seconds
==>CPU user time: 0.01 seconds
==>CPU system time: 0 seconds
# 経過時間、CPU時間が表示される。
ちなみに、「経過時間」は実際にかかった全体の時間、「CPU システム時間」は OS の提供するシステムコールの呼び出しやハードウェア制御でかかった時間、「CPU ユーザ時間」はアプリケーション自身が処理を行なった純粋な時間です。
変数管理コマンド
isdraw,directory – Draw 変数かどうか判別する,定義済みのDraw変数を表示する
isdraw コマンドは Tcl が提供する変数に Draw 変数がマッピングされているかどうかを評価します。1 が返ってくると、引数に与えられた変数は Draw 変数であると言えます。 また、directory コマンドを利用すると、全ての Draw のグローバル変数一覧をマッチパターンで取得することが出来ます。
構文
isdraw varname
directory [pattern]
- varname 変数名
- pattern 変数名の検索パターン
例
# 通常の変数として a を宣言。
set a 1
# a は通常の Tcl 変数なので、0が返る。
isdraw a
==> 0
# Draw コマンドで a を設定する。
dset a 1
# a は Draw 変数である、という結果に。
isdraw a
==> 1
# もちろん、オブジェクトを変数 c に宣言しても
circle c 0 0 1 0 5
# Draw 変数である。
isdraw c
==> 1
# "curve" を含む Draw 変数を全て破棄するには以下。
foreach var [directory *curve*] {unset $var}
whatis,dump – 変数の内容を調べる
whatis コマンドは、指定された Draw 変数についての短い説明を表示します。また dump コマンドは、簡単な型の説明と座標を返し、必要であれば Draw 変数のパラメータも返します。
構文
whatis varname [...]
dump varname [...]
- varname 変数名
例
circle c 0 0 1 0 5
whatis c
c is a 2d curve
dump c
*********** Dump of c *************
Circle
Center :0, 0
XAxis :1, 0
YAxis :-0, 1
Radius :5
※ Draw 変数以外の変数に対する whatis コマンドの挙動は保証されません。
rename,copy – 変数名を変更、変数をコピーする
rename コマンドは Draw 変数の名前を変更します。元の変数はなくなります。この時、内容が変更されないことに注意してください。名前だけが変更されます。 copy コマンドは既存の変数の内容のコピーを持つ新しい変数を作成します。このコマンドの正確な動作は依存型です。一定のトポロジカル変数の場合には、内容はまだ共有されることがあります。
構文
rename varname tovarname [[varname tovarname] ...]
copy varname tovarname [[varname tovarname] ...]
- varname 元の変数名
- varname リネーム後、またはコピー後の変数名
例
circle c1 0 0 1 0 5
rename c1 c2
# カーブはコピーされるので、c2 は変更されません。
copy c2 c3
datadir,save,restore – データを読み書きする
datadir コマンドを引数を省略して実行すると、現在のデータディレクトリを表示します。引数を指定して実行すると、データディレクトリのパスを設定します。 save コマンドは、変数をデータディレクトリに保存します。標準では、変数名がそのままファイル名として保存されます。第二引数でファイル名を明示的に指定する事も可能です。 restore コマンドは、データディレクトリより変数を読み込みます。標準では、ファイル名がそのまま変数名として読み込まれます。こちらも、第二引数で指定する事が出来ます。 ファイルの正確な内容は、タイプに依存します。これらは通常、ASCIIファイルですので、アーキテクチャに依存しません。
構文
datadir [directory]
save variable [filename]
restore filename [variablename]
- directory データディレクトリのパス
- variable 変数名
- filename brep ファイルパス
例
# note how TCL accesses shell environment variables
# using $env()
datadir
==>.
datadir $env(WBCONTAINER)/data/default
==>/adv_20/BAG/data/default
box b 10 20 30
save b theBox
==>/adv_20/BAG/data/default/theBox
# when TCL does not find a command it tries a shell command
ls [datadir]
==> theBox
restore theBox
==> theBox
ユーザ定義コマンド
DrawTrSurf パッケージでは、Geom_Geometry オブジェクトなどから Draw ジオメトリック変数を作成、表示するコマンドが提供されています。 DBRep パッケージでは、TopoDS_Shape オブジェクトなどから Draw トポロジー変数を作成、表示するコマンドが提供されています。
set
DrawTrSurf パッケージ:
構文
void Set(Standard_CString& Name, const gp_Pnt& G);
void Set(Standard_CString& Name, const gp_Pnt2d& G);
void Set(Standard_CString& Name, const Handle(Geom_Geometry)& G);
void Set(Standard_CString& Name, const Handle(Geom2d_Curve)& C);
void Set(Standard_CString& Name, const Handle(Poly_Triangulation)& T);
void Set(Standard_CString& Name, const Handle(Poly_Polygon3D)& P);
void Set(Standard_CString& Name, const Handle(Poly_Polygon2D)& P);
例
Handle(Geom2d_Circle) C1 = new Geom2d_Circle(gce_MakeCirc2d (gp_Pnt2d(50,0,) 25));
DrawTrSurf::Set(char*, C1);
DBRep パッケージ:
構文
void Set(const Standard_CString Name, const TopoDS_Shape& S);
例
TopoDS_Solid B;
B = BRepPrimAPI_MakeBox (10,10,10);
DBRep::Set(char*,B);