
AVS Technical Report -Volume5,Number1 April,1998-
最近はパソコンが普及し、データ管理はExcelやLotus1-2-3など表計算ソフトで行うのが主流になってきています。このような表計算ソフトを使うと簡単なグラフも描けるので大変便利です。
しかし、売上管理などのデータは簡単なグラフ表示でも満足できますが、計測データや解析結果などのデータを可視化する場合には、やはりAVSのような可視化ソフトでないと満足いかない事が多いと思います。
AVS5では、ユーザファイルからAVS5 fieldデータを生成するモジュール"file_discripter"が提供されています。このモジュールは、アスキー/バイナリどちらのファイルからでも直接AVS5 fieldデータを出力することが可能です。
しかし、"file_discripter"モジュールのパラメーター設定を行うには、AVS5 fieldデータのファイルフォーマットを理解しておく必要があります。
これに対し、AVS/Express Vizにはカラム毎に分けられているデータを取り込む"Read_Column_File"モジュールが提供されています。このモジュールはアスキーファイルのみの対応になっていますが、AVS/Express VizのFieldファイルフォーマットを理解していなくてもパラメーターを設定することができます。
今回のTechnical Reportでは、"Read_Column_File"を使用した表形式データの可視化方法と複数の可視化方法を一つのアプリケーションとしてまとめる方法について紹介します。
下図のようにExcel 97で入力されたデータを右の sample.csvファイルのようにカンマで区切られたアスキーデータとして保存します。
| Excel画面 | sample.csv |
|---|---|
![]() |
X, Y, data 1.0,25, 20 1.0,20, 40 1.0,15, 80 7.0,25, 10 7.0,20, 10 7.0,15, 90 12.0,25, 90 12.0,20, 50 12.0,15, 99 |
表計算ソフトをお持ちでない方は、viやメモ帳などのテキストエディタでファイルを直接作成してください。
Excelに入力されているデータをsample.csvファイルのように保存する場合は、以下の方法で行います。
まず、ファイルプルダウンメニューから「名前を付けて保存」を選択します。ファイルブラウザが表示されるので、保存先を指定し、ファイル名に"sample"と入力します。ファイルの種類から「CSV(カンマ区切り)」を選択し、保存ボタンをクリックするとsample.csvファイルが生成されます。
作成したsample.csvファイルをAVS/Express Vizに読み込みましょう。
Read_Column_Fileをワークスペースに配置します。
Read_Column_Fileモジュール
| Filename: | 読み込むカラムデータのファイル名。 |
|---|---|
| skip lines: | カラムデータの先頭から何行飛ばすか。 |
| has header line: | カラムデータの先頭行にカラム名が記述されている時に用いる。ONの時はそのカラム名をラベルとして設定する。 |
| column separator: | カラムデータの区切り文字。 |
| columns setup from file: | 自動設定のON/OFF選択。ONの時はファイルの一行目に合わせてカラム名やデータタイプなどを自動的に設定する。 |
| #columns in file: | ファイル内のカラム数。(columns setup from fileがOFFの場合にのみ有効) |
| Columns Setup: | カラムの選択メニュー。(各カラム毎にカラム名、データタイプを指定することが可能) |
| read column: | カラムデータを読み込むかどうかの選択ボタン。ONの時はColumns Setupで指定したカラムデータを読み込む。 |
| column name: | カラム名の設定。 |
| data type: | データタイプの設定。 |
| null value: | ヌルデータ値の設定。 |
| Read File: | データファイルを読み込み、テーブルデータを出力する。 |
Read_Column_Fileコントロールパネル
を設定します。
Filenameにsample.csvを絶対パスで指定してください。
sample.csvの先頭一行目には各カラムデータのラベルが書かれているので、has header lineボタンを選択します。このボタンを選択すると、Columns Setup選択メニューが "column_0" から "X," に変更されます。また、グレー表示されていた領域の文字が黒色に変ります。
このように、ファイル内のラベルを参照したい場合は has header lineボタンを選択します。データ以外のコメント行を飛ばしたい場合は skip lineで指定します。
カラムデータを区切っている文字を指定します。sample.csvはカンマ","で区切られているので、column separator選択メニューからカンマを選択します。
Columns Setup以降の設定は、AVS/Express Vizが自動的におこなってくれます。
Read Fileボタンを押すとsample.csvファイルが読み込まれ、Read_Column_Fileの出力ポートからテーブルデータという表形式のデータが出力されます。
Read_Column_Fileから出力されるテーブルデータはFieldデータではないので、そのまま可視化に用いることができません。フィルターモジュールを利用してFieldデータに変換する必要があります。
今回はtable_to_scatter_fieldを用いてテーブルデータを離散データとして変換します。
下図のように Read_Column_File と table_to_scatter_field を接続します。

読み込みネットワーク
| Field Coordinates: | 座標データの設定項目。 |
|---|---|
| X axis: | X軸用のカラムデータの指定。 |
| ON: | X axisカラムデータを読み込むかどうかの指定。 |
| Y axis: | Y軸用のカラムデータの指定。 |
| ON: | Z axisカラムデータを読み込むかどうかの指定。 |
| Axis Setup: | 各軸の選択メニュー。 |
| discrete: | 座標軸の設定。ONの場合、座標軸は実データではなく各カラムのデータ数から算出される。OFFの場合、実データが座標軸になる。 |
| Field Data: | データの設定項目。 |
| Data Setup: | 点表示を行うデータの設定。 |
| sphere radius: | 離散データの点表示。 |
table_to_scatter_fieldコントロールパネル
を設定します。
X axisを X に設定し、ONボタンを選択します。
Y axisを Y に設定し、ONボタンを選択します。
Axis Setup選択メニューから X と Y を選択し、各discreteボタンを非選択にします。カラムデータがfloat型の場合は、discreteボタンは自動的に非選択になります。
Field Dataをdataにします(この選択ボタンは複数選択できるようになっています。不要な X ボタンは非選択にしておきましょう)。
これでtable_to_scatter_fieldの出力ポートから離散データが出力されます。
実際に可視化してみましょう。
離散データの基本的な可視化であるグリフ表示を行います。下図のネットワークを作成します。
glyphモジュールのパラメーター Modeを scalar に変更してNormalizeボタンを選択すると、各データ上に三次元ダイヤモンドが配置されます。
離散データを補間し、コンター表示を行います。下図のネットワークを作成します。
scat_to_unifモジュールは、離散データを補間する機能を持っています。サンプルデータは二次元なので、scat_to_unifコントロールパネルにあるndimを 2 にします。補間の精度をあげたい場合はdimensionとinterpolate rangeで調節します。
contourモジュールの min level, max levelスライダーを変更するとコンターの表示領域を指定することができます。
鳥瞰図を作成します。
AVS5で鳥瞰図を作成する場合は、field_to_meshモジュールを使用していましたが、AVS/Express Vizではsurf_plotモジュールを使用します。
下図のネットワークを作成します。
surf_plotコントロールパネルのscaleスライダーによって高さ方向に拡大することができます。
前章では3つの可視化を紹介しましたが、これらの可視化をボタンによって切り替えられる仕組みを作成してみましょう。
AVS5で複数の可視化を行う場合は、同一ワークスペース内にネットワークを組み込まなければなりませんでした。また、GUIの構築やモジュール接続の切り替えもレイアウトエディタ機能やCLI(Command Language Interpreter)を利用して作成する必要があり、かなりの作業になることが考えられます。
これに対し、AVS/Express VizではGUIの作成からコマンドの実行までをモジュール単位で行えるため、作業がしやすくなっています
前章の3つの可視化ネットワークをマクロ化します。
例としてコンター図を表示するネットワークをマクロ化します。
Standard_Object.Macros.macroをインスタンスしてください。
このように、AVS/Express Vizの操作説明において、ライブラリ名とカテゴリ名とモジュール名をピリオドで繋げた記述が出てきます。これは Standard_Objectライブラリの中のMacrosカテゴリにあるmacroモジュールという意味です。
可視化に必要なモジュールをmacroモジュールに移動します。scat_to_unif, isoline, contour, Text_Glyphを選択し、macroに移動してください。
分りやすくするためにmacroの名前を変更しましょう。ここではContourMacroとします。
scat_to_unifとText_Glyphに渡すための入力ポートを作成します
それぞれの入力ポートをContourMacroの外に出しても良いのですが、その場合は2つの入力ポートがContourMacroに生成されてしまいます。これを簡素化させるために、scat_to_unif と Text_Glyph の前にStandard_Object.Links.linkオブジェクトを入れます。
複数の同じタイプのデータを1つにまとめる場合は、Standard_Object.Links.mlinkオブジェクトを使用します。
isoline, contour, Text_Glyph の出力ポートを mlink の入力ポートに接続します。こうすると、ContourMacroの入出力ポートが1つになります。
同様に、glyph,surf_plotについてもマクロ化します。
可視化手法を選択するボタンを作成します。
User_Interfaceライブラリにあるオブジェクトを使用して以下のように接続します。
GUI構築ネットワーク図の Contour,Glyph,Surf_Plot は、User_Interface.Menu_Bar.UIoptionをRenameしています。
visualization_listは、User_Interface.Option_Boxes.UIradioBoxLabelをRenameしています。これらのモジュール名はパネルの名前になります。
パネルの大きさを調整し、マクロ化します。
ワークスペース上でネットワークを作成するか、下記の内容をviやメモ帳などのテキストエディタでVファイルとして保存し、読み込んでください。ここでは、マクロ名を UImacro にしています。
macro UImacro {
UIradioBox UIradioBox {
parent => <-.UIshell;
cmdList => {<-.Contour,<-.Glyph,<-.Surf_Plot};
selectedItem = 0;
x = 10;
y = 40;
};
UIoption Glyph;
UIoption Contour;
UIoption Surf_Plot;
UIradioBoxLabel visualization_list {
parent => <-.UIshell;
};
UIshell UIshell {
height = 150;
};
};
Vファイルを読み込むと、下図のようなパネルが表示されます。

GUIパネル
構築したGUIパネルの可視化ボタンが押されたら選択された可視化マクロの出力結果をUviewer3Dに接続する仕組みを作成します。
AVS/Express Vizの既存モジュールでは、モジュールの接続を切り替えるという機能を持ったモジュールは提供されていません。そこで、Vコマンドを実行するparse_vモジュールを用いてモジュールの接続をコントロールします。
parse_vモジュールの仕組みを紹介します。
parse_vモジュールとintモジュールをワークスペースに配置してください。

parce_vテストネットワーク
parse_vモジュールを開き、
v_commandsオブジェクトに = "int=5;"
relativeオブジェクトに => <-
と入力します。
relativeオブジェクトには、Vコマンドの実行対象となるモジュールが存在する階層を指定します。
intモジュールはparse_vと同じ階層にあるので、relativeから見て一つ上の階層"<-"を参照しています。
v_commandsオブジェクトには、実行するVコマンドを入力します。このとき、コマンドの最後にセミコロン";"を付けることを忘れないでください。また、コマンドはダブルクォーテーション(")で括ってください。"int=5;"と入力すると intオブジェクトに5が設定されます。
この動作を"ボタンが押されたタイミングで実行する"ように設定する場合は、triggerオブジェクトとactiveオブジェクトにボタンのon/off情報を渡すことで行います。
この仕組みを元に可視化マクロモジュールとUImacroをまとめたネットワークは、下図のようになります。
トリガーに渡すon/off情報は、check1, check2, check3 で設定しています。
selectオブジェクトには、選択されている可視化手法の番号(UImacro.UIradioBox.selectedItem)が入っています。
select = 0 のときは Contour
select = 1 のときは Glyph
select = 2 のときは Surfplot
check1には「selectが0(Contour)であったらcheck1の値を1とする」という意味の「=> (.select == 0)」が入力されています。同様に、
check2には「=> (.select == 1)」
check3には「=> (.select == 2)」
が入力されています。
parce_v1モジュールは次のように設定されています。
GMOD.parse_v parse_v1 {
v_commands = "$push\n ...(処理の一時中断)
GlyphMacro.in=>;\n ...(GlyphMacro入力ポートの切断)
SurfplotMacro.in=>;\n ...(SurfplotMacro入力ポートの切断)
out=>;\n ...(out入力ポートの切断)
$pop\n ...(処理の再開)
$push\n ...(処理の一時中断)
ContourMacro.in=> <-.in;\n ...(in出力ポートをContourMacro入力ポートに接続)
out=>ContourMacro.out;\n ...(ContourMacroの出力ポートをout入力いポートに接続)
$pop\n";
trigger => <-.check1; ...(check1が選択されたらV_commandを実行)
active => <-.check1; ...(check1が選択されている状態ならV_commandを実行)
on_inst = 0;
relative => <-;(対象モジュールの存在する階層)
};
同様に、parce_2,parce_3についても設定します。
これらの機能をアプリケーションとしてまとめたVファイル"column_viz.v"を添付します。
ZIPcolumn_viz.v [3KB]
parse_vモジュールは、どんなVコマンドも実行させることができるので大変便利なモジュールですが、数が多くなるとそれだけアプリケーションの処理速度が遅くなるのでご注意下さい。
column_viz.v を実行しましょう。
Vファイルのみを起動する場合は、以下のように実行します。
% vxp column_viz.v
AVS/Express Vizを起動した後にVファイルを読み込む場合は、FileプルダウンメニューからLoad Application...を選択します。ファイルブラウザが表示されるのでcolumn_viz.vを選択します。
ファイルを読み込むと下図のネットワークが表示されます。
visualization listパネルで Contour, Glyph, Surf_Plot ボタンを選択すると各可視化が行われます。
今回はMultiWindow上で作成したので二つのパネルが表示されますが、レイアウトエディタ機能などを用いて必要なパネルを全て一つにまとめることも可能です。
今回紹介したRead_Column_Fileを用いるとアスキーファイルのデータを簡単に読み込むことができます。また、Fieldファイルフォーマットを理解すること無く読み込めるため、データをすぐに可視化したい場合に便利です。
複数の可視化アプリケーションを一つのアプリケーションにまとめる方法は、日頃からAVS/Express Vizで可視化アプリケーションを構築したりモジュールを作成されている方には必要がないかもしれません。
しかし、AVS5からAVS/Express Vizにシステムを移行することを考えている方は、AVS5の機能の1つであるCLI(Command Language Interpreter)がAVS/Express Vizではサポートされていないために不便に感じていると思います。CLIをサポートしていないのは、AVS5のgeometry viewerとAVS/Express VizのUviewerの構造に違いがありすぎるためです。
CLIはサポート対象外ですが、AVS/Express Vizの中間言語であるVCP(V Command Processor)を使用するとCLIで行えていたほとんどの機能を実行させることが可能になります(VCPについては、Developer's Referenceを参照下さい)。
特にモジュールを作成する場合を比較すると、AVS5でCLIを用いるモジュールを作成する場合、AVScommand関数を用いてモジュールをコーディングしてからコンパイルする必要がありました。
しかし、AVS/Express Vizでモジュールを作成する場合には、AccessoriesやStandard Objects, User Interfaceライブラリに登録されている部品を組み合わせ、Vファイルとして保存するだけで行えます。
また、アプリケーションとしてシステムを構築する場合でもネットワークをVファイルに保存することで可能になります。5.3章で紹介したparse_vオブジェクトを利用するとAVS/Express Vizのカーネルを制御したり特定のモジュール・パラメーターを一定に保つことなども可能になります。
このように、AVS/Express Vizでは全ての状態をVCPとして保存しています。モジュールのカスタマイズやAVS/Express Vizの制御に興味のある方は、是非、Developer's Referenceを参考にVCPを使用してみてください。
visual macroモジュールは、AVS/Express Vizの標準提供オブジェクトのみで構築したマクロモジュールです。
visualization listに登録されている可視化(Contour,Glyph,Surf_Plot)を選択すると、読み込まれたデータをそれぞれの方法で可視化します。
ZIPDownload visual_macro module V file [2KB]
Name visual macro
Type --
Input field(2D)
Output obj
Parameters Name Type Default
visualization list radio button Contour
サンプルVファイル column_viz.v を読み込むと、表形式データの可視化を行うアプリケーションが起動されます。
ZIPcolumn_viz.v [3KB]
(a)ネットワーク

表形式のデータを読み込みます。
以下のファイルを作成し、Read_Column_Fileから読み込んで下さい。
(b)読み込みデータ: sample.csv
X, Y, data
1.0,25, 20
1.0,20, 40
1.0,15, 80
7.0,25, 10
7.0,20, 10
7.0,15, 90
12.0,25, 90
12.0,20, 50
12.0,15, 99
Read_Column_Fileパラメーターの Read Fileボタンを選択するとコンター図(デフォルト)が表示されます。visualization listにある Glyph, Surf Plotを選択すると、それぞれの可視化を行います。
ファイルを読み込むとエラーメッセージが表示される場合があります。これはデータファイルが読み込まれていないために表示されるものなので、sample.csvファイルを読み込むと問題なく可視化できます。
AVS Support Center, fns-avssup@cs.jp.fujitsu.com