研究開発

「はじめてのVectorScript」と題して連載を始めるわけですが、本連載は「Vectorworksは持っているけどVectorScriptって何?」、「プログラミングって難しいんでしょ?」「アイデアはあるんだけど...」という人が「それ、VectorScriptでやれば簡単だよね」と言えるくらいになるのが目標です。

VectorworksはMacintosh版とWindows版とのマルチプラットホーム環境でありながらも、VectorScriptはOSを意識することのなくプログラミングが可能で、どちらでプログラミングしてもソースコードの変更なしでMacintosh、Windowsどちらでも実行が可能です。そしてVectorworksを持っていればいますぐにでも始められます。

ゲーム機の場合、DQ7(ソフト)で遊びたいという理由で3DS(ハード)を選ぶと思います。「このソフト(あなたが書いたスクリプト)を使いたいためにVectorworksを選びました」と言わせるようなプログラムを目指してがんばりましょう。自分のアイデアをプログラム化しブログで公開なんてことも夢ではありません。

第8章 図形属性の変更

Vectorworksの図形には様々な属性があります。線でいえば、色、太さ、破線の種類などがあります。

メッセージウインドウがでたら成功です。

では、四角形に色を付けてみましょう。
色を付ける手続きは
手続きSetFillBack(h : HANDLE; colorR, colorG, colorB : LONGINT);
関数LNewObj:HANDLE;
を使います。

SetFillBackは先頭の引数に図形のハンドルを与え、残りの3つでRGBをセットします。
LNewObjは直前に描かれた図形のハンドルを返す関数です。これを直接SetFillBackのハンドルに直接渡します。

Rect( 10, 20, 60, 50 );
SetFillBack( LNewObj, 39321, 26214, 13107 );{ブラウン}

柱状体で色を付けるどうなるでしょう。

BeginXtrd( 0, 30 );
Rect( 10, 20, 60, 50 );
SetFillBack( LNewObj, 39321, 26214, 13107 );
EndXtrd;

FOR文で繰り返すことで、2次元的に展開するとどうでしょう。

PROCEDURE sample;
VAR
ii, jj : INTEGER;
BEGIN
FOR jj := 0 TO 4 DO
BEGIN
FOR ii := 0 TO 8 DO
BEGIN
BeginXtrd( 0+jj*30, 30+jj*30 );
Rect( 10+ii*50, 20, 60+ii*50, 50 );
SetFillBack( LNewObj, 39321, 26214, 13107 );
EndXtrd;
END;
END;
END;
Run( sample );

さらにここで、ある条件にしたがって色を付けたり付けなかったりしてみましょう。
条件分岐をするにはIF文を使います。

IF 条件 THEN
BEGIN
    {条件に対して真の場合の処理}
END
ELSE
BEGIN
   {条件に対して偽の場合の処理}
END;

では、偶数個目の場合に色を付けてみましょう。

PROCEDURE sample;
VAR
ii, jj : INTEGER;
BEGIN
FOR jj := 0 TO 4 DO
BEGIN
FOR ii := 0 TO 8 DO
BEGIN
BeginXtrd( 0+jj*30, 30+jj*30 );
Rect( 10+ii*50, 20, 60+ii*50, 50 );
IF  ii MOD 2 <> 0 THEN
BEGIN
SetFillBack( LNewObj, 39321, 26214, 13107 );
END;
EndXtrd;
END;
END;
END;
Run( sample );

続いて、段数の方でも偶数段目、奇数段目を条件分けしてみましょう。
条件を追加するには、

IF 条件1 THEN
BEGIN
    {条件1に対して真の場合の処理}
END
ELSE IF 条件2 THEN
BEGIN
    {条件2に対して真の場合の処理}
END
ELSE
BEGIN
   {条件1、2に対して偽の場合の処理}
END;
PROCEDURE sample;
VAR
ii, jj : INTEGER;
BEGIN
FOR jj := 0 TO 4 DO
BEGIN
FOR ii := 0 TO 8 DO
BEGIN
BeginXtrd( 0+jj*30, 30+jj*30 );
Rect( 10+ii*50, 20, 60+ii*50, 50 );
IF ( jj MOD 2 = 0 ) AND ( ii MOD 2 <> 0 ) THEN
BEGIN
SetFillBack( LNewObj, 39321, 26214, 13107 );
END
ELSE IF ( jj MOD 2 <> 0 ) AND ( ii MOD 2 = 0 ) THEN
BEGIN
SetFillBack( LNewObj, 39321, 26214, 13107 );
END;
EndXtrd;
END;
END;
END;
Run( sample );

最後に、何段目かによって個数を変えるにはどうすればよいでしょう。

PROCEDURE sample;
VAR
ii, jj : INTEGER;
BEGIN
FOR jj := 0 TO 4 DO
BEGIN
FOR ii := jj TO 8 DO
BEGIN
BeginXtrd( 0+jj*30, 30+jj*30 );
Rect( 10+ii*50, 20, 60+ii*50, 50 );
IF ( jj MOD 2 = 0 ) AND ( ii MOD 2 <> 0 ) THEN
BEGIN
SetFillBack( LNewObj, 39321, 26214, 13107 );
END
ELSE IF ( jj MOD 2 <> 0 ) AND ( ii MOD 2 = 0 ) THEN
BEGIN
SetFillBack( LNewObj, 39321, 26214, 13107 );
END;
EndXtrd;
END;
END;
END;
Run( sample );

VectorScriptに関するお問い合わせ

VectorScriptに関するお問合せは、以下からお問い合せください。

エーアンドエー株式会社 研究開発室

email:develop@aanda.co.jp