出力プリミティブのうち, トーンプリミティブ以外はすべて線分で構
成されています. 線分の属性のうち, ラインインデクスには色の情報が含まれ
ています. また, トーンプリミティブには, トーンパターン番号という属性が
あり, やはり色の情報が含まれています.
描かれる線分のラインインデクスは3桁の整数(nnm)で指定します.
線の太さと色の両方が変えられるようなシステムでは, 上位2桁
(nn=0〜99)が色番号, 下位1桁(m=0〜9)が線の太さを表します. (こ
れまでの章では, 下位1桁だけを使ってきました.) 色番号は, 1から5までは標
準的に, 1: 白または黒(フォアグラウンド), 2: 赤, 3: 緑, 4: 青, 5: 黄,
と決められていますが, それより大きな番号に関しては カラーマップファイ
ルの定義によります.
カラーマップファイルとは, 色番号と実際の色を対応づけるデータファイルで
あって, Devモジュールのパラメタ clrmap が示すファイルです. 標準的なライブラリ
においては, X 用として .x11, PS 用として .psx のサフィック
スをつけると, それらが優先的に検索されます. 色はRGBの強さで指定されて
おり, それらの値の範囲は0から65535(16bit)です. 機種によってはこれだけ
の階調が表現できない場合もありますが, 適当な階調に読み変えますから, 異
なるシステムでもこのファイルはそのまま有効です.
トーンパターン番号には色の情報とパターンの情報が両方含まれており, 5桁
の整数(nnlll)で指定します. 上位2桁が上に述べた色番号, 下位3桁がパター
ン番号です. パターン番号は第2.5節で説明しましたが, パター
ン番号として999を指定するとべたぬりとなります.
次の COLOR1 プログラムは, カラーマップのサンプルテーブルを作るプ ログラムです. 38行めでトーンパターン番号を代入していますように, 100色 を描き出します. このように1つの作図では高々100色しかつかえませんが, カ ラーマップファイルを取り替えるとさまざまな色が使えます.
# # color1.rb require "narray" require "numru/advanceddcl" include NumRu::AdvancedDCL include NMath np = 4 nt = 10 dd = 0.07 ds = 0.003 dx = dd+ds*2 dy = 1.0/nt #-- data --- xbox = NArray[0.0, 1.0, 1.0, 0.0] ybox = NArray[0.0, 0.0, 1.0, 1.0] #-- graph --- Dev.maxmsg = 300 Dev.open("X", true) Frame.lfull = true Frame.rat(0.85, 1.0) Frame.mgn(0.0, 0.0, 0.05, 0.1) Page.settitle('TEST OF COLORMAP', 'T', 0.0, -0.5, 0.025, 1) Frame.new Fig.window=[0.0, 1.0, 0.0, 1.0] Fig.transnum = 1 Text.charsize = 0.01 Text.charcent = 1 for j in 0..9 for i in 0..9 x1 = dx*i + ds + (1-dx*nt)/2 y1 = dy*(9-j) + ds x2 = x1 + dd y2 = y1 + dd itpat = (i+j*10)*1000 + 999 Fig.viewport = [x1, x2, y1, y2] Frame.pvpr(1) Tone.tonepat = itpat Tone.fill(xbox, ybox) chr = format("%5d", itpat) Text.vdraw(x2, y2+(dy-dd)/2, chr) end end Dev.closePROGRAM COLOR1