%表題   基本グラフィックルーチンライブラリ
%
%履歴
%\Drireki{
%         94/02/16 酒井 敏 (map project)
%         94/03/15 塩谷 雅人
%         95/04/14 酒井 敏
%        }
%
\section{サブルーチンのリスト}

\subsection{インターフェイスルーチン}

インターフェイスルーチンは各プリミティブをオープン, 描画, クローズの
3つの手続きに分割したものである. 
複数の点の座標などを指定するポリラインなどは, 座標値を配列で指定する.

\begin{quote}
  \begin{tabular}{ll}
  {\tt SZPLOP(ITYPE,INDEX)} & ポリラインプリミティブの初期化. \\
  {\tt SZPLZc(N,PX,PY)}     & ポリラインプリミティブの描画.   \\
  {\tt SZPLCL}		    & ポリラインプリミティブの終了.   \\
			    &				      \\
  {\tt SZPMOP(ITYPE,INDEX,RSIZE)} & ポリマーカープリミティブの初期化. \\
  {\tt SZPMZc(N,PX,PY)} 	  & ポリマーカープリミティブの描画.   \\
  {\tt SZPMCL}			  & ポリマーカープリミティブの終了.   \\
				  &				      \\
  {\tt SZTNOP(ITPAT)}		  & トーンプリミティブの初期化.	\\
  {\tt SZTNZc(N,PX,PY)} 	  & トーンプリミティブの描画.	\\
  {\tt SZTNCL}			  & トーンプリミティブの終了.	\\
				  &				\\
  {\tt SZTXOP(RSIZE,IROTA,ICENT,INDEX)}	& テキストプリミティブの初期化.	\\
  {\tt SZTXZc(X,Y,CHARS)} 		& テキストプリミティブの描画.	\\
  {\tt SZTXCL}				& テキストプリミティブの終了.	\\
					&				\\
  {\tt SZLNOP(INDEX)}		& ラインサブプリミティブの初期化.	\\
  {\tt SZLNZc(X1,Y1,X2,Y2)} 	& ラインサブプリミティブの描画.		\\
  {\tt SZLNCL}			& ラインサブプリミティブの終了.		\\
				&					\\
  {\tt SZLAOP(ITYPE,INDEX)}	& アローサブプリミティブの初期化.	\\
  {\tt SZLAZc(X1,Y1,X2,Y2)} 	& アローサブプリミティブの描画.		\\
  {\tt SZLACL}			& アローサブプリミティブの終了.		\\
  \end{tabular}
  \vspace{1em}

ここで {\tt c}は描く座標系に応じて{\tt U}: UC, {\tt V}: VC, {\tt R}: RC の
3種類がある.
\end{quote}

\subsection{基本描画ルーチン}

基本描画ルーチンには折れ線ルーチンとトーンルーチンがあり, 
それぞれ座標値を配列ではなく1点ずつ指定するようになっている.
折れ線やトーンの属性に関してはあらかじめ設定ルーチンで設定して
おかなければならない.

\subsubsection{折れ線ルーチン}

\begin{quote}
  \begin{tabular}{lcl}
	 	& 入力座標 & \multicolumn{1}{c}{処理内容}	\\
  {\tt SZxxLU} &   U	& 回転/正規化変換,  線形補間	\\
  {\tt SZxxLT} &   T	& 地図投影, 大円補間, 地図境界でのクリッピング \\
  {\tt SZxxLV} &   V	& View Port でのクリッピング	\\
  {\tt SZxxLC} &   V	& ラベルつき線分への展開	\\
  {\tt SZxxLD} &   V	& 点線の展開			\\
  {\tt SZxxLP} &   V	& 透視変換			\\
  {\tt SZxxLR} &   R	& WS View Port でのクリッピング	\\
  {\tt SZxxLZ} &   R	& WS 変換, 直線描画 		\\
  \end{tabular}
\vspace{1em}

ここで {\tt xx}は動作に応じて{\tt OP}: OPEN, {\tt MV}: MOVE,
{\tt PL}: PLOT, {\tt CL}: CLOSE の4種類がある.
\end{quote}
\vspace{1em}

これらのルーチンは, インターフェイスルーチンの{\tt SZPLZc(N,PX,PY)}
を展開したものと思えばよい.
基本ルーチンを使って折れ線を描くプログラムは次のようになる.
\begin{Dprogram}
      CALL SZPLOP(ITYPE,INDEX)
        CALL SZOPLc
          CALL SZMVLc(UXX,UYY)
          CALL SZPLLc(UXX,UYY)
           ........
        CALL SZCLLc
      CALL SZPLCL
\end{Dprogram}

{\tt SZPLOP} ではラインタイプやラインインデクスの設定の他, 
必要な情報を{\tt SGRGET} などによって取得するので, 
頻繁に呼ぶと動作速度に影響する場合がある.


\subsubsection{トーンルーチン}

\begin{quote}
  \begin{tabular}{lcl}
             & 入力座標 &  \multicolumn{1}{c}{処理内容} 	\\
  {\tt SZxxTU} &   U	& 回転/正規化変換, 線形補間  	\\
  {\tt SZxxTT} &   T	& 地図投影, 大円補間, 地図境界でのクリッピング  \\
  {\tt SZxxTV} &   V	& View Port でのクリッピング  	\\
  {\tt SZxxTP} &   V	& 投影変換, soft/hard fill の switching \\
  {\tt SZxxTR} &   R	& WS View Port でのクリッピング 	\\
  {\tt SZxxTZ} &   R	& WS 変換, バッファリング 		\\
  {\tt SZxxTS} &   V	& バッファリング (ソフトフィル)	\\
  {\tt SZTNSV} &   V	& ソフトフィル 			\\
  \end{tabular}
\end{quote}
\vspace{1em}

これらのルーチンは, インターフェイスルーチンの{\tt SZTNZc(N,PX,PY)}
を展開したものと思えばよい.
基本ルーチンを使ってトーンをかけるプログラムは次のようになる.
\begin{Dprogram}
      CALL SZTNOP(ITPAT)
        CALL SZOPTc
          CALL SZSTTc(UXX,UYY)
          ........
        CALL SZCLTc
      CALL SZTNCL
\end{Dprogram}


{\tt SZTNOP} ではトーンパターンの設定, 
および境界線の向きに関する処理などを行う他, 
必要な情報を{\tt SGRGET} などによって取得するので, 
頻繁に呼ぶと動作速度に影響する場合がある.

