リニアングラフ2Dは、プログラミング言語VCSSLによる制御をサポートしています。 うまく活用すると、連番ファイルを自動処理でプロットさせたり、読み込んだデータを変換(加工)してプロットさせる事などができます。
VCSSLは、日常計算から3次元コンピューターグラフィックスまでを幅広くカバーするプログラミング言語です。C言語系のシンプルな文法を採用しており、容易に習得する事ができます。
VCSSLのランタイムは、リニアングラフ2Dに同梱されており、リニアングラフ2Dの「 プログラム / Program 」メニューから手軽に利用する事ができます。
VCSSLはスクリプト言語なので、プログラムは一般のテキストエディタで記述し、拡張子「.vcssl」を付けて保存するだけで作成できます。 作ったプログラムは、リニアングラフ2Dのメニューバーにある、「 プログラム / Program 」 メニューから選択実行できます。
なお、便利なプログラムを作成した場合、「 RinearnGraph2DProgram 」フォルダに入れておくと、 「 プログラム / Program 」メニューに表示され、すぐに実行できるようになります。
VCSSLからリニアングラフ2Dを制御するには、tool.Graph2D APIを使用します。 ここではGraph2D APIの一部の機能のみを使用します。全機能を参照するには、下記URLをご参照ください。
以下は座標値データファイル「 test.tsv 」をプロットする、最も単純なプログラムです。 なお、「//」で始まる行はコメントであり、処理の際には読み飛ばされます。
//リニアングラフ2Dを制御するライブラリをインポート
import tool.Graph2D;
//リニアングラフ2Dを起動( x位置, y位置, 幅, 高さ, タイトル )
int graph = newGraph2D( 0, 0, 700, 700, "Graph" ) ;
//座標値データファイル「 test.tsv 」をプロットする
setGraph2DFile( graph, "test.tsv" );
code/Launch.vcssl
続いて、点プロットオプションを無効にし、線プロットオプションのみを有効にするプログラムです。
import tool.Graph2D;
int graph = newGraph2D( 0, 0, 700, 700, "Graph" ) ;
setGraph2DFile( graph, "test.tsv" );
//点プロットを無効にする
setGraph2DOption( graph, "WITH_POINTS", false );
//線プロットを有効にする
setGraph2DOption( graph, "WITH_LINES", true );
code/Option.vcssl
以下はグラフを画像ファイル「test.png」に出力するプログラムです。
import tool.Graph2D;
int graph = newGraph2D( 0, 0, 700, 700, "Graph" ) ;
setGraph2DFile( graph, "test.tsv" );
//グラフを画像ファイル「 test.png 」に出力( グラフID, 画像ファイル名, 画像形式 )
exportGraph2D( graph, "test.png", "PNG" );
code/Export.vcssl
続いて応用です。VCSSLプログラムから見て「test」フォルダの中にある、連番の座標値データファイル「test0.tsv」〜「test100.tsv」を次々とプロットし、 画像ファイル「test0.png」〜「test100.png」に出力していくプログラムです。
import tool.Graph2D;
int graph = newGraph2D( 0, 0, 700, 700, "Graph" ) ;
//変数iを1から100まで変更しながらループ
for( int i=0; i<=100; i++ ){
setGraph2DFile( graph, "./test/test"+i+".tsv" );
exportGraph2D( graph, "./test/test" + i + ".png", "PNG" );
//100ミリ秒スリープ(アニメーションウェイト)
sleep( 100 );
}
code/Serial.vcssl
最後に、座標値データファイル「test.tsv」を読み込み、Y値をsin( Y値 )に変換した上でプロットするプログラムです。最初に、「test.tsv」が空白改行を含む場合を扱います。
import tool.Graph2D;
import Math;
// 座標値データファイル「test.tsv」を、TSV形式の読み込みモードで開く
int file = open( "test.tsv", READ_TSV );
// ファイル行数を取得
int lineN = countln( file );
double value[]; // 1行のX、Y値を控える数値配列
string newData = ""; // 新しいデータを控える文字列変数
for( int i=0; i<lineN; i++ ){
value = readln( file ); //1行のデータを配列で取得し、次の行へ
if( length(value,0) == 0 ){
//空白行はそのまま改行 (EOLはシステムによって定義されている改行コード値)
newData += EOL;
}else{
//空白でない行はY値をsin(Y値)に変換して書き出し、改行
newData += value[0] + " " + sin( value[1] ) + EOL;
}
}
//ファイルアクセスを閉じる
close( file );
int graph = newGraph2D( 0, 0, 700, 700, "Graph" );
//変換後の文字列データからグラフにプロット
setGraph2DData( graph, newData );
code/Transform.vcssl
上述のプログラムは、文字列の結合処理を伴うために低速です。test.tsvが空白改行を含まない場合は、以下のように数値の配列を直接リニアングラフ2Dへ転送する方が、はるかに高速です。
import tool.Graph2D;
import Math; //sin新関数を使用するのに必要
// 座標値データファイル「test.tsv」を、TSV形式の読み込みモードで開く
int file = open( "test.tsv", READ_TSV );
// ファイル行数を取得
int lineN = countln( file );
double value[ ]; // 1行のX、Y、Z値を控える数値配列
double x[lineN]; // 全行のX値を控える数値配列
double y[lineN]; // 全行のX値を控える数値配列
for( int i=0; i<lineN; i++ ){
//1行のデータを配列で取得し、次の行へ
value = readln( file );
x[i] = value[0];
y[i] = sin( value[1] ); // Y値はsin(Y値)に変換
}
//ファイルアクセスを閉じる
close( file );
int graph = newGraph2D( 0, 0, 700, 700, "Graph" );
//変換後の数値データ配列からグラフにプロット
setGraph2DData( graph, x, y );
code/TransformFast.vcssl
今度の処理は非常に高速で、起動とほぼ同時に変換が完了します。