概要DrawはRedにおけるダイアレクト(DSL)の1つです。Drawを使用することで、宣言的な方法で二次元の描画処理を実現できます。描画内容はblockを用いた連続したコマンドのリストとして表現され、自由に組み合わせたり、実行時に変更したりすることができます。参照してください)によって、Viewフェイスの中に描画されます。Drawコマンドコマンドは描画に関する指示や設定です。モードがセットされた場合、現在のDrawセッションが終了するか、再度モードが変更されるまで、全ての後続の処理に影響します。ほとんどのDrawコマンドは座標の指定を必要とします。座標系の始点は以下の方式を採ります。X座標:ディスプレイの左から右に行くに従って増加します。Y座標:ディスプレイの上から下に行くに従って増加します。いくつかの描画コマンドは長さの指定を必要とします。長さはピクセル単位で指定します。(pair!).説明2つの点の間に線を描画します。3つ以上の点が指定された場合、各点を結ぶように線が描画されます。(pair!)NOTE:頂点は2つの線が交わる点です。指定された3点を頂点とする三角形を描画します。指定されたtop-left(第1引数)、bottom-right(第2引数)を元に矩形を描画します。角を丸く描画したい場合は、radiusで弧の半径を指定することができます。指定された頂点を元に多角形を描画します。開始点を最後の点として指定する必要はありません。従って、最低限指定する必要がある点は3つになります。指定されたcenter(中心点)とradius(半径)を元に円を描画します。引数が3つの場合、円を歪ませて楕円にすることができます。第2引数と第3引数がそれぞれX軸、Y軸に対する半径の長さになり、それに合うように楕円が描かれます。指定された矩形の中に納まるように楕円を描画します。引数はX軸とY軸に対する楕円の直径を指定します。楕円モードに比べ、矩形を基準として簡潔な方法を提供します。指定されたcenterとradiusの値で円弧を描画します。弧は2つの角度で定義されます。キーワードを指定すると、中心点から2本の線を引いて、閉じた弧にすることができます。(pair!)説明3つまたは4つの点からベジェ曲線を描画します。3点の場合:2つの終点、1つの制御点で描画します。4点の場合:2つの終点、2つの制御点で描画します。4点を使用した場合、より複雑な曲線を作ることができます。一連の点を元にB-スプライン曲線を描画します。曲線を描くためには少なくとも3点が必要になります。キーワードを指定すると、終点と始点が結ばれ、閉じた曲線になります。点を2つにすることは許容されますが、その場合描画結果は直線になります。指定された位置、幅の情報を元にイメージを描画します。colorを指定した場合、透過処理に使用されます。NOTE:4点を指定するモードは未実装です。実装された際には、任意の4点を元に画像をストレッチさせられるようになります。指定するモードは未実装です。現在のフォントを使用して指定された座標にテキストを描画します。colorが使用されます。word!)説明テキストの描画のために使用するフォントを選択します。データ型のクローンです。Penこのコマンドは他のコマンドの線の描画モードを定義します。多くの異なるオプションが指定可能で、シンプルに色で指定したり、ネストしたカスタムのシェイプやグラデーションを指定することもできます。描画処理に使用される色を選択します。すべてのシェイプはpenが「off」にセットされるまで、このコマンドで選択された色で描画されるようになります。描画処理で使用されるリニアグラデーションを設定します。スプレッド方式として次の値を指定可能です。「pad」、「repeat」、「reflect」(現在のところWindows上では「pad」と「repeat」は同じになります)startとendが指定された場合、グラデーションのペイントされるラインが定義されます。指定されなかった場合、現在描画しているシェイプ内に水平方向のラインでグラデーションがペイントされます。描画処理に使用されるラジアルグラデーションを設定します。塗りつぶし方式(spread)には次の値を使用することができます。「pad」「repeat」「reflect」(現在のところWindows上では「pad」は「repeat」と同じになります)。ラジアルグラデーションは焦点(focal)から、円(center)と半径(raius)によって定義される円の境界に向かって塗りつぶされます。最初の色は焦点で使われ、最後の色は円の境界部分で使われます。描画処理に使用されるダイアモンド型のグラデーションを設定します。塗りつぶし方式(spread)には次の値を使用できます。「pad」「repeat」「reflect」(現在のところWindows情では「pad」は「repeat」と同じになります)。ダイアモンドグラデーションは焦点(focal)から上角(upper)と下角(lower)で定義された矩形の境界に向かって塗りつぶされます。最初の色は焦点で使われ、最後の色は矩形の境界部分で使われます。描画処理でパターンとして使うための独自のShapeを設定します。タイルモード(mode)には次の値を使用することができます。描画処理でパターンとして使うためのイメージを設定します。タイルモード(mode)には次の値を使用することができます。endのデフォルト値はイメージのサイズです。後続のコマンドにおける外周の描画を停止します。Fill-penこのコマンドは(閉じた形状のShapeにおける)塗りつぶし処理が必要な他のコマンドのために塗りつぶしモードを定義します。シンプルな色の指定から、ネストしたカスタムシェイプやグラデーションまで様々なオプションを使用できます。塗りつぶし処理に使用される色を選択します。すべての閉じた図形はfill-penが「off」に設定されるまで選択された色で塗りつぶしされます。塗りつぶし処理に使用されるリニアグラデーションを設定します。塗りつぶし方式(spread)には次の値を使用できます。「pad」「repeat」「reflect」(現在のところWindows情では「pad」は「repeat」と同じになります)。startとendが指定された場合、グラデーションのペイントされるラインが定義されます。指定されなかった場合、現在描画しているシェイプ内に水平方向のラインでグラデーションがペイントされます。塗りつぶし処理のためのラジアルグラデーションを設定します。塗りつぶし方式(spread)には次の値を使用できます。「pad」「repeat」「reflect」(現在のところWindows情では「pad」は「repeat」と同じになります)。ラジアルグラデーションは焦点(focal)から、円(center)と半径(raius)によって定義される円の境界に向かって塗りつぶされます。最初の色は焦点で使われ、最後の色は円の境界部分で使われます。塗りつぶし処理で使用するダイアモンド型のグラデーションを設定します。塗りつぶし方式(spread)には次の値を使用できます。「pad」「repeat」「reflect」(現在のところWindows情では「pad」は「repeat」と同じになります)。ダイアモンドグラデーションは焦点(focal)から上角(upper)と下角(lower)で定義された矩形の境界に向かって塗りつぶされます。最初の色は焦点で使われ、最後の色は矩形の境界部分で使われます。塗りつぶし処理でパターンとして使用するカスタムシェイプを設定します。タイルモード(mode)には次の値を使用することができます。塗りつぶし処理でパターンとして使用するイメージを設定します。タイルモード(mode)には次の値を使用することができます。endのデフォルト値はイメージのサイズです。後続のコマンドにおける塗りつぶし処理を停止します。(integer!)説明ラインの描画における幅を新しく指定します。(word!)説明ラインの連結モードを新たに指定します。以下の値を指定できます。(word!).説明ラインの描画の際の終端のキャップモードを新しく指定します。以下の値が指定できます。後続のDrawコマンドにおけるアンチエイリアスモードのオン、オフを切り替えます。アンチエイリアスを使用するとより綺麗に描画が行えますが、パフォーマンスは劣化します。行列の乗算を実行します。現在の変換行列は渡された行列によって先乗算(pre-multiplied)されたものになります。ブロックは6つの数字(number!)を含んでいる必要があります。f]ブロックの値は内部的に以下の変換マトリックスを構築するために使用されます。後続の行列処理において、新しい行列が現在の行列に対して前方乗算(prepend)で処理されるか、後方乗算(append、デフォルトのモードです)で処理されるかを設定します。現在の変換行列を単位行列にリセットします。現在の変換行列に代数的行列反転を適用します。現在の状態(変換、領域の切り出し、ペンの設定)をスタックに保存します。これにより、PUSHコマンドブロック内で現在の変換行列、ペンなどを変更することが可能になります。PUSHコマンドブロックが終わると、スタックから現在の状態を復元されます。PUSHコマンドはネストさせることができます。指定された位置、角度で時計回りに回転を行います。指定されていない場合、現在の座標系の起点を元に回転が行われます。マイナス値を指定した場合、反時計回りの回転になります。ブロックが最後の引数として渡された場合、回転はブロックで渡されたコマンドにだけ適用されます。「pen」または「fill-pen」wordが使用された場合、回転は現在のpenやfill-penそれぞれに対して適用されます。:(省略可能)Drawダイアレクトコマンド説明スケールする量をセットします。値は掛け算されるため、スケールを増加させる場合は1以上、減少させる場合は1未満の値を指定してください。ブロックが最後の引数として渡された場合、スケーリングはブロックで渡されたコマンドにだけ適用されます。「pen」または「fill-pen」wordが使用された場合、スケーリングは現在のpenやfill-penそれぞれに対して適用されます。描画コマンドの起点をセットします。複数回使用すると、効果は累積します。ブロックが最後の引数として渡された場合、移動はブロックで渡されたコマンドにだけ適用されます。「pen」または「fill-pen」wordが使用された場合、スケーリングは現在のpenやfill-penそれぞれに対して適用されます。座標系を指定された角度傾けます。指定されていない場合、0として扱われます。ブロックが最後の引数として渡された場合、傾きはブロックで渡されたコマンドにだけ適用されます。「pen」または「fill-pen」wordが使用された場合、スケーリングは現在のpenやfill-penそれぞれに対して適用されます。移動、スケーリング、回転といった画像変換を行います。ブロックが最後の引数として渡された場合、画像変換はブロックで渡されたコマンドにだけ適用されます。Shapeダイアレクトコマンド説明2つの点(startとend)で定義される矩形の切り取り領域か、Shapeコマンドのブロックによって定義される任意の形の領域を定義します。この切り取りは後続のすべてのDrawコマンドに適用されます。ブロックが最後の引数として渡された場合、切り取りはブロックで渡されたコマンドにだけ適用されます。新しい切り取り領域と前の領域を合成するモードとして、次の値のいずれかを設定できます。「shape」キーワードはDrawコマンドのサブダイアレクトであるShapeダイアレクトへのアクセスを提供します。この描画用のダイアレクトの具体的な機能は以下です。描画時のペンの位置を描画処理とは独立して移動させることができます。各々の描画コマンドは現在のペン位置からスタートします。シェイプは自動的に閉じた形になります(最初の位置へ戻る最後の線を指定する必要はありません)。生成されたシェイプは「fill-pen」によってシンプルな塗りつぶしや、もっと凝った塗りつぶしを行うことができます。座標は(Drawのように)絶対座標を使用するか、最後のペン位置に対する相対座標を使用することもできます。Note全ての描画コマンドはデフォルトでは絶対座標を使います。lit-wordでコマンドを指定すると、相対座標で動作するコマンドに切り替わります。(pair!)説明ペンの位置を新しい位置に移動させます。(pair!)説明2つの点の間に線を描画します。3つ以上の点が指定された場合、各点を結ぶように線が描画されます。(省略可能)弧を正の角の方向で描画します。(省略可能)膨張させた弧を描画します。現在のペンの位置と終点の間で半径(radius)の値を使って円弧を描画します。弧は1つの角度(angle)の値で定義されます。連続した点から3次ベジエ曲線を描画します。描画は現在のペン位置から開始されます。曲線を描くには最低3つの点が必要です(最初の点は開始点が自動的に使われます)。連続した点から滑かな3次ベジエ曲線を描画します。描画は現在のペン位置から開始されます。曲線を描くには最低2つの点が必要です(最初の点は開始点が自動的に選ばれます)。連続した点から滑かな2次ベジエ曲線を描画します。描画は現在のペン位置から開始されます。曲線を描くには最低2つの点が必要です(最初の点は開始点が暗黙的に選ばれます)。現在のペン位置から指定された点までの、滑かな2次ベジエ曲線を描画します。現在のペン位置から水平線を描画します。現在のペン位置から垂直線を描画します。Line-widthDrawダイアレクトと同じです。Line-joinDrawダイアレクトと同じです。Line-capDrawダイアレクトと同じです。PenDrawダイアレクトと同じです。Fill-penDrawダイアレクトと同じです。新しいDrawセッションが開始した場合、以下のデフォルト値が使用されます。サブブロックDrawコードの中で、ブロックを使用することでコマンドを任意にグルーピングすることができます。サブブロック内でもセマンティクスに違いはありません。)のグルーピングを用意にするためのシンタックスシュガーでしかありません。空のブロックは許容されます。行うことができ、Drawブロックの現在の位置を記録し、後でアクセスすることを可能にします。Noteset-wordに先行するDrawブロックの長さが変わった場合、元々の位置は更新されません。そのためset-wordが同じものを参照していない可能性があります。関数によってDrawブロックを直接イメージとして描画することも可能です。指定されたDrawコマンドの内容でイメージに描画を行います。戻り値としてイメージが返されます。非推奨APIFill-penはRebol/Drawとの互換性のためだけに存在する非推奨APIもサポートしています。このAPIは新しいRedのスクリプトでは使用しないでください。塗りつぶし処理に使用されるグラデーションカラーをセットします。グラデーションタイプには次の値を使用できます。「lenear」、「radial」、「diamond」。400x300Noteグラデーションで使用できるのは256色までです。グラフィックスソースコードこのドキュメントで使用されているグラフィックスはRedとDrawダイアレクトで作成されています。そのソースコードが以下です。(Redコンソールにコピーペーストすることで試したり、遊んだり、改善したりしてみてください。