Comments
Description
Transcript
PV-WAVE 入門(プログラムを作ろう)
PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う v1.4 目次 は じ めに ............................................................................................. 1 第 1 章 予備知識 ....................................................................... 2 1.1 カ レ ン ト デ ィ レ ク ト リ と サーチパ ス .................................2 第 2 章 プ ロ シージ ャ ............................................................... 4 2.1 2.2 2.3 2.4 プ ロ シージ ャ を作 る .............................................................4 引数付のプ ロ シージ ャ を作 る .............................................5 オプシ ョ ン キーワー ド を追加す る .....................................6 複数のプ ロ シージ ャ を同一フ ァ イ ルに記述す る .............7 第 3 章 関数............................................................................... 9 3.1 3.2 3.3 関数を作 る .............................................................................9 関数の実行 ...........................................................................10 関数使用例 ........................................................................... 10 第 4 章 簡単なプ ロ グ ラ ム を作 る ......................................... 13 4.1 4.2 4.3 4.4 フ ァ イ ルを選ぶ : WgFileSelection ....................................13 テ キ ス ト フ ァ イ ルを読み込む : Dc_Read_Free() .............14 グ ラ フ を表示す る : Plot .....................................................15 マ ウ ス で値を確認す る : Cursor ........................................15 第 5 章 簡単な GUI プ ロ グ ラ ム を作 る ................................ 18 第 6 章 PV-WAVE 言語 ・ 文法 ............................................. 21 6.1 6.2 演算子 ...................................................................................21 文法 .......................................................................................21 こ のテ キ ス ト で使用す る PV-WAVE コ マ ン ド ........................... 24 PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う は じ めに PV-WAVE はデータの解析・可視化ソフトです。お手持ちのデータの読込みから、折 れ線グラフ・等高線・鳥瞰図・3 次元の等値面・断面表示・地図等の表示が簡単に 出来ます。また、数学・統計計算や信号処理・画像処理の機能もある為、航空宇 宙・環境工学・エネルギー・金融・通信・自動車・化学・製薬・医療等幅広い分 野で利用されています。 PV-WAVE は Windows 及び UNIX/LINUX/Mac OS の各 OS 上で使用できます。OS コマン ドの実行等幾つかのコマンドを除けば全ての OS 上で同じ様にお使い頂けます。勿 論、Windows 上で作成した PV-WAVE のコマンドやアプリケーションを LINUX 上で実 行するという様に異なる OS 間での互換性もあります。 PV-WAVE は、用途に応じて次の様に使い分ける事ができます。 ① PV-WAVE ウインドウからコマンドを入力する対話処理を行う ② Navigator ツールを使い、 ほぼマ ウ ス操作だけでデー タ の読込み ・ 表示 ・ 出力 を行 う 。 ③ 上記の①と②を併用する ④ プログラムを作成し一括処理をおこなう このテキストは、④の方法についての入門編です。PV-WAVE のより詳細な情報及び プログラムの作成方法に関しては別途トレーニングコースを用意しています。 無料マニ ュ アルダ ウ ン ロ ー ド http://www.roguewave.jp/products/wave/documentation.html 有料 ト レーニ ン グ コ ース http://www.roguewave.jp/tech/trg.html こ の テ キ ス ト では操作及びキーボー ド か ら 入力す る コ マ ン ド は太字で表示 し て い ま す。 太字で表記 さ れてい る PV-WAVE の コ マ ン ド を入力す る と 本文中に表示 さ れてい る 図が表示 さ れ ます。尚、PV-WAVE の コ マ ン ド は大文字 ・ 小文字の区別はあ り ません。 キーボー ド か ら 入力 し た PV-WAVE の コ マ ン ド は最大 20 個ま で保存 さ れてい ます。( ヒ ス ト リ ー機能 ) 上矢印キー ( ↑ ) で前に入力 し た コ マ ン ド を再度呼び出す事がで き ます。 コ マ ン ド の再 実行や編集にご利用下 さ い。 では、PV-WAVE のプログラムを作って見ましょう。 ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社 1 PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う 第 1 章 : 予備知識 1.1 カ レ ン ト デ ィ レ ク ト リ と サーチパ ス ユーザが作成 し たプ ロ シージ ャ や関数 ( 以下プ ロ グ ラ ム と 呼ぶ ) を実行す る には、作成 し たプ ロ グ ラ ムは以下のデ ィ レ ク ト リ / フ ォ ルダーになければな り ません。 • カレン ト ディ レ ク ト リ • PV-WAVE のシ ス テ ム変数! Path で指定 さ れたデ ィ レ ク ト リ 1) カ レ ン ト デ ィ レ ク ト リ PV-WAVE を立ち上げた時、 Windows 版では PV-WAVE イ ン ス ト ールフ ォ ル ダー( デフ ォ ル ト は C:¥RW) がカ レ ン ト デ ィ レ ク ト リ と な り ます。ま た UNIX/ LINUX 版では PV-WAVE を実行す る コ マ ン ド (wave) を実行 し たデ ィ レ ク ト リ がカ レ ン ト デ ィ レ ク ト リ と な り ます。 PV-WAVE では、 PWD コ マ ン ド でカ レ ン ト デ ィ レ ク ト リ を確認す る 事がで き ます。 WAVE> PWD ま た、 CD コ マ ン ド で カ レ ン ト デ ィ レ ク ト リ の 移動 が で き ま す。 例 え ば、 C:\VNI\BIN に 移動す る には、 移動先のデ ィ レ ク ト リ 名を文字列 と し て指定 し ます。 つま り 、 移動先のデ ィ レ ク ト リ 名を、 シ ン グル コ ーテーシ ョ ン (‘) 又はダブル コ ーテー シ ョ ン (“) で囲っ て指定 し ます。 WAVE> CD, “C:\rw\wave\bin” ま たは、 WAVE> CD, ‘C:\rw\wave\bin’ 移動先のデ ィ レ ク ト リ 名の指定には相対パ ス指定 (./BIN 等 ) も で き ます。 ま た、 Windows 版の場合フ ォ ルダー名に空白や日本語が入っ て も 問題あ り ませ ん。 2) サーチパ ス PV-WAVE のシ ス テ ム変数! Path は、 PV-WAVE コ マ ン ド のサーチパ ス を定義 し てい ます。 PV-WAVE の コ マ ン ド は こ のサーチパ ス で指定 し たデ ィ レ ク ト リ ま たはカ レ ン ト デ ィ レ ク ト リ になければな り ません。 PV-WAVE の Print コ マ ン ド で! Path の内容を確認で き ます。 WAVE> Print, !Path シ ス テ ム変数! Path にサーチパ ス を追加す る には、 以下の様に区切 り 文字 と 追加す る パ ス を文字列 と し て! Path に加え ます。 例えば Windows 版の場合区 切 り 文字はセ ミ コ ロ ン (;) であ る 為、C:\tmp を サーチパ ス に追加す る には以下 の様にな り ます。 2 http://www.roguewave.jp PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う WAVE> !Path = !Path + “;C:\tmp” 一方 UNIX/LINUX の場合区切 り 文字は コ ロ ン ( : ) と な る 為、 /tmp を サーチパ ス に追加す る には以下の様に入力 し ます。 WAVE> !Path = !Path + “:/tmp” 3 ) 作業環境の設定 (wavestartup) カ レ ン ト デ ィ レ ク ト リ の移動やサーチパ ス !Path の変更は PV-WAVE を終了す る と 初期化 さ れ ます。こ れ ら の処理を PV-WAVE 立ち上げ時に自動的に設定す る には、wavestartup フ ァ イ ルに記述 し ます。wavestartup フ ァ イ ルは以下のデ ィ レ ク ト リ ( フ ォ ルダー ) にあ り ます。 “PV-WAVE イ ン ス ト ールデ ィ レ ク ト リ /wave/bin” wavestartup フ ァ イ ルはテ キ ス ト フ ァ イ ルですので、 エデ ィ タ で開いて フ ァ イ ルの最後尾に処理内容を記述 し て く だ さ い。 ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社 3 PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う 第 2 章 : プ ロ シージ ャ プ ロ シージ ャ は PV-WAVE のプ ロ グ ラ ム単位です。 PV-WAVE のプ ロ シージ ャ は一般の エデ ィ タ ( メ モ帳 ・ Emacs 等 ) を使っ て作成 し 、 カ レ ン ト デ ィ レ ク ト リ ま たはサーチパ ス (!Path) に記述 さ れたデ ィ レ ク ト リ に保存 し ます。 (PV-WAVE v9.0 からは Eclipse 用 PV-WAVE Plug-In が追加されました ) 2.1 プ ロ シージ ャ を作 る プ ロ シージ ャ 作成時の注意事項は以下の通 り です。 • PRO で始ま り END で終わ る • プ ロ シージ ャ 名は PRO の直後空白を挟んで指定す る • 引数があ る 場合はプ ロ シージ ャ 名の後に コ ン マ (,) で区切っ て並べ る • PV-WAVE の コ マ ン ド は大文字小文字の区別がない • セ ミ コ ロ ン (;) か ら 行末ま では コ メ ン ト では実際にプ ロ シージ ャ を作っ てみま し ょ う 。始めに、乱数グ ラ フ を表示す る プ ロ シー ジ ャ SampleP1.pro を作成 し ます。 エデ ィ タ で次の 3 行を入力 し 、 カ レ ン ト デ ィ レ ク ト リ に SampleP1.pro と い う フ ァ イ ル名で保存 し て く だ さ い。 SampleP1.pro は 1 行目の “Pro” で始ま り 、 3 行目の “End” で終わっ てい ます。 1 行目の “SampleP1” がプ ロ シージ ャ 名 と な り ます。 2 行目の “Plot” コ マ ン ド は折線グ ラ フ を表示 し ます。 “Randomu” コ マ ン ド は指定 し た 数 (20 個 ) の乱数を発生 し ます。 SampleP1 プ ロ シージ ャ を実行す る には、 PV-WAVE コ マ ン ド か ら プ ロ シージ ャ 名を入 力 し て く だ さ い。 WAVE> SampleP1 4 http://www.roguewave.jp PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う PV-WAVE 表示 ウ イ ン ド ウ が開 き 折線グ ラ フ が表示 さ れ ま す。 SampleP1 プ ロ シージ ャ は 実行す る たびにグ ラ フ の形状が変わ り ます。 2.2 引数付のプ ロ シージ ャ を作 る SampleP1 プ ロ シージ ャ では必ず 20 個の乱数を発生 さ せま し た。 次に、 プ ロ シージ ャ 実行時にデー タ 数を指定す る SampleP2 プ ロ シージ ャ を作成 し ます。 エデ ィ タ で次の 4 行を入力 し 、 カ レ ン ト デ ィ レ ク ト リ に SampleP2.pro と い う フ ァ イ ル名で保存 し て く だ さ い。 引数はプ ロ シージ ャ 名の後にカ ン マ (,) で区切っ て記述 し ます。SampleP2 プ ロ シージ ャ では、 実行時に指定 さ れた引数はプ ロ シージ ャ 内の変数 “data_num” に与え ら れ、 その 数に よ り 発生 し た乱数のグ ラ フ を表示 し ます。 も し 、 SampleP2 プ ロ シージ ャ 実行時 に引数を指定 し なか っ た場合、 あ る いは引数 と し て 0 を与え た場合プ ロ シージ ャ のエ ラ ー と な り ますが 2 行目の様な処理を記述 し ておけば data_num の初期値 と し て 10 が 与え ら れエ ラ ーは発生 し ません。 SampleP2 の実行例は以下の通 り です。 WAVE> SampleP2, 100 WAVE> SampleP2, 500 ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社 5 PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う 2.3 オプシ ョ ン キーワ ー ド を追加す る 通常の引数 と 同 じ 様にオプシ ョ ン キー ワー ド は、 プ ロ シージ ャ 名の後にカ ン マ (,) で区 切っ て記述 し ます。 書式は “ オプシ ョ ン キー ワー ド 名=変数名 ” です。 SampleP3 プ ロ シージ ャ では、 乱数で発生 さ せた点群間を 3 次 ス プ ラ イ ン で補間す る キー ワ ー ド パ ラ メ ー タ Spline を追加 し ます。 エデ ィ タ で次の 17 行を入力 し 、 カ レ ン ト デ ィ レ ク ト リ に SampleP3.pro と い う フ ァ イ ル名で保存 し て く だ さ い。 1 行目の “Spline=sflag” の左辺 Spline はオプシ ョ ン キー ワ ー ド 名です。sflag は指定 さ れ た値を格納す る 変数名です。プ ロ シージ ャ 実行時に Spline キー ワ ー ド が指定 さ れなか っ た場合、 4 行目の処理に よ り sflag には 0 が格納 さ れ ます。 6 http://www.roguewave.jp PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う Spline キー ワ ー ド に 1 以外が指定 さ れた場合、9 行目の IF 文に よ り 10 行目の Plot コ マ ン ド のみが実行 さ れ ます。 こ れは通常の折線グ ラ フ です。 も し 1 が指定 さ れた場合、 11 行目の Else 文に よ り 12 ~ 15 行目が実行 さ れます。 5 及び 8 行目は コ メ ン ト 行です。 ま た、 9 行目及び 11 行目のセ ミ コ ロ ン (;) 以降 も コ メ ン ト と な り ます。 SampleP3 の実行例は以下の通 り です。 WAVE> SampleP3, 10 WAVE> SampleP3, 10, Spline=1 ま たは WAVE> SampleP3, 10, /Spline こ こ で、 “/Spline” は “Spline=1” と 同 じ 意味です。 ど ち ら と も SampleP3 プ ロ シージ ャ の sflag 変数には 1 が代入 さ れます。 2.4 複数のプ ロ シージ ャ を同一フ ァ イ ルに記述す る 1 つの フ ァ イ ルに複数のプ ロ シージ ャ を記述す る 場合は、 フ ァ イ ル名 と 同 じ 名前のプ ロ シージ ャ を フ ァ イ ルの最後に記述す る 事 を お薦め し ま す。 ユーザ作成のプ ロ シー ジ ャ を実行す る 場合、 フ ァ イ ル名 と 同 じ 名前のプ ロ シージ ャ 及びフ ァ イ ル名 と 同 じ 名 前のプ ロ シージ ャ よ り 前に記述 さ れてい る プ ロ シージ ャ は自動的に コ ンパ イ ル さ れ ま すが、 それ よ り 後に記述 さ れてい る プ ロ シージ ャ は コ ンパ イ ル さ れません。 前節 2.3 で 作成 し た SampleP3.pro を 2 つ の プ ロ シ ー ジ ャ に 書 き 直 し た サ ン プ ル SampleP4.pro を示 し ます。SampleP4.Pro には、Graph プ ロ シージ ャ と SampleP4 プ ロ シー ジ ャ が記述 さ れてい ます。 Graph プ ロ シージ ャ は SampleP3 プ ロ シージ ャ のデー タ 作成 と グ ラ フ表示部分 (5 行目か ら 16 行目 ) で SampleP4 プ ロ シージ ャ か ら 呼ばれ ます。 SampleP4.pro の実行方法及び実行結果は SampleP3.pro と 同 じ にな り ます。 ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社 7 PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う 8 http://www.roguewave.jp PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う 第 3 章 : 関数 関数は PV-WAVE のプ ロ グ ラ ム単位です。 PV-WAVE の関数は必ず何 ら かの値を返 し ま す。 PV-WAVE の関数は一般のエデ ィ タ ( メ モ帳 ・ Emacs 等 ) を使っ て作成 し 、 カ レ ン ト デ ィ レ ク ト リ ま たはサーチパ ス (!Path)に記述 さ れたデ ィ レ ク ト リ に保存 し ます。(PVWAVE v9.0 からは Eclipse 用 PV-WAVE Plug-In が追加されました。) 3.1 関数を作 る 関数作成時の注意事項は以下の通 り です。 • Function で始ま り END で終わ る 。 • Return 文で値を返す。 但 し 、 値の タ イ プやサ イ ズは問わない。 • 関数名は Function の直後空白を挟んで指定す る 。 • 引数があ る 場合は関数名の後に コ ン マ (,) で区切っ て並べ る 。 • PV-WAVE の コ マ ン ド は大文字小文字の区別がない。 • セ ミ コ ロ ン (;) か ら 行末ま では コ メ ン ト 。 では実際に関数を作っ てみ ま し ょ う 。 始めに、 配列デー タ を入力す る と 平均値 ・ 標準 偏差 ・ 合計を計算す る 関数 SampleF1.pro を作成 し ます。 エデ ィ タ で次の 16 行を入力 し 、 カ レ ン ト デ ィ レ ク ト リ に SampleF1.pro と い う フ ァ イ ル名で保存 し て く だ さ い SampleF1 関数の 1 行目は Function 文の後に関数名 (SampleF1)、更に コ ン マ (,) で区切 ら れて引数で与え ら れた配列デー タ を格納す る 変数 (data) が続 き ます。 3 行目の IF 文で 入力 さ れたデー タ の要素数をチ ェ ッ ク し 、2 個以下であればエ ラ ー メ ッ セージ を出力 し -1 を返 し ます。 デー タ の要素数が 2 個以上であれば、 9 行目の Stdev 関数を使っ て平均 ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社 9 PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う 値 (mean) と 標準偏差 (sval) を計算 し ます。 更に、 12 行目の Total 関数を使っ て合計値 (tval) を計算 し ます。 計算 し た結果は 15 行目の Return 文で 3 要素の配列 と し て返 さ れ ます。 SampleF1 関数の 2,8,11,14 行目は コ メ ン ト 行です。 ま た、7,10,13 行目の空白行は無視 さ れます。 3.2 関数の実行 PV-WAVE の関数を実行す る 方法は次の 2 通 り です。 SampleF1 関数を例に実行 し てみ まし ょ う。 1) 関数の返値を代入す る 変数を指定す る WAVE> answer = SampleF1([1,2,3,4,5]) WAVE> Print, answer 上記の コ マ ン ド を実行す る と 以下の数値が表示 さ れます。こ れ ら は、[1,2,3,4,5] の平均値が 3.0、 標準偏差が 1.58114、 合計値が 15.0 を意味 し ます。 3.000001.5811415.00000 ま た、 以下の コ マ ン ド を実行す る と よ り 判 り やすい表示にな り ます。 WAVE> Print, “ 平均値= ”, answer(0) WAVE> Print, “ 標準偏差= ”, answer(1) WAVE> Print, “ 合計値= ”, answer(2) 平均値= 3.00000 標準偏差= 1.58114 合計値= 15.00000 2) 関数の返値を他のプ ロ シージ ャ や関数に代入す る 関数を別のプ ロ シージ ャ や関数の引数 と し て直接指定す る 事がで き ます。 WAVE> idata = [1,2,3,4,5] WAVE> Print, “ 平均値、標準偏差、合計値:”, SampleF1(idata) 平均値、 標準偏差、 合計値 : 3.00000 1.58114 15.0000 3.3 関数使用例 前述の3.1で作成 し たPV-WAVE関数SampleF1 を使っ てプ ロ シージ ャ を作成 し ま し ょ う 。 プ ロ シージ ャ SampleF2 は、 指定 し た数の乱数及びその平均値 と 標準偏差を グ ラ フ表示 し ます。 エデ ィ タ で次の 25 行を入力 し 、 カ レ ン ト デ ィ レ ク ト リ に SampleF2.pro と い う フ ァ イ ル名で保存 し て く だ さ い。 10 http://www.roguewave.jp PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う プ ロ グ ラ ム フ ァ イ ル SampleF2.pro には関数 SampleF1 が記述 さ れてい ません。 こ の様 に、 同一フ ァ イ ル内に記述 さ れていない関数を使用す る 場合は、 SampleF2 の 7 行目に あ る Declare Func コ マ ン ド で使用す る 関数を指定 し て下 さ い。 但 し 、 Declare Func で指 定す る のは関数のみで、 プ ロ シージ ャ は指定す る 必要はあ り ません。 プ ロ シージ ャ SampleF2 では、7 行目で関数 SampleF1 を呼び出 し てい ます。関数 SampleF1 で計算 さ れた結果 answer は、 8 行目の Print コ マ ン ド で出力 さ れ ます。 更に 14,15 行目 で平均値を青色の線でグ ラ フ に表示 し 、18 ~ 24 行目で標準偏差を紫色の線でグ ラ フ に 表示 し ます。 プ ロ シージ ャ SampleF2 の使用方法は、 “SampleF2 , デー タ 数 ” です。 例えば、 100 個の デー タ を表示 さ せ る 場合は以下の様に入力 し ます。 WAVE> SampleF2, 100 ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社 11 PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う グ ラ フ には、 100 個のデー タ が+印で表示 さ れ平均値が青線で表示 さ れ ます。 ま た、 “ 平均値+ σ” 及び “ 平均値- σ の ” 値が紫の点線で表示 さ れます。 12 http://www.roguewave.jp PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う 第 4 章 : 簡単なプ ロ グ ラ ム を作 る PV-WAVE を使っ て、 テ キ ス ト 形式のデー タ フ ァ イ ル よ り デー タ を読み込み、 折れ線グ ラ フ を表示す る 簡単なプ ロ グ ラ ム (ChkGraph.pro) を作成 し ます。 更に、 表示 し た グ ラ フ を マ ウ ス で ク リ ッ ク す る 事に よ り グ ラ フ の座標を確認す る 機能を追加 し ます。 では、 エデ ィ タ を開 き プ ロ グ ラ ム ( プ ロ シージ ャ ) を作っ てみま し ょ う 。 4.1 フ ァ イ ルを選ぶ : WgFileSelection PV-WAVE の標準プ ロ シージ ャ WgFileSelection を使えば、 フ ァ イ ルセ レ ク タ ーを使っ た フ ァ イ ルの選択が可能です。 まず、 “ メ モ帳 ” や “vi”、 “Emacs”、 “Eclipse” 等のエデ ィ タ ーを開 き 次の 6 行を入力 し て く だ さ い。 こ のプ ロ グ ラ ム を、“ChkGraph.pro” の名前でカ レ ン ト フ ォ ルダ ま たは PV-WAVE のシ ス テ ム変数! Path に定義 し て あ る 作業フ ォ ルダに保存 し ます。 カ レ ン ト フ ォ ルダが分か ら ない場合は WAVE> PWD で確認 し て く だ さ い。 こ のプ ロ グ ラ ム を コ ンパ イ ル ・ 実行す る と 、 下図の よ う な フ ァ イ ルセ レ ク タ が立ち上 が り ます。 適当な フ ァ イ ルを選んで “OK” ボ タ ン を押す と 、 選んだ フ ァ イ ルの絶対パ ス名が表示 さ れます。 WAVE> Retall WAVE> .run ChkGraph WAVE> ChkGraph ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社 13 PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う 4.2 テ キ ス ト フ ァ イ ルを読み込む : Dc_Read_Free() PV-WAVE の標準関数、 Dc_Read_Free() でテ キ ス ト デー タ の読み込みを行い ます。 デー タ はたて並びで も 横並びで も 構い ません。 デー タ 間はカ ン マ (,) ま たは空白 ( ) で区切 ら れていれば OK です。 ま た、 N_Elements() 関数で読み込んだデー タ の数をチ ェ ッ ク で き ます。 ChkGraph.pro に以下の 6 ~ 8 行目を追加 し て く だ さ い。 プ ロ グ ラ ム を上書 き 保存 し た後、 次の コ マ ン ド 入力 し て く だ さ い。 選択 し たデー タ を 読み込みそのデー タ 数を表示 し ます。 WAVE> Retall WAVE> .run ChkGraph WAVE> ChkGraph フ ァ イ ルセ レ ク タ ーで、 “C:\RW\wave\data\scattered.dat” を選択す る と デー タ フ ァ イ ル 内にあ る 全てのデー タ を読み込み、 そのデー タ 数を表示 し ます。 こ のデー タ フ ァ イ ル はデー タ 間の区切 り は空白にな っ てい ます。 14 http://www.roguewave.jp PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う 4.3 グ ラ フ を表示す る : Plot PV-WAVE の標準プ ロ シージ ャ 、 Plot で折れ線グ ラ フ が表示で き ます。 ま た、 Max() 関 数及び Min() 関数 を 使 っ て 読み込 ん だ デー タ の 最大値 と 最小値 を 表示 で き ま す。 ChkGraph.pro に以下の 10 ~ 13 行目を追加 し て く だ さ い。 プ ロ グ ラ ム を上書 き 保存 し た後、 次の コ マ ン ド 入力 し て く だ さ い。 選択 し たデー タ の 折れ線グ ラ フ が表示 さ れます。 WAVE> Retall WAVE> .run ChkGraph WAVE> ChkGraph フ ァ イ ルセ レ ク タ ーで、サン プルデー タ “C:\RW\wave\data\scattered.dat” を選択す る と 次の様な グ ラ フ が表示 さ れます。 4.4 マ ウ ス で値を確認す る : Cursor PV-WAVE の標準プ ロ シージ ャ 、 Cursor でマ ウ ス で ク リ ッ ク し た点の座標を取得す る 事 がで き ます。 ま た、 マ ウ ス の右ボ タ ン / 左ボ タ ンの区別が PV-WAVE のシ ス テ ム変数! Err で確認で き ま す。 こ こ では、 折れ線が表示 さ れた グ ラ フ上を マ ウ ス 左ボ タ ン で ク ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社 15 PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う リ ッ ク す る と その点のグ ラ フ座標を表示 し 、 右ボ タ ン で ク リ ッ ク す る と プ ロ グ ラ ム を 終了す る 処理を追加 し ます。 ChkGraph.pro に以下の 15 ~ 25 行目を追加 し て く だ さ い。 プ ロ グ ラ ム を上書 き 保存 し た後、 次の コ マ ン ド 入力 し て く だ さ い。 選択 し たデー タ の 折れ線グ ラ フ が表示 さ れます。 WAVE> Retall WAVE> .run ChkGraph WAVE> ChkGraph フ ァ イ ルセ レ ク タ ーで、 サ ンプルデー タ “C:\VNI\wave\data\scattered.dat” を選択す る と 次の様な グ ラ フ が表示 さ れ ますので、 マ ウ ス 左ボ タ ン で グ ラ フ内を ク リ ッ ク し て く だ さ い。 グ ラ フ左下に座標が表示 さ れ ます。 マ ウ ス右 ク リ ッ ク で終了 し ます。 16 http://www.roguewave.jp PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社 17 PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う 第 5 章 : 簡単な GUI プ ロ グ ラ ム を作 る PV-WAVE には簡単な GUI(Graphical User Interface) 関数があ り ます。 GUI アプ リ ケー シ ョ ン作成については、PV-WAVE Application Developper’s Guide を ご参照 く だ さ い。 ま た、 各 GUI 関数の詳細及び使用例はオ ン ラ イ ンヘルプ を ご参照 く だ さ い。 ノ イ ズ付の Y=Sin(X) グ ラ フ を表示す る GUI プ ロ グ ラ ム SampleGUI.Pro を以下に示 し ま す。 SampleGUI.Pro には、 次の 4 個のプ ロ シージ ャ が記述 さ れてい ます。 • SliderCB : ス ラ イ ダーが動か さ れた場合の処理を記述 • ButtonCB : ボ タ ン が押 さ れた時の処理を記述 • Dra w CB : グ ラ フ表示 • SampleGUI : GUI の作成 と 表示 18 http://www.roguewave.jp PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う プ ロ シージ ャ SampleGUI は GUI パネルを作成 し ます。 PV-WAVE で GUI プ ロ グ ラ ム を作成す る 場合、 最初に必ず WwInit 関数を指定 し ます。 (31 行目 ) SampleGUI.Pro の 36 行目で使用 し てい る WwDrawing 関数は GUI パネル上にグ ラ フ表 示ウ イ ン ド ウ を作成 し ます。 WwDrawing 関数に与え る 3 つ目の引数 ’DrawCB’ はグ ラ フ表示プ ロ シージ ャ 名です。 プ ロ シージ ャ DrawCB にグ ラ フ表示プ ロ グ ラ ム を記述 し ます。 SampleGUI.Pro の 38 行目で使用 し てい る WwControlBox 関数は GUI パネル上に ス ラ イ ダーを作成 し ます。WwControlBox 関数に与え る 4 つ目の引数 ’SliderCB’ は ス ラ イ ダー が動いた と き の処理を記述す る コ ールバ ッ ク プ ロ シージ ャ 名です。 こ の例題では、 ス ラ イ ダーが動か さ れ る と ノ イ ズの倍率を変更 し グ ラ フ を再表示 し ます。 SampleGUI.Pro の 41 行目で使用 し てい る WwButtonBox 関数は GUI パネル上ボ タ ン を 作成 し ます。WwButtonBox 関数に与え る 3 つ目の引数 ’ButtonCB’ はボ タ ンが押 さ れた 時の処理を記述す る コ ールバ ッ ク プ ロ シージ ャ 名です。 こ の例題では、 ボ タ ン が押 さ れ る と プ ロ グ ラ ム を終了 し ます。 ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社 19 PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う SampleGUI.Pro の 43 行目で記述 し て あ る s=WwSetValue(Top,/Display) は GUI パネルを 表示す る コ マ ン ド です。 こ の処理は必ず必要 と な り ます。 SampleGUI.Pro の 44 行目で使用 し てい る WwLoop は GUI の イ ベン ト 待ちループです。 こ の コ マ ン ド を実行す る 事に よ り 、 ス ラ イ ダーが動か さ れた場合やボ タ ン が押 さ れた 時に SliderCB や ButtonCB の コ ールバ ッ ク プ ロ シージ ャ が実行 さ れ ます。 SampleGUI は以下の コ マ ン ド で実行 し ます。 WAVE> SampleGUI ノ イ ズ倍率ス ラ イ ダーを動かす と 、 Y=Sin(X) 上に載っ てい る ノ イ ズの大 き さ が変更 さ れ ます。 ま た、 終了ボ タ ン を押す と プ ロ グ ラ ムが終了 し ます。 20 http://www.roguewave.jp PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う 第 6 章 : PV-WAVE 言語 ・ 文法 PV-WAVE は独自の言語を持っ てい ます。 従っ て、 PV-WAVE だけで高度な アプ リ ケー シ ョ ン を構築す る 事がで き ます。 ま た、 C 及び Fortran と の イ ン タ ーフ ェ イ ス を持っ て い ますので、 PV-WAVE か ら C 又は Fortran プ ロ グ ラ ム を実行で き ます。 更に、 C 又は Fortran か ら PV-WAVE の コ マ ン ド やアプ リ ケーシ ョ ン を実行で き ます。 こ こ では、 PV-WAVE の演算子及び文法について説明 し ます。 こ れ ら の詳細に付 き ま し ては、 PV-WAVE プ ロ グ ラ マーズガ イ ド を ご参照 く だ さ い。 6.1 演算子 1) 関係演算子 • EQ,NE,LE,LT,GE,GT 条件を満たせば 1 、 そ う でなければ 0 を返す 2) 論理演算子 • AND,OR,XOR,NOT 3) その他の演算子 • =,+,-,*,/ • =は代入。 PV-WAVE では右辺のデー タ 型及びデー タ 値が左辺に代入 される 四則演算子は配列同士の計算 も 可能 ^ , < , > , # ,MOD,[] ^ はべ き 乗、 <は最小演算 , >は最大演算 , #はマ ト リ ッ ク ス の積 ,MOD は剰余 ,[] は配列指定 6.2 文法 1) 条件分岐 • IF ~ Then 例) If (I Eq 1) Then I=I+100 • IF ~ Then ~ Else 例) If (I Eq 1) Then I=I+100 Else I=-I • Case ~ Of : EndCase 例) Case index Of 1 : Print,“ERROR!!” 0 : Plot, data Else : Surface, data EndCase 2) 繰 り 返 し ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社 21 PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う • For ~ Do ~ 例 ) For I=0, 100 Do num=num+1 • While ~ Do ~ 例) While (I Lt 10) Do Print,I • Repeat ~ Until ~ 例 ) Repeat a=2*a Until (a LT b) 3) ジ ャ ン プ • GoTo, ~ 例 ) Goto, NEXT_STEP a=Sqrt(a) NEXT_STEP: a=a^2 4) ブ ロ ッ ク • Begin : End IF,Case,FOR,WHILE,REPEAT の処理文が複数の場合に使われ る 。 ど の制御 コ マ ン ド か を区別す る 為に End の後には コ マ ン ド 名を追加す る 。 例 1) IF (I Eq 1) Then Begin II=II+1 JJ=JJ-1 EndIf 例 2) CASE index Of -1 : Begin Print, “ERROR!!” Return End 1 : Plot, data Else : Surface,data EndCase 例 3) FOR I=10,100 Do Begin data=Randomu(Seed,I) Plot, data Wait,1 EndFor 例 4) 22 WHILE (I Lt 1000) Do Begin Readf, lun, a, b, c Print, a, b, c EndWhile http://www.roguewave.jp PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う 例 5) REPEAT Begin I=I+1 Print, I, I^2, Sqrt(I) ENDREP Until (I Le 100) ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社 23 PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う こ のテ キ ス ト で使用す る PV-WAVE コ マ ン ド こ のテ キ ス ト では以下の コ マ ン ド を使用 し てい ます。 各 コ マ ン ド の詳細はオ ン ラ イ ン ヘルプで確認 し て下 さ い。 [ デー タ 表示 コ マ ン ド ] • Plot : ラ フ を表示す る • Plots : 点群を表示す る • Oplot : グ ラ フ を追加表示す る • Xyouts : 文字列を表示す る • Surface : 鳥瞰図を表示す る • Window : 表示 ウ イ ン ド ウ を作成す る [ デー タ 生成 / 処理 コ マ ン ド ] • Randomu : 指定 し た数の乱数を生成す る • Findgen : 指定 し た要素数の配列を生成 し 、 0 か ら 連番の 値を与え る • Spline : ス プ ラ イ ン補間を行 う • Stdev : 与え ら れた数列の平均値、 標準偏差を返す • Total : 与え ら れた数列の合計を返す • Sqrt : 平方根を返す • Sin : 正弦値を返す • Max : 最大値を返す • Min : 最小値を返す [GUI 生成 コ マ ン ド ] • WwGetValue : 指定 し た GUI の値を返す • WwSetValue : 指定 し た GUI に値を渡す • WwInit : GUI のベース パネルを生成す る • WwLayout : 指定 し た GUI に レ イ ア ウ ト を生成す る • WwDrawing : GUI 上に表示 ウ イ ン ド ウ を生成す る • WwControlBox : ス ラ イ ダーを生成す る • WwButtonBox : ボ タ ン を生成す る • WwLoop : イ ベン ト 待ちループ [ その他の コ マ ン ド ] 24 • Pwd : カ レ ン ト デ ィ レ ク ト リ 名を返す • Cd : カ レ ン ト デ ィ レ ク ト リ を移動す る • Print : 変数の値を表示す る http://www.roguewave.jp PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う • Keyward_Set : キー ワー ド がセ ッ ト さ れていれば 1、 いなけれ ば 0 を返す • Return プ ロ シージ ャ や関数を終了す る 。 引数が与え ら れた場合呼び出 し プ ロ グ ラ ム にその値を返す • Declare Func : 関数を定義す る • Wait : 指定 し た秒数だけ次の処理を待つ • Readf : 指定 し た フ ァ イ ルか ら デー タ を読込む • WgFileSelection : 指定 し た フ ァ イ ルの絶対パ ス を返す (GUI) • Dc_Read_Free : テ キ ス ト フ ァ イ ルか ら デー タ を読込む • Cursor : マ ウ ス座標を取得す る • N_Elements : デー タ 数を返す ロ ーグ ウ ェ ーブ ソ フ ト ウ ェ ア ジ ャ パン株式会社 25 PV-WAVE 入門 : プ ロ グ ラ ム を作ろ う 26 http://www.roguewave.jp