%表題   GRPH2 図形処理上位パッケージ
%
%履歴
%\Drireki{
%         2011/08/19 乙部直人
%        }
%
\section{サブルーチンの説明}
%\label{uepack.refui}
  このパッケージは、カラーパレットを利用しないでカラーグラフィックスを扱う
  サブルーチン群を提供する。色の指定にはRGBの３つの値を与えるが、
  3つの値を1つの{\tt INTEGER}にパックして与える。このパックの方法は
  GRPH1 のマニュアルを参照。
  \vspace{1em}

  UEPACKと異なり、UIPDATでは、等値線ごとの階段状の色塗りではなくある値ごとに
  色を指定しその中間の値については色自体も線形内挿された色を使ってグラデーション
  で色塗りを行う。(ver7以降で階段状のルーチンも提供される予定)

\subsection{UIPDAT}
\label{uepack.refue.uipdat}
\begin{enumerate}
  \item 機能
  \begin{quote}
    1つの2次元配列の値に応じて色を塗る.データと格子点の配置によって
    補完方法が異なる．データが格子点上に置かれた場合は，その軸の方向には
    線形に内挿される．格子点の中間に置かれた場合その軸の方向には補完されず
    そのセルの範囲はそのデータの値が利用される．
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UIPDAT(z)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt Z} & {\tt (R)} & 2次元配列.\\
      {\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 データを格子点上に配置するかどうかは{\tt LCELLX}と{\tt LCELLY}によって制御される．
  \begin{enumerate}
    \item なし
  \end{enumerate}
\end{enumerate}

\subsection{UIPDA2}
\label{uepack.refue.uipda2}
\begin{enumerate}
  \item 機能
  \begin{quote}
    2つの2次元配列の値に応じて色を塗る.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UIPDA2(U,V,MX,NX,NY)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt U,V} & {\tt (R)} & 二次元配列２つ.\\
      {\tt MX} & {\tt (I)} & 配列{\tt U,V}の第1次元整合寸法. \\
      {\tt NX} & {\tt (I)} & 作画に使う配列{\tt U,V}の第1次元寸法. \\
      {\tt NY} & {\tt (I)} & 作画に使う配列{\tt U,V}の第2次元寸法.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item なし
  \end{enumerate}
\end{enumerate}

\subsection{UIPD3Z}
\label{uepack.refue.uipd3z}
\begin{enumerate}
  \item 機能
  \begin{quote}
    3つの2次元配列の値をRGB値と見なして色を塗る.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UIPD3Z(R,G,B,MX,NX,NY)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt R,G,B} & {\tt (R)} & 赤緑青の色塗りデータ(2次元配列).\\
      {\tt MX} & {\tt (I)} & 配列{\tt R,G,B}の第1次元整合寸法. \\
      {\tt NX} & {\tt (I)} & 作画に使う配列{\tt R,G,B}の第1次元寸法. \\
      {\tt NY} & {\tt (I)} & 作画に使う配列{\tt R,G,B}の第2次元寸法.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item このルーチンは色データをパックする必要がない。それぞれの色の配列を与える。
  \end{enumerate}
\end{enumerate}

\subsection{UISCRG}
\label{uepack.refue.uiscrg}
\begin{enumerate}
  \item 機能
  \begin{quote}
    色に対応する値の範囲を指定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UISCRG(ZMIN,ZMAX)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt ZMIN,ZMAX} & {\tt (R)} & 色範囲の最大値、最小値.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item なし
  \end{enumerate}
\end{enumerate}

\subsection{UISCSQ}
\label{uepack.refue.uiscsq}
\begin{enumerate}
  \item 機能
  \begin{quote}
    UIPDATで使う色を指定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UISCSQ(CL,IRGB,N)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt CL} & {\tt (R(:))} & レベルを指定する配列。\\
      {\tt IRGB} & {\tt (I(:))} & 色データを指定する配列。\\
      {\tt N}  & {\tt I} 配列の寸法。
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item 配列の大きさの最大値は256である。
    \item ある値に対応する色を指定する。グラデーションで描画されるので、
          範囲を指定するわけではない。
  \end{enumerate}
\end{enumerate}

\subsection{UISCFL}
\label{uepack.refue.uiscfl}
\begin{enumerate}
  \item 機能
  \begin{quote}
    UIPDATで使う色をファイルで指定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UISCFL(FNAME)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt FNAME} & {\tt (C)} & ファイル名。
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item ファイルのフォーマットは、1行目にデーター数を {\tt '(I3)'} で、その後にレベルと色を
          {\tt '(G6.4, Z8)'} で指定する。
    \item データ数の大きさの最大値は256である.
  \end{enumerate}
\end{enumerate}

\subsection{UISMRG}
\label{uepack.refue.uismrg}
\begin{enumerate}
  \item 機能
  \begin{quote}
    マスクに対応する値の範囲を指定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UISMRG(ZMIN,ZMAX)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt ZMIN,ZMAX} & {\tt (R)} & マスク範囲の最大値、最小値.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item なし
  \end{enumerate}
\end{enumerate}

\subsection{UISMSQ}
\label{uepack.refue.uismsq}
\begin{enumerate}
  \item 機能
  \begin{quote}
    UIPDATで使うマスクを指定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UIPDAT(ML,MASK,N)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt ML} & {\tt (R(:))} & レベルを指定する配列。\\
      {\tt MASK} & {\tt (I(:))} & マスクの値を指定する配列。\\
      {\tt N}  & {\tt I} 配列の寸法。
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item マスク指定された領域の明るさを増加する。つまり白っぽくなり等値線のように縞模様を入れて
          値を読み取りやすくする。
    \item 配列の大きさの最大値は256である。
    \item ある値に対応する色を指定する。グラデーションで描画されるので、
          範囲を指定するわけではない。
  \end{enumerate}
\end{enumerate}

\subsection{UISMFL}
\label{uepack.refue.uismfl}
\begin{enumerate}
  \item 機能
  \begin{quote}
    UIPDATで使うマスクをファイルで指定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UISMFL(FNAME)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt FNAME} & {\tt (C*(*))} & ファイル名。
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item ファイルのフォーマットは、1行目にデーター数を {\tt '(I3)'} で、
          その後にレベルとマスクを {\tt '(F64,F8.3)'}で指定する.
    \item データ数の大きさの最大値は256である.
  \end{enumerate}
\end{enumerate}

\subsection{UIXBAR}
\label{uepack.refue.uixbar}
\begin{enumerate}
  \item 機能
  \begin{quote}
    X方向のカラーバーを描く.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UIXBAR(xmin,xmax,ymin,ymax,zmin,zmax,cpos)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt XMIN,XMAX} & {\tt (R)} & カラーバーの左と右のx座標値.\\
      {\tt YMIN,YMAX} & {\tt (R)} & カラーバーの上と下のy座標値.\\
      {\tt ZMIN,ZMAX} & {\tt (R)} & 色レベルの最大最小値.\\
      {\tt CPOS}      & {\tt (C*(*))} & 座標軸の位置。'B', 'T' または 'BT'.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item 色レベルは、現在設定されている値で描画される
  \end{enumerate}
\end{enumerate}

\subsection{UIYBAR}
\label{uepack.refue.uiybar}
\begin{enumerate}
  \item 機能
  \begin{quote}
    Y方向のカラーバーを描く.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UIYBAR(xmin,xmax,ymin,ymax,zmin,zmax,cpos)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt XMIN,XMAX} & {\tt (R)} & カラーバーの左と右のx座標値.\\
      {\tt YMIN,YMAX} & {\tt (R)} & カラーバーの上と下のy座標値.\\
      {\tt ZMIN,ZMAX} & {\tt (R)} & 色レベルの最大最小値.\\
      {\tt CPOS}      & {\tt (C*(*))} & 座標軸の位置。'R', 'L' または 'RL'.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item 色レベルは、現在設定されている値で描画される.
  \end{enumerate}
\end{enumerate}

\subsection{UISCR2}
\label{uepack.refue.uiscr2}
\begin{enumerate}
  \item 機能
  \begin{quote}
    2つの色に対応する値の範囲を指定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UISCR2F(UMIN,UMAX,VMIN,VMAX)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt UMIN,UMAX} & {\tt (R)} & 1つめの色範囲の最小値、最大値.\\
      {\tt VMIN,VMAX} & {\tt (R)} & 2つめの色範囲の最小値、最大値.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item なし
  \end{enumerate}
\end{enumerate}

\subsection{UISCMP}
\label{uepack.refue.uiscmp}
\begin{enumerate}
  \item 機能
  \begin{quote}
    2次元カラーマップを指定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UISCMP(IRGB1,IRGB2,IRGB3,IRGB4)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt IRGB1,IRGB2,IRGB3,IRGB4} & {\tt (R)} & カラーマップの4角の色値.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item なし
  \end{enumerate}
\end{enumerate}

\subsection{UIPCMP}
\label{uepack.refue.uipcmp}
\begin{enumerate}
  \item 機能
  \begin{quote}
    2次元カラーマップを描く.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UIPCMP(XMIN,XMAX,YMIN,YMAX,CPOS)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt XMIN,XMAX} & {\tt (R)} & カラーバーの左と右のx座標値.\\
      {\tt YMIN,YMAX} & {\tt (R)} & カラーバーの下と上のy座標値.\\
      {\tt CPOS} & {\tt (C*(*))} & 座標軸の位置。'B', 'T' または 'BT'.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item なし
  \end{enumerate}
\end{enumerate}

\subsection{UIFPAC}
\label{uepack.refue.uifpac}
\begin{enumerate}
  \item 機能
  \begin{quote}
    RGBデータを、色情報にパックする.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UIFPAC(IR,IG,IB,IRGB)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt IR,IG,IB} & {\tt (R)} & RGB値. \\
      {\tt IRGB} & {\tt (R)} & 色情報.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item なし
  \end{enumerate}
\end{enumerate}

\subsection{UIIPAC}
\label{uepack.refue.uiipac}
\begin{enumerate}
  \item 機能
  \begin{quote}
    色情報を、RGBデータにアンパックする.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UIIPAC(IRGB,IR,IG,IB)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt IRGB} & {\tt (R)} & 色情報. \\
      {\tt IR,IG,IB} & {\tt (R)} & RGB値.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item なし
  \end{enumerate}
\end{enumerate}





\subsection{UI{\it p}GET/UI{\it p}SET(UI{\it p}STX)}
\label{uipack.refue.uipget}
\begin{enumerate}
  \item 機能
  \begin{quote}
    UIPACKサブルーチンパッケージで使用する内部変数を参照/変更する.
    ({\tt UIPSTX} は実行時オプションによる変更を許す. )
    各変数の意味は今のところ不明。近く加筆される予定。
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UIPGET (CP,IPARA)} \\
    {\tt CALL UIPSET (CP,IPARA)} \\
    {\tt CALL UIPSTX (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 'LCELLX'} \> {\tt (L)} \>
        \parbox[t]{10cm}{
        X方向を領域の中心に値が存在するように設定する。
        (初期値は{\tt .FALSE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LCELLY'} \> {\tt (L)} \>
        \parbox[t]{10cm}{
        X方向を領域の中心に値が存在するように設定する。
        (初期値は{\tt .FALSE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LCORNER'} \> {\tt (L)} \>
        \parbox[t]{10cm}{
        グリッドの四角のうち1つはかけていても塗るように設定する。
        (初期値は{\tt .FALSE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LCYCLE'} \> {\tt (L)} \>
        \parbox[t]{10cm}{
        飽和した色は循環した色を塗るように設定する。
        (初期値は{\tt .FALSE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LMASK'} \> {\tt (L)} \>
        \parbox[t]{10cm}{
        MASK を使用して色を塗る。
        (初期値は{\tt .FALSE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LEMBOSS'} \> {\tt (L)} \>
        \parbox[t]{10cm}{
        エンボス 処理を施して色を塗る。
        (初期値は{\tt .FALSE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LSPHERE'} \> {\tt (L)} \>
        \parbox[t]{10cm}{
        SPHERICAL MAPPING を設定する？。
        (初期値は{\tt .FALSE.}).
        \rule[-1ex]{0ex}{1ex}} \\
    \end{tabbing}
  \end{quote}
  \item 備考

  \begin{enumerate}
    \item 内部変数を管理するための下請けルーチンとして
      以下のものがある.
      \begin{quote}
      \begin{tabular}{lp{8cm}}
        {\tt UIPQNP(NCP)}       &
          内部変数の総数{\tt NCP}を求める. \\
        {\tt UIPQID(CP,IDX)}    &
          内部変数{\tt CP}の位置{\tt IDX}を求める.  \\
        {\tt UIPQCP(IDX,CP)}    &
          {\tt IDX}の位置にある内部変数の名前{\tt CP}を参照する.  \\
        {\tt UIPQVL(IDX,IPARA)} &
          {\tt IDX}の位置にある内部変数の値{\tt IPARA}を参照する.  \\
        {\tt UIPSVL(IDX,IPARA)} &
          {\tt IDX}の位置にある内部変数の値{\tt IPARA}を変更する.  \\
      \end{tabular}
      \end{quote}
    \item \UEPGET は上に述べた{\tt UIPQID}を呼んで
      内部変数の位置を求め, {\tt UIPQVL}によって値を参照する;
      \UEPSET は{\tt UIPQID}を呼んで内部変数の位置を求め,
      {\tt UIPSVL}によって値を設定する.
      したがって指定した内部変数名が見つからないとき,
      エラーメッセージは{\tt UIPQID}が出力する.
  \end{enumerate}
\end{enumerate}
