%表題   GRPH2 図形処理上位パッケージ
%
%履歴
%\Drireki{
%         90/03/22 塩谷雅人
%         91/09/05 林祥介
%         91/12/10 林祥介
%         92/02/05 塩谷雅人
%         92/04/22 林祥介   (4.1版)
%         94/04/04 塩谷雅人
%        }
%
\Dchapterhead
\label{uxyzpack}

\newcommand{\ROFFXS}{{\tt 'ROFFX}{\it s}{\tt '}}
\newcommand{\ROFFYS}{{\tt 'ROFFY}{\it s}{\tt '}}
\newcommand{\ROFFZS}{{\tt 'ROFF}{\it zs}{\tt '}}
\newcommand{\ROFGXS}{{\tt 'ROFGX}{\it s}{\tt '}}
\newcommand{\ROFGYS}{{\tt 'ROFGY}{\it s}{\tt '}}
\newcommand{\ROFGZS}{{\tt 'ROFG}{\it zs}{\tt '}}
\newcommand{\IROTLXS}{{\tt 'IROTLX}{\it s}{\tt '}}
\newcommand{\IROTLYS}{{\tt 'IROTLY}{\it s}{\tt '}}
\newcommand{\IROTLZS}{{\tt 'IROTL}{\it zs}{\tt '}}
\newcommand{\IROTCXS}{{\tt 'IROTCX}{\it s}{\tt '}}
\newcommand{\IROTCYS}{{\tt 'IROTCY}{\it s}{\tt '}}
\newcommand{\IROTCZS}{{\tt 'IROTC}{\it zs}{\tt '}}
\newcommand{\ICENTXS}{{\tt 'ICENTX}{\it s}{\tt '}}
\newcommand{\ICENTYS}{{\tt 'ICENTY}{\it s}{\tt '}}
\newcommand{\ICENTZS}{{\tt 'ICENT}{\it zs}{\tt '}}
\newcommand{\INDEXTI}{{\tt 'INDEXT}{\it i}{\tt '}}
\newcommand{\INDEXLI}{{\tt 'INDEXL}{\it i}{\tt '}}
\newcommand{\RSIZETI}{{\tt 'RSIZET}{\it i}{\tt '}}
\newcommand{\RSIZELI}{{\tt 'RSIZEL}{\it i}{\tt '}}
\newcommand{\RSIZECI}{{\tt 'RSIZEC}{\it i}{\tt '}}
\newcommand{\LABELXS}{{\tt 'LABELX}{\it s}{\tt '}}
\newcommand{\LABELYS}{{\tt 'LABELY}{\it s}{\tt '}}
\newcommand{\LABELZS}{{\tt 'LABEL}{\it zs}{\tt '}}


\section{概要}
%\label{uxyzpack.gaiyou}

UXPACK/UYPACK/UZPACK は直交座標系の座標軸をプロットするための
サブルーチンパッケージである.
したがって, 変換関数番号としては{\tt ITR}$=1 \sim 4$(直角直線座標系)の
正規化変換に対してのみ使用できる.
それ以外の変換関数番号を指定しても動作は保証されない.

\vspace{1em}
このパッケージにもとづいてULPACK (第\ref{ulpack}章),
UCPACK (第\ref{ucpack}章), USPACK (第\ref{uspack}章)などの
座標軸関連パッケージは構築されている.

\vspace{1em}
UXPACK/UYPACK/UZPACK それぞれのパッケージの機能は
次のようになっている.
\begin{quote}
\begin{tabular}{lp{10cm}}
  UXPACK & : X軸をプロットする\\
  UYPACK & : Y軸をプロットする\\
  UZPACK & : 内部変数の管理や初期化をおこなう
\end{tabular}
\end{quote}

\vspace{1em}
UXPACK, UYPACKはそれぞれ次のような3レベルのサブルーチン群からなる.
\begin{enumerate}
  \item 基本ルーチン群 (Basic Routines) :
    基本的な作画をおこなうサブルーチン.
    ユーザーは知る必要がない.
  \item 下位応用ルーチン群 (Lower Level Applications) :
    基本ルーチン群を使って書かれていて,
    具体的な作画をおこなうルーチン群. (以下ではLLAと略記する)
  \item 上位応用ルーチン群 (Upper Level Applications) :
    LLA を組み合わせて書かれていて,
    実際にユーザーが使用するルーチン群. (以下ではULAと略記する)
\end{enumerate}
このほかに座標軸のオフセットあるいは座標系のリニアオフセットを
コントロールするサブルーチン群がある.
簡単な座標軸の作画はほとんどULAで実現できる.
ULAで満足のゆく作画ができない場合, LLAを組み合わせれば
さらに高度な目的に応じたULAが作成できるはずである.
以下の「サブルーチンの説明」では, 上位応用ルーチン(ULA), UZPACK,
下位応用ルーチン(LLA)の順に説明する.

\vspace{1em}
簡単な座標軸の作画をしようとするユーザーは,
「座標軸の場所」に関する次節の説明を読んだあと
\ref{uxyzpack.refULA}節の「上位応用ルーチンの説明」に
進んでもらえれば,
おそらく期待に沿うような座標軸の描画ができるはずである.

\newpage

\section{座標軸の場所}
\label{uxyzpack.struct.basho}

このパッケージを使うためには, あらかじめ変換関数番号が
{\tt ITR}$=1 \sim 4$ (直角直線座標系)の正規化変換が
設定されていなければならない
(「GRPH1」のマニュアル参照). たとえば
\begin{quote}
  {\tt CALL SGSVPT(VXMIN,VXMAX,VYMIN,VYMAX)} \\
  {\tt CALL SGSWND(UXMIN,UXMAX,UYMIN,UYMAX)} \\
  {\tt CALL SGSTRN(ITR)} \\
  {\tt CALL SGSTRF}
\end{quote}
が呼んであるとする.
このときLLA, ULAは次の場所に座標軸を設定できる.
\begin{description}
  \item UXPACKについては

  \vspace{0.5em}
  \begin{tabular}{p{2cm}l}
    '{\tt B}'ottom & -- {\tt (UXMIN, UYMIN)}と{\tt (UXMAX, UYMIN)}を結ぶ線 \\
    '{\tt T}'op    & -- {\tt (UXMIN, UYMAX)}と{\tt (UXMAX, UYMAX)}を結ぶ線 \\
    '{\tt U}'ser   & -- {\tt (UXMIN, UYUSER)}と{\tt (UXMAX, UYUSER)}を結ぶ線
  \end{tabular}
  \item UYPACKについては

  \vspace{0.5em}
  \begin{tabular}{p{2cm}l}
    '{\tt L}'eft   & -- {\tt (UXMIN, UYMIN)}と{\tt (UXMIN, UYMAX)}を結ぶ線 \\
    '{\tt R}'ight  & -- {\tt (UXMAX, UYMIN)}と{\tt (UXMAX, UYMAX)}を結ぶ線 \\
    '{\tt U}'ser   & -- {\tt (UXUSER, UYMIN)}と{\tt (UXUSER, UYMAX)}を結ぶ線
  \end{tabular}
\end{description}
X軸に関する{\tt 'B'}, {\tt 'T'}, {\tt 'U'},
Y軸に関する{\tt 'L'}, {\tt 'R'}, {\tt 'U'}は,
座標軸の構成要素(次節参照)を作画する場所を示すための
パラメーター({\tt CSIDE})として用いられる.
{\tt UXUSER}, {\tt UYUSER}は内部変数{\tt 'UXUSER'}, {\tt 'UYUSER'}を
設定して初めて有効となる(初期値は不定).
以下, 特に断らないかぎり単に「内部変数」というのは
\UZPGETSET (\ref{uxyzpack.refuz.uzpget}節参照)の
管理する内部変数のことを指す.
座標軸を設定できるこれらの場所は,
UXPACKについては{\tt UXSAXZ}または{\tt UXSAXS}によって
Y方向に平行移動することができる;
UYPACKについては{\tt UYSAXZ}または{\tt UYSAXS}によって
X方向に平行移動することができる(\ref{uxyzpack.refLLA.uxpaxs}節参照).

\section{座標軸の構成要素とその属性}
\label{uxyzpack.struct.youso}
LLA が作画する座標軸の構成要素には次のものがある
(カッコ内はその構成要素を描くサブルーチン名).
\begin{enumerate}
  \item 軸を示す線分 {\tt (UXPAXS/UYPAXS)}
  \item 目盛 {\tt (UXPTMK/UYPTMK)}
  \item ラベル
  \begin{itemize}
    \item 文字列で指定 {\tt (UXPLBL/UYPLBL)}
    \item 数値で指定 {\tt (UXPNUM/UYPNUM)}
  \end{itemize}
  \item タイトル {\tt (UXPTTL/UYPTTL)}
\end{enumerate}

\vspace{1em}
それぞれの構成要素は次のような属性を持っている.
\begin{enumerate}
  \item 軸を示す線分については

  \vspace{0.5ex}
  \begin{tabular}{p{10cm}c}
    a. 線分のラインインデクス & {\tt <ISLCT>}
  \end{tabular}

  \item 目盛については

  \vspace{0.5ex}
  \begin{tabular}{p{10cm}c}
    a. 目盛の長さ & {\tt <ISLCT>} \\
    b. 目盛を描く線のラインインデクス & {\tt <ISLCT>}
  \end{tabular}

  \item ラベルについては

  \vspace{0.5ex}
  \begin{tabular}{p{10cm}c}
    a. 文字の高さ & {\tt <ISLCT>} \\
    b. 文字列の回転角 & {\tt <CSIDE>} \\
    c. 文字列のセンタリングオプション & {\tt <CSIDE>} \\
    d. 文字列を描く線のラインインデクス & {\tt <ISLCT>}
  \end{tabular}

  \item タイトルについては

  \vspace{0.5ex}
  \begin{tabular}{p{10cm}c}
    a. 文字の高さ & {\tt <ISLCT>} \\
    b. 文字列の回転角 & {\tt <CSIDE>} \\
    c. 文字列のセンタリングオプション & {\tt <引き数>} \\
    d. 文字列を描く線のラインインデクス & {\tt <ISLCT>}
  \end{tabular}
\end{enumerate}
これらの属性の指定方法および
{\tt <ISLCT>}, {\tt <CSIDE>}, {\tt <引き数>}の
意味については次節で述べる.

\vspace{1em}
座標軸の設定を'{\tt U}'ser以外でおこなった場合,
ラベルとタイトルは常にウインドウの外側に向かって描かれる.
'{\tt U}'serで設定をおこなった場合, ラベルとタイトルを軸のどちら側に書くかは
内部変数{\tt 'IFLAG'}が決める(\ref{uxyzpack.refLLA.uxplbl}節参照).

\section{LLAにおける属性の指定方法}
\label{uxyzpack.struct.zokusei}
LLAの各サブルーチンには{\tt ISLCT}, {\tt CSIDE}という2つの引き数がある.
この2つの引き数およびその他の引き数が各構成要素の属性を決める.
\begin{enumerate}
  \item {\tt ISLCT}は0,1,2の値をとりうる. \ref{uxyzpack.struct.youso}節で述べた
    属性のうち{\tt <ISLCT>}とあるものは, この引き数によって定まる
    内部変数を参照して決まる.
    {\tt ISLCT=0,1,2}の具体的な意味は,
    \begin{description}
      \item {\tt ISLCT=0 :} ユーザーが定義した内部変数を使って作画する.
      \item {\tt ISLCT=1 :} このパッケージがあらかじめ設定している
        内部変数を使って作画する.
        小さめの目盛, ラベル, タイトルを描くときに用いる.
      \item {\tt ISLCT=2 :} このパッケージがあらかじめ設定している
        内部変数を使って作画する.
        大きめの目盛, ラベル, タイトルを描くときに用いる.
    \end{description}
    たとえば, 軸を示す線分のラインインデクスについては,
    {\tt ISLCT=0,1,2}それぞれについて{\tt 'INDEXT0'}, {\tt 'INDEXT1'},
    {\tt 'INDEXT2'}という内部変数があって(初期値は順に, 不定, 1, 3)
    これを参照して属性が決まる.
    以下では以上の表現をまとめて次のように略記する. ---
    「内部変数\INDEXTI で指定してある値を参照してラインインデクスの属性が
    決まる(初期値は, 不定, 1, 3)」.
    これらの内部変数は \UZPGETSET によって
    参照/変更できる(\ref{uxyzpack.refuz.uzpget}節参照).
  \item {\tt CSIDE}は構成要素を描く場所を指定するとともに,
    描く場所に依存する属性を決める.
    \ref{uxyzpack.struct.youso}節で述べた属性のうち{\tt <CSIDE>}とあるものは,
    この引き数によって定まる内部変数を参照して決まる.
    たとえば, X軸につけるタイトルの回転角については,
    {\tt CSIDE='B','T','U'}それぞれについて{\tt 'IROTCXB'}, {\tt 'IROTCXT'},
    {\tt 'IROTCXU'}という内部変数があって(初期値は順に, 0, 0, 0)
    これを参照して属性が決まる.
    以下では以上の表現をまとめて次のように略記する. ---
    「内部変数\IROTCXS で指定してある値を参照して,
    X軸につけるタイトルの回転角に関する属性が
    決まる(初期値は, 0, 0, 0)」.
    また, Y軸につけるタイトルの回転角については,
    {\tt CSIDE='L','R','U'}それぞれについて{\tt 'IROTCYL'}, {\tt 'IROTCYR'},
    {\tt 'IROTCYU'}という内部変数があって(初期値は順に, 1, 1, 1)
    これを参照して属性が決まる.
    以下では以上の表現をまとめて次のように略記する. ---
    「内部変数\IROTCYS で指定してある値を参照して,
    Y軸につけるタイトルの回転角に関する属性が
    決まる(初期値は, 1, 1, 1)」.
    さらに\IROTCXS と\IROTCYS をまとめて次のように略記する. ---
    「内部変数\IROTCZS で指定してある値を参照して,
    軸につけるラベルの回転角に関する属性が
    決まる(初期値は, 0, 0, 0, 1, 1, 1)」.
  \item \ref{uxyzpack.struct.youso}節で述べた
    属性のうち{\tt <引き数>}とあるものは,
    引き数として直接指定することによって決まる.
\end{enumerate}

\ref{uxyzpack.struct.youso}節で述べた属性は具体的に次のように決まる.
\begin{enumerate}
  \item 軸を示す線分については
  \begin{description}
    \item a. 線分のラインインデクス {\tt <ISLCT>} \\
      内部変数\INDEXTI で指定してあるラインインデクスを用いて線分を描く
      (初期値は, 不定, 1, 3).
  \end{description}
  \item 目盛については
  \begin{description}
    \item a. 目盛の長さ {\tt <ISLCT>} \\
      内部変数\RSIZETI で指定してある長さ(単位はV座標系)の目盛を描く
      (初期値は, 不定, 0.007, 0.014).
    \item b. 目盛を描く線のラインインデクス {\tt <ISLCT>} \\
      内部変数\INDEXTI で指定してあるラインインデクスを用いて目盛を描く
      (初期値は, 不定, 1, 3).
      (注:目盛を描く向きは内部変数{\tt 'INNER'}が決める.
      {\tt 'INNER'}が正のとき内側に向かって目盛を描く;
      負のとき外側に向かって目盛を描く(初期値は+1). )
  \end{description}
  \item ラベルについては
  \begin{description}
    \item a. 文字の高さ {\tt <ISLCT>} \\
      内部変数\RSIZELI で指定してある高さ(単位はV座標系)の文字を描く
      (初期値は, 不定, 0.021, 0.028).
    \item b. 文字列の回転角 {\tt <CSIDE>} \\
      内部変数\IROTLZS で指定してある回転角オプションを
      使ってラベルを描く(初期値は, 0, 0, 0, 0, 0, 0).
      回転角オプションとは, ラベルを描くときの回転角を90度が
      1単位の整数値で指定するものである.
      (たとえば90度のとき1, --90度のとき--1と指定する. )
    \item c. 文字列のセンタリングオプション {\tt <CSIDE>} \\
      内部変数\ICENTZS で指定してあるセンタリングオプションを
      使ってラベルを描く(初期値は, 0, 0, 0, +1, +1, +1).
      センタリングオプションとは, ラベルを描くときに左よせ(--1)するか,
      センタリング(0)するか, 右よせ(+1)するかを指定するものである.
    \item d. 文字列を描く線のラインインデクス {\tt <ISLCT>} \\
      内部変数\INDEXLI で指定してあるラインインデクスを用いて文字を描く
      (初期値は, 不定, 3, 3).
  \end{description}
  \item タイトルについては
  \begin{description}
    \item a. 文字の高さ {\tt <ISLCT>} \\
      内部変数\RSIZECI で指定してある高さ(単位はV座標系)の文字を描く
      (初期値は, 不定, 0.028, 0.035).
    \item b. 文字列の回転角 {\tt <CSIDE>} \\
      内部変数\IROTCZS で指定してある回転角オプションを
      使ってラベルを描く(初期値は, 0, 0, 0, +1, +1, +1).
      回転角オプションとは, タイトルを描くときの回転角を90度が
      1単位の整数値で指定するものである.
      (たとえば90度のとき1, --90度のとき--1と指定する. )
    \item c. 文字列のセンタリングオプション {\tt <引き数>} \\
      引き数で指定してあるセンタリングオプションを
      使ってタイトルを描く.
      センタリングオプションとは, ラベルを描くときに左よせ(--1)するか,
      センタリング(0)するか, 右よせ(+1)するかを指定するものである.
    \item d. 文字列を描く線のラインインデクス {\tt <ISLCT>} \\
      内部変数\INDEXLI で指定してあるラインインデクスを用いて文字を描く
      (初期値は, 不定, 3, 3).
  \end{description}
\end{enumerate}




