%表題   GRPH2 図形処理上位パッケージ
%
%履歴
%\Drireki{
%         90/03/22 塩谷雅人
%         91/09/05 林祥介
%         91/12/10 林祥介
%         92/02/05 塩谷雅人
%         92/03/05 塩谷雅人, 佐藤薫
%         92/04/22 林祥介   (4.1版)
%         94/04/04 塩谷雅人
%         95/04/14 酒井敏   (5.z 版)
%        }
%
\section{サブルーチンの説明}
%\label{uepack.refue}

\subsection{UETONE}
\label{uepack.refue.uetone}
\begin{enumerate}
  \item 機能
  \begin{quote}
    トーンによる2次元等値線図のぬりわけをおこなう.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UETONE(Z,MX,NX,NY)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt Z} & {\tt (R)} & {\tt MX}$ \times ${\tt NY}の2次元配列.
        作画には{\tt NX}$ \times ${\tt NY}の部分を使う. \\
      {\tt MX} & {\tt (I)} & 配列{\tt Z}の第1次元整合寸法. \\
      {\tt NX} & {\tt (I)} & 作画に使う配列{\tt Z}の第1次元寸法. \\
      {\tt NY} & {\tt (I)} & 作画に使う配列{\tt Z}の第2次元寸法.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item X方向の格子点の座標が
      {\tt UWSGXA} (\ref{uwpack.refuw.uwsgxya}節参照)または
      {\tt UWSGXB} (\ref{uwpack.refuw.uwsgxyb}節参照)
      によって設定されていない場合, {\tt SGQWND}でウインドウ情報を
      取得し
      ウインドウの{\tt UXMIN}, {\tt UXMAX}を{\tt NX}--1等分するような
      格子点を設定する.
    \item Y方向の格子点の座標が
      {\tt UWSGYA} (\ref{uwpack.refuw.uwsgxya}節参照)または
      {\tt UWSGYB} (\ref{uwpack.refuw.uwsgxyb}節参照)
      によって設定されていない場合, {\tt SGQWND}でウインドウ情報を
      取得し
      ウインドウの{\tt UYMIN}, {\tt UYMAX}を{\tt NY}--1等分するような
      格子点を設定する.
    \item ぬりわけをおこなうレベルの値が{\tt UEGTLA}, {\tt UEGTLB},
      {\tt UESTLV}または{\tt UESTLN}によって設定されていない場合,
      次のようにぬりわけるレベル値とトーンパターンを設定する. 
      {\tt UELGET/}{\tt UELSET} の管理する
      内部変数{\tt 'LTONE'}が{\tt .TRUE.}のとき 
      (以下, 特に断らない場合, 単に「内部変数」というのは
      \UEPGETSET の管理する
      内部変数のことをさす),
      次のサブルーチンを内部で呼んで
      約{\tt NLEV}本のトーンレベルを設定する.
      \begin{quote}
        {\tt CALL UEGTLB(Z,MX,NX,NY,-REAL(NLEV))}
      \end{quote}
      {\tt NLEV}は内部変数{\tt 'NLEV'}が参照する値である
      (初期値は12);
      内部変数{\tt 'LTONE'}が{\tt .FALSE.}のとき, 
      内部変数{\tt 'RLEV'}が参照する値以下の領域を
      内部変数{\tt 'IPAT'}が参照する値のトーンパターンでぬりわける
      ({\tt 'RLEV'}, {\tt IPAT'}の初期値はそれぞれ
      0.0, 1201:右上がりの斜線).
      なお {\tt 'LTONE'}の初期値は{\tt .FALSE.}である. 
    \item \GLPGETSET の管理する内部変数{\tt 'LMISS'}が
      {\tt .TRUE.}なら欠損値処理をおこなう.
      つまり欠損値のまわりの格子点はぬりわけない.
      (その際, 参照する欠損値は \GLPGETSET の管理する
      内部変数{\tt 'RMISS'}である. )
      {\tt .FALSE.}なら欠損値処理をおこなわない.
      くわしくは「MATH1」のマニュアル参照.
    \item ぬりわけをおこなう前にすべての格子点値のチェックをおこなう.
      次の2つの場合ぬりわけはおこなわずその旨メッセージが出力される.
      2つの場合とは:
      \begin{itemize}
        \item すべての格子点が欠損値のとき(missing field).
        \item すべての格子点が同一な値のとき(constant field).
      \end{itemize}
  \end{enumerate}
\end{enumerate}

\subsection{UETONF}
\label{uepack.refue.uetonf}
\begin{enumerate}
  \item 機能
  \begin{quote}
    イメージデータ描画機能を使って, 2次元等値線図のぬりわけをおこなう.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UETONF(Z,MX,NX,NY)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt Z} & {\tt (R)} & {\tt MX}$ \times ${\tt NY}の2次元配列.
        作画には{\tt NX}$ \times ${\tt NY}の部分を使う. \\
      {\tt MX} & {\tt (I)} & 配列{\tt Z}の第1次元整合寸法. \\
      {\tt NX} & {\tt (I)} & 作画に使う配列{\tt Z}の第1次元寸法. \\
      {\tt NY} & {\tt (I)} & 作画に使う配列{\tt Z}の第2次元寸法.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt UETONE} とほぼ互換性があるが, 
	  指定できるトーンパターンはべた塗りだけである.
    \item イメージ描画機能のないデバイスでは使用できない.
    \item ピクセル毎に周囲4点のデータから線形内挿して値 ({\tt Z}) を
	  求め色を決める.
	  したがって, 色の境界は一般に曲線となる.
  \end{enumerate}
\end{enumerate}

\subsection{UEGTLA}
\label{uepack.refue.uegtla}
\begin{enumerate}
  \item 機能
  \begin{quote}
    {\tt UDTONE} で使うトーンレベル値を
    最小値・最大値および
    きざみ値またはおよそのレベル数で設定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UEGTLA(XMIN,XMAX,DX)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt XMIN}, {\tt XMAX} & {\tt (R)} & トーンレベルの最小値と最大値.
        必ずしもきりのよい値でなくてもよい. \\
      {\tt DX} & {\tt (R)} & $ {\tt DX} > 0 $のとき{\tt DX}をきざみ幅とする. \\
               &           & $ {\tt DX} = 0 $のとき内部変数
                             {\tt 'NLEV'}を参照して, 約{\tt NLEV}本の
                             トーンレベルを生成する. \\
               &           & $ {\tt DX} < 0 $のとき約{\tt INT(ABS(DX))}本の
         トーンレベルを生成する.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item このルーチンは{\tt UDGCLA} (\ref{udpack.refud.udgcla}節参照)
      と同じアルゴリズムにもとづいてレベル値を生成している.
      アルゴリズムを同一にするため, UDPACK で用いられる
      内部変数{\tt 'NLEV'}, {\tt 'ICYCLE'}と同じものが, 
      UEPACK でも用意されている. 
      UDPACK でこれらの値を変えたときは,
      UEPACK でも変更してやらなければならない. 
    \item $ {\tt XMIN} \ne {\tt XMAX} $でなければならない.
    \item トーンレベルは{\tt DX}が決めるきざみ幅の整数倍に
      なるように設定される.
    \item トーンパターンは内部変数{\tt 'ICOLOR1'}と{\tt 'ICOLOR2'}が
      示す色番号(初期値は15, 94)の間をトーンレベルの数で分割し, 
      それに {\tt 'ITPAT'} をパターン番号とする
      (初期値は999,べた塗り)トーンパターン番号を生成する. 
  \end{enumerate}
\end{enumerate}

\subsection{UEGTLB}
\label{uepack.refue.uegtlb}
\begin{enumerate}
  \item 機能
  \begin{quote}
    {\tt UETONE} で使うコンターレベル値を
    格子点値を与える配列と
    きざみ値またはおよそのレベル数で設定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UEGTLB(Z,MX,NX,NY,DX)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{lp{10cm}}
      {\tt Z}, {\tt MX}, {\tt NX}, {\tt NY} & {\tt UETONE}
        (\ref{uepack.refue.uetone}節)参照. \\
      {\tt DX} & {\tt UEGTLA} (\ref{uepack.refue.uegtla}節)参照.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item このルーチンは{\tt Z}の格子点値の最小値・最大値をチェックして,
      内部で{\tt UEGTLA}を呼んでいる.
  \end{enumerate}
\end{enumerate}

\subsection{UESTLV}
\label{uepack.refue.uestlv}
\begin{enumerate}
  \item 機能
  \begin{quote}
    ぬりわけるレベルとパターンを1レベルごと指定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UESTLV(TLEV1,TLEV2,IPAT)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt TLEV1} & {\tt (R)} & ぬりわけるレベルの下限値. \\
      {\tt TLEV2} & {\tt (R)} & ぬりわけるレベルの上限値. \\
      {\tt IPAT} & {\tt (I)} & トーンパターン番号
        (「GRPH1」のマニュアル参照).
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item ある値({\tt ZLEV})以下の部分すべてをぬりたいときは,
      {\tt TLEV1}として \GLPGETSET の管理する
      {\tt 'RMISS'}の値を指定し, {\tt TLEV2}として
      {\tt ZLEV}を指定すればよい. 逆に, ある値({\tt ZLEV})以上の
      部分をすべてぬりたいときは, {\tt TLEV1}として{\tt ZLEV}を
      指定し, {\tt TLEV2}として{\tt 'RMISS'}の値を指定すればよい.
    \item ${\tt TLEV1} < {\tt TLEV2}$でなければならない.
    \item 設定するトーンレベルは100以下でなければならない.
    \item 現在設定されているトーンレベルの数は
      \begin{quote}
        {\tt CALL UEQNTL(NTON)}
      \end{quote}
      によって参照できる.
    \item 第{\tt ITON}番目のトーンレベルの属性は
      \begin{quote}
        {\tt CALL UEQTLV(TLEV1,TLEV2,IPAT,ITON)}
      \end{quote}
      によって参照できる.
  \end{enumerate}
\end{enumerate}

\subsection{UESTLN}
\label{uepack.refue.uestln}
\begin{enumerate}
  \item 機能
  \begin{quote}
    ぬりわけるレベルとパターンを配列で複数レベル指定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UESTLN(TLEVN,IPATN,NTON)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt TLEVN} & {\tt (R)} & ぬりわけるレベルの値を格納する配列.
        大きさ{\tt NTON}+1. \\
      {\tt IPATN} & {\tt (I)} & トーンパターン番号を格納する配列.
        大きさ{\tt NTON}.
        (トーンパターン番号については「GRPH1」のマニュアル参照). \\
      {\tt NTON} & {\tt (I)} & 配列{\tt IPATN}の大きさ.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt UESTLV}との関連で説明すると,
      {\tt TLEV1}として{\tt TLEVN(}$i${\tt )},
      {\tt TLEV2}として{\tt TLEVN(}$i+1${\tt )},
      {\tt IPAT}として{\tt IPATN(}$i${\tt )} $(i=1,{\tt NTON})$を
      指定したのと同等である.
      したがって,
      ${\tt TLEVN(}i{\tt )} < {\tt TLEVN(}i+1{\tt )}$でなければならない.
      くわしくは\ref{uepack.refue.uestlv}節参照.
    \item {\tt UESTLV}と同じように,
      現在設定されているトーンレベルの数は{\tt UEQNTL}で,
      トーンレベルの属性は{\tt UEQTLV}によって参照できる.
  \end{enumerate}
\end{enumerate}

\subsection{UEITLV}
\label{uepack.refue.ueitlv}
\begin{enumerate}
  \item 機能
  \begin{quote}
    {\tt UESTLV}または{\tt UESTLN}で設定したトーンレベルを無効にする.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UEITLV}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    なし
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt UESTLV}または{\tt UESTLN}によって既に
      設定されているトーンレベルを
      無効にして{\tt UETONE}を呼びたいとき,
      このルーチンを呼ぶ必要がある.
  \end{enumerate}
\end{enumerate}

\subsection{UE{\it p}GET/UE{\it p}SET(UE{\it p}STX)}
\label{uepack.refue.uepget}
\begin{enumerate}
  \item 機能
  \begin{quote}
    UEPACKサブルーチンパッケージで使用する内部変数を参照/変更する.
    (\UEPSTX は実行時オプションによる変更を許す. )
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL \UEPGET (CP,IPARA)} \\
    {\tt CALL \UEPSET (CP,IPARA)} \\
    {\tt CALL \UEPSTX (CP,IPARA)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt CP} & {\tt (C*8)} & 内部変数の名前.  \\
      {\tt IPARA} & {\tt (I,R,L)} & 内部変数の値.
    \end{tabular}

    \vspace{1em}
    以下に{\tt CP}として指定できる名前のリストを記す.

    \vspace{1em}
    \begin{tabbing}
      123456789 \= 1234 \=                                         \kill
      {\tt 'LTONE'} \> {\tt (L)} \>
        \parbox[t]{10cm}
        {ぬりわけるトーンレベルをユーザーが指定しなかったとき,
        {\tt UEGTLB} を使ってトーンレベルとトーンパターンを
        生成するかどうかを指定する.
        {\tt .TRUE.} なら{\tt UEGTLB} をつかう;
        {\tt .FALSE.} なら{\tt 'RLEV'}(下記)以下をぬるような設定をする
        (初期値は{\tt .FALSE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'RLEV'} \> {\tt (R)} \>
        \parbox[t]{10cm}
        {{\tt 'LTONE'}が{\tt .FALSE.}のとき, 
        ぬりわける領域の境界値(初期値は0.0).
        ここで指定した値以下の領域をぬる.
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'IPAT'} \> {\tt (I)} \>
        \parbox[t]{10cm}
        {{\tt 'LTONE'}が{\tt .FALSE.}のとき, 
        内部変数{\tt 'RLEV'}以下の領域をぬる
        トーンパターン(初期値は1201:右上がりの斜線).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'ICOLOR1'} \> {\tt (I)} \>
        \parbox[t]{10cm}
        {{\tt 'LTONE'}が{\tt .TRUE.}のとき用いる
        色番号の下限値(初期値は15).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'ICOLOR2'} \> {\tt (I)} \>
        \parbox[t]{10cm}
        {{\tt 'LTONE'}が{\tt .TRUE.}のとき用いる
        色番号の上限値(初期値は94).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'ITPAT'} \> {\tt (I)} \>
        \parbox[t]{10cm}
        {{\tt 'LTONE'}が{\tt .TRUE.}のとき用いる
        パターン番号(初期値は999, べた塗り).
        \rule[-1ex]{0ex}{1ex}}
    \end{tabbing}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item 内部変数を管理するための下請けルーチンとして
      以下のものがある.
      \begin{quote}
      \begin{tabular}{lp{8cm}}
        {\tt UEPQNP(NCP)}       &
          内部変数の総数{\tt NCP}を求める. \\
        {\tt UEPQID(CP,IDX)}    &
          内部変数{\tt CP}の位置{\tt IDX}を求める.  \\
        {\tt UEPQCP(IDX,CP)}    &
          {\tt IDX}の位置にある内部変数の名前{\tt CP}を参照する.  \\
        {\tt UEPQVL(IDX,IPARA)} &
          {\tt IDX}の位置にある内部変数の値{\tt IPARA}を参照する.  \\
        {\tt UEPSVL(IDX,IPARA)} &
          {\tt IDX}の位置にある内部変数の値{\tt IPARA}を変更する.  \\
      \end{tabular}
      \end{quote}
    \item \UEPGET は上に述べた{\tt UEPQID}を呼んで
      内部変数の位置を求め, {\tt UEPQVL}によって値を参照する;
      \UEPSET は{\tt UEPQID}を呼んで内部変数の位置を求め,
      {\tt UEPSVL}によって値を設定する.
      したがって指定した内部変数名が見つからないとき,
      エラーメッセージは{\tt UEPQID}が出力する.
    \item 上記内部変数のほかに, 
      {\tt UDGCLA}, {\tt UDGCLB}とアルゴリズムの同一性を保つために, 
      UDPACK で用いられる内部変数{\tt 'NLEV'}, {\tt 'ICYCLE'}と同じものが, 
      UEPACK でも用意されている. 
      UDPACK でこれらの値を変えたときは,
      UEPACK でも変更してやらなければならない. 
    \item {\tt ITYPE}としては適切な型の定数または変数を指定すること.
  \end{enumerate}
\end{enumerate}

\subsection{その他のサブルーチン}

このパッケージにはこのほかに以下の下位ルーチンがある.
ここではその名前をあげるにとどめる.

\vspace{1em}
\begin{quote}
\begin{tabular}{llll}
  {\tt UESTLZ} & {\tt UEQTLZ} & {\tt UEAREA} & {\tt UEAINT}
\end{tabular}
\end{quote}
