文字を書く

正規座標系で文字を書く:

ここでは文字を書く例を示す. 文字の位置は通常「文字列の中心」の座標で指定する. 指定した文字の座標と 実際に描画される文字の位置関係をわかりやすくするために, 補助線を引いてその交点の座標を指定して文字を出力している.

正規座標系で文字を出力するにはDclDrawTextNormalizedを使う. まず, ここで注意すべきことは, 文字列の中心が指定した座標になるように出力されることである. これは後述のパラメータで変更可能である. また, 文字の高さはデフォルトで0.05であり, 文字のピッチもそれに等しい.

細かいことであるが, ここでいう文字の高さとは, すべての文字を入れることができる正方形の高さである. つまり, 小文字の g 等の様にベースラインよりも下に伸びる文字もあるので, 大文字を書いた場合には下に少し余白が残ることになる. そのために, 実際の文字の高さは大文字では0.05よりも少し(12-13 %)小さく, また, 文字の中心(文字位置を指定する座標)も大文字の実際の中心よりも 心持ち下になる.

文字のインデクスを変えるには index オプションを使う(2段目). また, 文字の大きさは height オプションによって変えることができる(3段目).

初期状態ではDclDrawTextNormalizedで指定する位置は, 文字列の中心の座標であるが, 文字列の左端の座標や, 右端の座標で指定することもできる. この指定を変えるには, centering オプションを使う(4段目). 文字列を回転させるためには rotate オプションを 用いて指定した位置を中心に反時計回りの角度を指定する(5段目).

添字とギリシャ文字・フォントの変更

| " _ の3文字は添字の制御に使われる. | から " までの文字が上付の添え字として, _ から " までの文字が下付の添え字として出力される(6段目). ここで注意すべきことは, 文字列が添字で終る場合でも, 添字の後に必ず{\tt " }を入れて通常の文字モードに戻すことである. こうしないと, 文字列の長さが正確に求まらず, センタリングや右よせ等の処理がうまくいかない. DclSetParmENABLE_CONTROL_CHAR.false.に すれば, これらの文字も他の文字と同様に文字として出力される.

DCLでは何も指定しなければ文字のピッチは文字の高さと同じになっているが, DclSetParmENABLE_PROPORTIONAL_FONT.true.にすれば, 文字のピッチを文字の幅にあわせる (プロポーショナルフォントの扱いにする)ことができる(7段目).

またDCLは2種類のフォントを持っており, DclSetParmで内部変数IFONTを2とすることによって, フォント番号2の高品位フォントを出力することができる(8段目). この例を見ればわかるように, 高品位フォントは複数の線を引くことで, 線の太さを調節しているため, ラインインデクスで線の太さを変えられる出力装置の場合には, 太い線を指定すると空白が潰れてそれらしい文字になる. また, 当然のことながら高品位フォントを使うと出力量が増えるので, 出力に時間がかかるようになる.

また普通のアルファベットだけでなく, ギリシャ文字や特殊記号のフォントも出力することができる(9段目). これらを出力するには, Fortran90の組み込み関数ACHARを用いて 文字番号を文字に変換し, それをテキストとしてDclDrawText等に渡せばよい. ACHARは ASCII コードを使用する計算機では CHAR関数と同値であり,これを使っても同じ結果が得られるが, EBCDIC コードを使用する計算機ではCHAR関数で正しい文字が得られない. 従って, ACHARを使って文字コードを指定しておけば, どちらのコードを使用する計算機であっても正しい結果が得られる. 文字番号に関しては付表を参照のこと.

ユーザー座標系で文字を書く

ユーザー座標系空間での文字の描画にはDclDrawTextを使う. ユーザー座標系での文字の描画も基本的には正規座標系空間での描画と同じであるが, 文字の大きさは正規座標系で指定するので, ビューポートの大きさが変わっても文字の大きさは変わらないという点が, 線分描画の場合と異なる. クリッピングに関しては文字は線画図形と同じで, DclSetParmを用い内部変数 ENABLE_CLIPPING.TRUE.とした指定が文字に対しても適用される.

text.f90
program text

  use dcl

    call DclOpenGraphics
    call DclNewFrame

    do i=1,9
      call DclDrawLineNormalized( (/0.1,0.9/), (/0.1*i,0.1*i/) )
    end do
    call DclDrawLineNormalized( (/0.5,0.5/), (/0.05,0.95/), type=3 )

! 1段目
    call DclDrawTextNormalized(0.5,0.9,'Test')
! 2段目
    call DclDrawTextNormalized(0.5,0.8,'index3',index=3) ! index 設定
! 3段目
    call DclDrawTextNormalized(0.5,0.7,'SMALL',height=0.03) ! size 設定 (小)
! 4段目
    call DclDrawTextNormalized(0.5,0.6,'Left',centering=-1) ! 左揃え
! 5段目
    call DclDrawTextNormalized(0.5,0.5,'Rotate',angle=20.) ! 回転
! 6段目
    call DclDrawTextNormalized(0.5,0.4,'ABC|sup"XYZ_sub"') ! 上付・下付
! 7段目
    call DclSetParm('ENABLE_PROPORTIONAL_FONT',.true.)!プロポーショナルフォント
    call DclDrawTextNormalized(0.5,0.3,'Proportional',index=2)
! 8段目
    call DclSetParm('IFONT',2)
    call DclDrawTextNormalized(0.5,0.2,'Font2',index=2) ! 高品位フォント
! 9段目
    call DclDrawTextNormalized(0.5,0.1, &
&     achar(152)//achar(153)//achar(154)// & ! ギリシャ小文字
&     achar(145)//achar(151)//achar(148)// & ! ギリシャ大文字
&     achar(189)//achar(217)//achar(218) ) ! 記号

    call DclCloseGraphics

end program



関連リンク

DclDrawText
(SGTXU,SGTXZU)
ユーザー座標系で文字列を描く.
DclDrawTextNormalized
(SGTXV,SGTXZV)
正規座標系で文字列を描く.
DclDrawTextProjected
(SGTXR,SGTXZR)
透視座標系で文字列を描く.
DclSetTextHeight
(SGSTXS)
文字の高さを設定する.
DclSetTextAngle
(SGSTXR)
文字列の角度を設定する.
DclSetTextIndex
(SGSTXI)
文字列のラインインデクスを設定する.
DclSetTextPosition
(SGSTXC)
文字列のセンタリングオプションを設定する.

* 括弧の中は、対応するf77インターフェイス名.