- トップページ
- 書庫
- Context Free for beginners
- シェイプを変形する

プリミティブ・シェイプの形を変えることができれば、作成するイメージのバリエーションも広がります。 プリミティブ・シェイプを変形してみましょう。
startshape Henkei rule Henkei{ SQUARE { s 2 0.5 } }

SQUAREの中カッコ内のsはscaleの略で、シェイプのサイズを変更する命令です。 sに続く最初の数値でx軸のスケール、次でy軸のスケールを指定します。 y軸のスケールが指定されていない場合、最初の数値がx軸とy軸の両方に適用されます。 この例では、正方形をx軸方向に2倍、y軸方向に0.5倍のスケールに変形しますので、描画結果は長方形となるわけです。
startshape Henkei rule Henkei{ SQUARE { s 2 0.5 skew 10 0 } }

長方形に、ゆがみを加えてみました。 skewはシェイプにゆがみを加える命令です。 skewに続く最初の数値でx軸のゆがみの角度、次でy軸のゆがみの角度を指定します。 この例では、長方形をx軸方向に10度ゆがめ、y軸方向にはゆがめません(値がゼロ)ので、横長の平行四辺形になります。
デフォルトの正方形と並べてみましょう。
startshape Henkei rule Henkei{ SQUARE {} SQUARE { x 2 s 2 0.5 skew 10 0 } }

さらに、r(rotate)で回転を加えてみます。
startshape Henkei rule Henkei{ SQUARE {} SQUARE { x 2 s 2 0.5 skew 10 0 r 10 } }

このように、中カッコにシェイプの属性を記述することでシェイプの変形や移動ができますが、こうした属性の記述には2種類の方法があります。 ひとつは、ここまでの例のように、中カッコ({})内に記述する方法、もうひとつは大カッコ([])内に記述する方法です。 中カッコ内に記述する方法では、記述した属性変更がまとめて実行されますが、大カッコ内に記述すると、記述した順番に処理が行われます。
同じコードを大カッコに変えて実行してみましょう。
startshape Henkei rule Henkei{ SQUARE {} SQUARE [ x 2 s 2 0.5 skew 10 0 r 10 ] }

ゆがみも回転も、前のイメージにくらべると控えめになりましたね。 前のコードは中カッコでくくられているので全ての変形が1:1のスケールの正方形に対して適用されるため、形状が大きく変化しました。 これに対して、今度のコードは大カッコでくくられているので属性変更が順番に行われます。 まず、xの位置変更を行い、次にスケールを2:0.5に変更し、スケール変更された四角形に対してゆがみを加え、スケール変更とゆがみが加えられた四角形を回転させたので、変化が少なかったのです。
大カッコを使って前と同じ形にするには、変形の順番変更とskew値の変更を加えた以下のコードにする必要があります。
startshape Henkei rule Henkei{ SQUARE {} SQUARE [ x 2 r 10 skew 35 0 s 2 0.5 ] }できるようになった(はずの)こと
- シェイプのスケールを変更して描画できる
- シェイプにゆがみを適用して描画できる
- 移動や変形の順番を変えてシェイプを描画できる