1.7.5 トーンのクリッピングに関する注意

地球流体電脳ライブラリのトーンは通常 (クリッピングされなければ) 指定された境界線が交わっていても, その図形の内側が塗りつぶされる. 正確には, ソフトフィルは Even Odd Rule にしたがって塗りつぶしが行われ, ハードフィルは機種依存であるが, できるだけソフトフィルに近い規則で 塗りつぶされる様になっている.

旧バージョンではハードフィルはクリッピングの対象になっていなかったが, DCL ver.5 からハードフィルもソフト的にクリッピング できるようになった. すなわち, トーンのクリッピングはハードウェアが行うのではなく, 指定された領域とクリッピング範囲が重なる部分を指定する境界点を生成して, そのデータをトーンルーチンに渡すようになっている. このクリップされた境界線を求めるアルゴリズムは, 境界線の向きが決まっていることを前提としている. ここで, 境界線の向きとは境界線を指定する点列を, 時計回りに指定するか, 反時計回りに指定するかということを言う. このアルゴリズムは旧来のトーンの塗りつぶし規則と整合性が悪いが, 地図上 (T 座標系) では境界線の向きがわからないと内側と外側を 判断することができない.

具体的にはトーンをクリッピングする手順は次のようになる.

1.
境界線をクリップして, いくつかの線分に分割する.
2.
切断された線分を接続しなおし, 閉じた境界を生成する. irmode=0 の時, 反時計回り; irmode=1 の時, 時計回り に接続する.
3.
生成された境界線に対して旧来の規則にしたがって塗りつぶしを行う.
クリッピングされない領域に関しては, 旧来の規則がそのまま適用され, irmode は何の意味ももたない. つまり, irmode を適当に指定することで, 境界線の外側を塗りつぶすことができるわけではない.

したがって, 境界線が交わるような図形を塗りつぶす時に, クリッピングを行うのは危険である. クリッピングを行う時は, 安全のために

境界線の向きを決めて, 小さな単純な図形にする
様にしていただきたい.

なお, 図形の外側を塗りつぶしたい時には, その図形が確実にクリッピングされるように領域を2分割し, クリッピング領域 (ビューポート) を設定しなおして, 2度トーンルーチンを呼ぶ.