GRPH1 の出力プリミティブのうち, トーンプリミティブ以外はすべて線分で構   
成されています. 線分の属性のうち, ラインインデクスには色の情報が含まれ   
ています. また, トーンプリミティブには, トーンパターン番号という属性が   
あり, やはり色の情報が含まれています.   
   
   
   
   
GRPH1 で描かれる線分のラインインデクスは3桁の整数(nnm)で指定します.    
線の太さと色の両方が変えられるようなシステムでは, 上位2桁   
(nn=0〜99)が色番号, 下位1桁(m=0〜9)が線の太さを表します.  (こ   
れまでの章では, 下位1桁だけを使ってきました.) 色番号は, 1から5までは標   
準的に, 1: 白または黒(フォアグラウンド), 2: 赤, 3: 緑, 4: 青, 5: 黄,    
と決められていますが, それより大きな番号に関しては カラーマップファイ   
ルの定義によります.    
   
   
   
   
カラーマップファイルとは, 色番号と実際の色を対応づけるデータファイルで   
あって, 内部変数 'CLRMAP' が示すファイルです. 標準的なライブラリ   
においては, X 用として .x11, PS 用として .psx のサフィック   
スをつけると, それらが優先的に検索されます. 色はRGBの強さで指定されて   
おり, それらの値の範囲は0から65535(16bit)です. 機種によってはこれだけ   
の階調が表現できない場合もありますが, 適当な階調に読み変えますから, 異   
なるシステムでもこのファイルはそのまま有効です.    
   
   
   
   
トーンパターン番号には色の情報とパターンの情報が両方含まれており, 5桁   
の整数(nnlll)で指定します. 上位2桁が上に述べた色番号, 下位3桁がパター   
ン番号です. パターン番号は第3.5節で説明しましたが, パター   
ン番号として999を指定するとべたぬりとなります.   
   
   
   
次の color1 プログラムは, カラーマップのサンプルテーブルを作るプ ログラムです. 38行めでトーンパターン番号を代入していますように, 100色 を描き出します. このように1つの作図では高々100色しかつかえませんが, カ ラーマップファイルを取り替えるとさまざまな色が使えます. dcl-x.x/demo/grph2/rakuraku/color/ にも何種類かのカラーマップファイル を置いています. これをカレントディレクトリにコピーしてカラー描画の実行 ファイルを実行すると, コピーしたカラーマップが使われるようになります. 例えば, それぞれのRGBの値を大きめにシフトさせるとパステルカラー調のカ ラーマップとなります.
# color1.rb
require "narray"
require "numru/dcl"
include NumRu
include Math
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 ---
iws = (ARGV[0] || (puts ' WORKSTATION ID (I)  ? ;'; DCL::sgpwsn; gets)).to_i
DCL::gliset('MAXMSG', 300)
DCL::sgopn(-(iws).abs)
DCL::sglset('LFULL', true)
DCL::slrat(0.85, 1.0)
DCL::slmgn(0.0, 0.0, 0.05, 0.1)
DCL::slsttl('TEST OF COLORMAP', 'T', 0.0, -0.5, 0.025, 1)
DCL::sgfrm
DCL::sgswnd(0.0, 1.0, 0.0, 1.0)
DCL::sgstrn(1)
DCL::sgstxs(0.01)
DCL::sgstxc(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
    DCL::sgsvpt(x1, x2, y1, y2)
    DCL::sgstrf
    DCL::slpvpr(1)
    DCL::sgstnp(itpat)
    DCL::sgtnu(xbox, ybox)
    chr = format("%5d", itpat)
    DCL::sgtxv(x2, y2+(dy-dd)/2, chr)
  end
end
DCL::sgcls
   
  program color1