パターン

FillPathStrokePath、及びShowString等の演算子が ページの領域を現在色を用いて描画するとき,それらの演算子は,通常,その領域を 一様に覆う単一の色を適用する。 しかし,場合によっては,単純な色の代わりに,繰り返し図形から構成される 論理的なインクを適用することが要求される。 repeating figure|繰り返し図形|n|S 32|t このような繰り返し図形を,パターンとよぶ。 この節では,パターンの生成及び利用について述べる。

パターンの生成及び利用

パターン付きの描画とは,小さなグラフィック図形(パターンセルと よばれる。)を,描画すべき領域を覆うように x軸及び y軸の両方向に対して一定の 周期で繰り返して置く,又はタイル貼りすることを意味する。 パターンセルの外観は,任意の手続きによって定義され,塗りつぶ(潰)し領域, テキスト及びサンプルラスタ図形画像のような図形要素を含むことができる。 パターンセルの形状は,必ずしもく(矩)形である必要はなく, タイル間の間隔は,パターンセルの大きさと異なっていてもよい。 パターンは,波型,ブロック塀,及びそれに類する幾何学模様のような, 様々な図形によるテクスチャを作成する目的で使うことができる。 geometrical tilings|幾何学模様|n|S 32.1|t どのような実装においても,文書が装置ピクセル空間に アクセスしたり,又はそれを関知することは通常はないが,パターンに対する タイル貼りの機構及び文書中で使うことができる関連する制御を記述する ために,この節では,装置ピクセル空間に言及する必要がある。

パターン付きの描画は,次の四つのステップからなる手続きとする。

パターン辞書

パターン辞書は,次に示すものを定義する。

パターンセルは,独自の座標系である,パターン座標系の中で記述される。 パターン座標系は,MakePattern演算子のTransformationオペランドを, MakePatternが実行された時点のCurrentTransformationと 連結したものとする。 タイル貼り及びクリッピングのパラメタは,パターン座標系の中で解釈される。 パターンセルを描画する手続きも,その座標系の中で実行される。

32.2.1から32.2.8まででは,パターン辞書に必す(須)のキーと値との対について規定する。 パターン辞書には,PaintProcで必要となる他の(定数)情報を 格納することもできる。 Implementationを除くすべてのキーと値との対は,パターン辞書中に出現する ことができる。この辞書への参照がMakePattern演算子のオペランドになる。

PaintType

必す(須)のキーと値との対<PaintType: 非負整数>は,パターンセルの色を どのように指定するかを決める。 . ]]> PaintTypeに指定できる値は,に示すとおりとする。 ValuePaintType ]]> PaintType 1Colored pattern. ]]> 1色付きパターン。 PaintProc自体が,色空間,及びパターンセルの描画に使用する色を 指定する。 PaintProcは,作画演算子を実行する前に,色空間を選択しなければ ならない。 2Mask pattern. ]]> 2マスクパターン。 PaintProcは,色空間又は色情報を一切指定せず,代わりに, パターンが利用される度毎に パターンセル全体が別に指定された色で描画される。 つまり,PaintProcは,現在色が塗られるマスクを記述する。 ), the SetTransfer operator, the SetPatternColor operator, or the ImageRasterElement operator. ]]> PaintProcは,色に関する演算子(これはで定義するすべての演算子を含む), SetTransfer演算子,SetPatternColor 演算子及びImageRasterElement演算子のいずれをも実行してはならない。 ただし,MaskBitMap演算子は,色情報を指定するものではないので, 使用してもよい。

PaintProc

必す(須)のキーと値との対<PaintProc: 手続き>は,パターンセルを描画する ために使用する手続きを指定する。 PaintProcは,次に示す1個のオペランドをとり,結果を返さない。

  • <PatternDict: 辞書参照> ここで,PatternDictは,PaintProcを含むパターン辞書への参照 とする。 PaintProcの実行の効果は,単一のパターンセルを描画することとする。

    PaintProcが実行される作図状態は,MakePattern演算子の 実行によってパターンが実現化された時点の作図状態とし, その時点におけるCurrentTransformationMakePattern演算子に 渡されたTransformationオペランドを連結したものを含んでいる。

    PaintProcImageRasterElement演算子又はMaskBitMap 演算子を実行する場合,その操作の前提となるデータソースは, DataSource::Documentであってはならない。 前提となるデータソースが外部のデータソースから導かれるストリームオブジェクト の場合,PaintProc内でストリームオブジェクトを取得するために FindResource演算子が実行されなければならない。 実装によっては,最近使われたパターンセルのキャッシュを管理 することで実行を最適化することも考えられるので,PaintProcは, 予測できない文脈において,予測できない回数実行されることもある。

    したがって,PaintProcは,SystemDictの中の演算子及び PatternDictオペランドの内容だけに依存すべきであり,常に同じ結果を 生じるべきである。 . ]]> PaintProcが実行してよい演算子に対する, そのほかの制限については,におけるPaintTypeの記述を参照。

    BBox

    必す(須)のキーと値との対<BBox: ベクタ参照>は,各要素が数値型の 4要素のベクタに対する参照とし, パターンセルの境界く(矩)形領域をパターンセル座標系で測った値で指定する。 この境界く(矩)形領域は,パターンセルをクリップするために利用される。 このベクタの四つの要素は,それぞれ,次に示す境界く(矩)形領域の 左下のx座標,左下のy座標,右上のx座標及び右上のy座標を示す。

  • [llx lly urx ury]

    XStep

    必す(須)のキーと値との対<XStep: 数>は,パターンセル間の水平方向の 間隔を,パターンセル座標系で測った値で指定する。 XStep及びYStepの値は,キーと値との対BBoxに よって暗黙に指定されるパターンセルの寸法と異なっていてもよい。 これによって,変則的な図形を用いたタイル貼りが可能になる。

    YStep

    必す(須)のキーと値との対<YStep: 数>は,パターンセル間の垂直方向の 間隔を,パターンセル座標系で測った値で指定する。 XStep及びYStepの値は,キーと値との対BBoxに よって暗黙に指定されるパターンセルの寸法と異なっていてもよい。 これによって,変則的な図形を用いたタイル貼りが可能になる。

    Tiling

    タイル貼り中のパターンセルの配置は,ある一つのキーとなるパターンセルの 位置に従って決まり,その後,パターンセルを繰り返すためにこの位置が XStep及びYStepの倍数で置き換えられる。 キーとなるパターンセルの原点は,MakePattern演算子の TransformationオペランドをMakePatternが実行された時点の CurrentTransformationと連結することで定義される座標系の原点と一致する。 このようにして,タイル貼りの位相は,Transformationオペランドの 変換成分によって制御することができる。 このタイル貼りは,固定とする。すなわち,MakePatternによって 生成されるパターン辞書が描画に用いられるときは,途中で CurrentTransformationが変更されたとしても,常に同じタイル貼りが 用いられる。 Tilingに関するキーと値との対の記述がないため,原文がおかしいと思います。

    TilingType

    必す(須)のキーと値との対<TilingType: 非負整数> は,このタイル貼りを 装置ピクセルの格子点に量子化するための調整を制御する。 . ]]> TilingTypeに指定できる値は,に示すとおり。 ValueTilingType ]]> TilingType 1Constant spacing. ]]> 1一定間隔。 つまり,装置ピクセルの倍数となる一定の間隔で置かれる。 この結果を得るために,MakePattern演算子は,XStep, YStep及びMakePatternTransformationオペランドを 若干調整して,パターンを若干歪ませる可能性がある。 歪みの総量が1装置ピクセルを越えないものとする。 2No distortion. ]]> 2歪みなし。 しかし,パターンが描画される時にパターンセル間の 間隔が,x軸及びy軸の両方向で最大 1装置ピクセル分変化することがある。 これは,XStep及びYStepで要求された間隔を,個々の パターンセルに対してではなく,平均的にとることで行われる。 3Constant spacing and faster tiling. ]]> 3間隔一定・高速タイル貼り。 TilingType 1と同様とするが,より効率的な実装を可能とするために, さらに大きな歪みが許される。 許される歪みの総量は,実装に依存する。

    Implementation

    キーと値との対<Implementation: 任意>は,MakePattern演算子に よってパターン辞書に追加される。 これは,実装が,適切なタイル貼りや,場合によっては キャッシュを行うために助けとなる情報を格納するために利用することを 意図している。 このキーと値との対のとりうる型及び値は,実装に依存する。 MakePattern演算子に渡されるパターン辞書中にこのキーがある場合, その値は,MakePattern演算子によって上書きされてもよい。

    パターンの意味

    SetPatternColor演算子に必要なオペランドの個数及び種類は, 使用するパターンの型(色付き又はマスク)に依存する。 and , respectively. ]]> それぞれのパターンの型に対するSetPatternColor演算子の意味は, 及びで規定する。

    色付きパターン

    色付きパターンは,パターンの色をそれ自身が含んでいる。 パターンセルの描画の中で,PaintProcは,描画するすべての 図形要素の色を明示的に設定する。 1個のパターンセルは,異なる色で描画される要素を含むことができ,また, サンプリングされた白黒多階調又はカラーの画像を含むこともできる。

    色付きパターンを選択するためにSetPatternColor演算子が必要 とするオペランドは,次のとおりとする。

  • <PatternDict: 辞書参照> ここで,PatternDictは,PaintTypeが1であるパターン辞書に対して, MakePattern演算子を実行することによって得られるパターン辞書に対する 参照とする。

    マスクパターン

    マスクパターンは,固有の色をもたず,パターンが利用される際に必ず別に 色が指定されなければならない。 これによって,ページ上の異なる領域を,同じ形状で異なる色のパターンセル でタイル貼りすることができる。 このパターンのPaintProcは,いかなる色も明示的に指定することは なく,サンプリングされたグレースケール又はカラーの画像を含む こともできない(ただし,MaskBitMap演算子は使用してもよい。)。

    マスクパターン及びそれを描画するためのカラーを選択するために SetPatternColor演算子が必要とするオペランドは,次のとおりとする。

  • <PatternDict: 辞書参照>
  • <compn: 任意型>
  • . . .
  • <comp1: 任意型> ここで,PatternDictは,MakePattern演算子を実行して得られる PaintTypeが2のパターン辞書, 残りのオペランドは,前提となる色空間の中でパターンを描画するために 用いられる色を選択するための適切な成分とする。 ここで,前提となる色空間とは,(現在の実行文脈において,最後に実行された SetColorSpace演算子によって指定された) CurrentColorSpace 作図状態変数の値で示される色空間とする。 SetPatternColor演算子の後でSetColorSpace演算子を実行すると, CurrentColorSpaceを変更するとともに,現在のパターンを取り除いて CurrentColorを初期化する。

    内容中で使用するパターン辞書のひな(雛)形の取得

    MakePattern演算子に対するオペランドとして使用するパターン辞書に対する 参照は,FindResource演算子の実行を通じて取得する。 FindResource演算子は,オペランドとして内部資源識別子の値を とり,パターン辞書に対する参照を返す。 内部資源識別子の値は,資源宣言による構造の中で, あらかじめパターン資源に結び付けられている。 FindResource演算子は、 必要とするキーと値との対の有無,及び正しい型であることを保証するための パターン辞書の検査を行わない。 この機能は,MakePattern演算子によって実行される。

    演算子

    . In addition to these operator-specific exceptions, there are generic exceptions which may be raised during the interpretation of almost any operator. These generic exceptions and their semantics are described in . ]]> これらの演算子及びその意味に関する規定は,演算子を解釈した結果 として内容例外を発生させうる条件についての規定を含む。 内容例外及び例外処理はで規定する。 これら演算子固有の例外に加えて,ほとんどどの演算子の解釈時にも 発生しうる共通的な例外がある。 これらの共通例外及びその意味は,で規定する。

    MakePattern

    MakePattern演算子は,次に示す2個のオペランドをとる。

  • <T: 座標変換>
  • <PatternDictionary: 辞書参照>

    次に示す1個の結果を返す。

  • <NewPatternDict: 辞書参照>

    ここで,PatternDictionaryは,FindResource演算子の実行を 通じて取得される。 PatternDictionaryFindResource演算子の実行の結果得られた 辞書に対する参照でない場合には,UndefinedResourceをオペランドとして RaiseErrorが実行されるものとする。 必す(須)のキーと値との対の集合が検査される。 いずれかのキーが欠けている場合,UndefinedKeyをオペランドとして RaiseErrorが実行されるものとする。 キーは存在するが,値が誤った型に結び付けられている場合, TypeCheckをオペランドとしてRaiseErrorが実行されるものとする。 キーは存在しその型は正しいが,結び付けられた値が範囲外である場合, RangeCheckをオペランドとしてRaiseErrorが実行されるものとする。

    パターン座標系は,現在のグラフィック状態から,次の手順で形成される。

    • オペランドTは,現在の作図状態における CurrentTransformationの複製と連結される。 この結果得られる座標変換は,PatternDictionaryの中で 指定されたTilingTypeに従って,与えられた大きさのパターンセルで 装置ピクセル空間を適切にタイル貼りできるように調整される。
    • CurrentPathは,NewPath演算子を実行したときと同じく, 空パスに設定される。
    • CurrentClippingRegionは,パターンセルの境界く(矩)形領域 (PatternDictionaryの中のキーと値との対BBoxによっ て定義される。)に よって置き換えられる。
    この記述は,MakePattern演算子の意味を規定することだけを 目的としており,実装上どのようにしてパターンに対する意味を満たすかを 規定するものではない。

    MakePatternは,PatternDictionaryの新たな複製を作成し, キーと値との対Implementationを付加し,辞書のアクセス属性を少なくとも ReadOnlyまで引き下げて,それをオペランドスタックに積む。 実装によっては,MakePattern演算子が辞書の内容をさらに変更する 場合があるので,引き続く内容によって辞書の内容が変更されることを防ぐために アクセス属性の引き下げが行われる。 辞書に対して,引き続き行われるいかなるアクセス(SetPatternColorの 実行を通じたアクセスを除く。)も許さない実装の場合,辞書のアクセス属性を ExecuteOnlyにまで引き下げてもよい。

    SetPatternColor

    and . ]]> SetPatternColor演算子に必要なオペランドの個数及び性質は, 設定されているパターンの型(色付き又はマスク)に依存する。 これらのオペランドは,及びで規定する。 SetPatternColor演算子は,結果を返さない。 ]]> SetPatternColor演算子を実行すると,34.6.4で述べるとおり 作図状態変数CurrentColorの値が設定される。

    SetPatternColor演算子のパターン辞書オペランドに、必要とするキーと値との対が存在しない場合,UndefinedKeyをオペランドとしてRaiseErrorが 実行されるものとする。