例題プログラムの解説
1 | PROCEDURE TEST; | プログラムの宣言をしています。 「TEST」という名前を付けていますが、識別子の ルールに従って好きな名前を付ける事ができます。 |
2 | VAR | メインプログラムで変数を使うために、変数宣言をしています。 宣言した次の行から、変数と型を列記しています。 このプログラムでは全部で5つの変数を使っています。 |
3 | index:INTEGER; | 最初の変数は「index」と名付けました。 この変数はVectorworksの色番号を格納するために使います。 色番号は0〜255迄の値なのでINTEGER型の変数として宣言しています。 |
4 | red,green,blue:LONGINT; | 次はred,Green,blueという名前の変数をLONGINT型の変数として宣言しています。 red,Green,blueにはそれぞれ赤、緑、青の色成分が入ります。 値は0から65535までの値が入るのでLONGINT型で宣言しています。 INTEGER型では-32768〜32767迄の範囲しか扱えないからです。 |
5 | radius:REAL; | 最後の変数はradiusです。 この変数は円の半径を格納するためのものです。 円の半径は実数として扱いたいのでREAL型の変数として宣言しています。 |
6 | BEGIN | BEGIN文により、メインプログラムが始まります。 コマンドパレット上のコマンドをダブルクリックするとまずこの行から実行されます。 |
7 | radius:=100; | 変数radiusに「100」を格納します。 radiusは円の半径なので最初に描かれる円の半径を100mmにセットしています。 これをプログラミング用語で「変数を初期化する」と言います。 変数は最初にどんな値が入っているかわかりません。 「0」が必ずはいっている保証もありません。 「0」から始まるプログラムでも、初期化を忘れないで下さい。 |
8 | FOR index:=1 TO 10 DO | FORループの始まりです。 indexの値は1から始まり10になるまで9行目〜14行目の間をループします。 一回ループするごとにindexの値は1ずつ増えます。 |
9 | BEGIN | ループする文が複数行ある場合はFORループ文に続く文を BEGINとENDでくくります。 |
10 | ColorIndexToRGB(index,red,green,blue); | 手続きColorIndexToRGBを呼び出しています。これが組み込み手続きです。 VectorScriptが持っているサブルーチンと考えてよいでしょう。 手続きColorIndexToRGBはカラーパレットの色番号をパラメータとして与えると その番号が示す色の成分(赤、緑、青)を0から65535までの値を返します。 |
11 | FillBack(red,green,blue); | 手続きFillBackは以降の行で描かれる図形の面の色を パラメータで与えたRGB値で設定します。 この行では変数red,green,blueをパラメータとして与え色を設定しています。 |
12 | Oval(-radius,radius,radius,-radius); | 手続きOvalはパラメータで指定した座標に円を作成します。 手続きOvalのパラメータは左上のX座標、左上のY座標、右下のX座標、右下のY座標の順番で与えます。 ここでは半径(radius)をパラメータとして与えています。 VectorScriptで扱うXY座標は下図のように原点を中心として右上が+、左下が-の値になります。 |
13 | radius:=radius-10; | 変数radiusの値を10減らします。 radiusは円の半径なので次に作図する円の半径を10mm小さくしています。 |
14 | END; | FORループのBEGIN文に対するEND文です。 ループ中はカウンタ(変数index)の値が最大値(10)を超えていないかを判定し 超えていなければ9行目に戻ります。 |
15 | DSelectAll; | 手続きDSelectAllは全ての図形を選択解除にします。 FORループの中で作図した円は全て選択されているので、それらを解除しています。 |
16 | END; | メインプログラムのBEGINに対するENDです。 |
17 | Run(TEST); | 手続きRunを使ってプログラムを実行しています。 パラメータにはプログラム名を与えます。 |
PROCEDURE TEST;
VAR
index:INTEGER;
red,green,blue:LONGINT;
radius:REAL;
BEGIN
radius:=100;
FOR index:=1 TO 10 DO
BEGIN
ColorIndexToRGB(index,red,green,blue);
FillBack(red,green,blue);
Oval(-radius,radius,radius,-radius);
radius:=radius-10;
END;
DSelectAll;
END;
Run(TEST);
上記のプログラムの結果
上記のプログラムの変更
oval → rect に変更
さらに変更
12行目と13行目の間に手続き「Rotate」(回転)を入れて四角形を回転させる。
手続きRotateは選択された図形を指定した角度(今回は10°)で回転させます。
12行目の後に「Rotate」を挿入します。
BEGIN
ColorIndexToRGB(index,red,green,blue);
FillBack(red,green,blue);
rect(-radius,radius,radius,-radius);
Rotate(10); {← 挿入部分}
radius:=radius-10;
END;
四角形の数を増やす
今度は8行目と14行目を書き換えて作図する四角形の数を増やします。
8行目のFORループの最大数を10から20に増やします。
FOR index:=1 TO 20 DO { 10 →20 }
これで作図する四角形の数が20個に増えます。
14行目では変数radiusの減少量を10から5に減らします。
変化量を変えないと、ループの回数が増えたことにより変数radiusの値がマイナスになってしまうためです。
radius:=radius-5; { 10 →5 }