SWPACK の内部変数 IWIDTH
と IHEIGHT
を設定すると変わ
ります.
CALL SWISET('IWIDTH', 600) CALL SWISET('IHEIGHT', 400)
% ./a.out -sw:iwidth=600 -sw:iheight=400
% setenv SW:IWIDTH 600 % setenv SW:IHEIGHT 400
sw:iwidth 400 sw:iheight 400と指定する.
環境変数の指定方法の詳細に関しては MATH1マニュアルの『概要/内 部変数』を参照して下さい.
なお, ウインドウ・マネージャーでサイズを変えようとしても, 図の サイズは変わりません.
以後内部変数の変更については例1〜4までのいずれの方法も適用でき ます.
SWPACK の内部変数 IPOSX
と IPOSY
で, グラフィック・
ウィンドウの位置を指定できます.
CALL SWISET('IPOSX', 30) CALL SWISET('IPOSY', 30)これは左上(原点)から右に30ピクセル, 下に30ピクセルの位置を原点と したウィンドウが生成される例です. X Windows システムではリソース 設定で geometry エントリに負値を指定すると x 方向は右から, y方向 は下からの値に読み替えられますが, ここではそのようにならないこと に注意が必要です.
dcl.ps
以外に変えたいのですが.
SWPACK の内部変数 FNAME
を設定すると変わります. 例え
ば, プログラムで
CALL SWCSET('FNAME', 'foo')とすると, PostScript 出力ファイル名は
foo.ps
になりま
す. また, X Window システムにおけるのウィンドウダンプしたファ
イル名は foo.xwd
になります. 詳しくは GRPH1 のマニュ
アルの 7.8.1 節を参照して下さい.(また,
SWCSETも参考になるでしょう.)
SGPACK の内部変数 LCORNER
を .FALSE.
にするとコーナー
マークは描かれません;
CALL SGLSET('LCORNER', .FALSE.)また, コーナーマーク付きで描かれた PostScript の図からコーナー マークを除去するツールとして
dclpsrmcm
があります.
因みに dcl-5.3 からは規定値として LCORNER
の値が
.FALSE.
となっているため, コーナーマークは描かれません.
SGPACK の内部変数 IFONT
を 2 にすると, 高品位フォントを使
用することができます.
CALL SGISET('IFONT', 2)ただし, 出力結果のファイルのサイズが少し大きくなります.
PostScript の図の場合, dclpsfont
を使用すれば
Times-Roman や Helvetica, Courier などの PostScript フォントを
使用することができます. 記号は一部を除いて PostScript ベクトル
情報に変換されます.
U[XYZ]PACK で座標軸を描いているいる場合, 座標軸のライン・イン
デクス(線の太さや色などの属性) は, 内部変数 INDEXT0
,
INDEXT1
, INDEXT2
によって管理されています. このうち,
パッケージでに用いられいるのはINDEXT1
と INDEXT2
です.
INDEXT1
は小さめの目盛,ラベル,タイトルを描くとき(デフォルトは 1)INDEXT2
は大きめの目盛,ラベル,タイトルを描くとき(デフォルトは 3)CALL UZISET('INDEXT1', 44) CALL UZISET('INDEXT2', 29)とすることにより座標軸は太くなり, 軸と大きい刻みは赤に, 小さい 刻みは青になります. 詳しくは GRPH2 マニュアルの U[XYZ]PACK の 章の『LLA における属性の指定方法』および UZpGET/UZpSET のパラ メーターの説明の項を参照してください.
CALL SGLSET('LCLIP', .TRUE.)のようにして, SGPACK の内部変数
LCLIP
を .TRUE.
にす
ると, それ以降の描画命令全てに対してクリッピングが行なわれ,
ビューポートからはみ出した部分は描かれなくなります. クリッピン
グを途中で止めたい場合には以下のようにします.
CALL SGLSET('LCLIP', .FALSE.)
ポーラーステレオに依らず, いずれかの地図投影を SGSTRN
或
は GRSTRN
によって指定している時に, ある緯度・経度の範囲
でクリッピングをするには
CALL SGSTXY(西端経度, 東端経度, 南端緯度, 北端緯度)と指定します. ポーラーステレオの場合には円形にクリッピングさ れます.
因みに SGSTXY
に関する記述はマニュアルにありません. 次期
改訂では記載されることでしょう.
参考までにサンプルプログラムを添付します.
PROGRAM TEST CALL GROPN(1) ! 画面に出力 CALL GRFRM CALL GRSVPT(0.2, 0.8, 0.2, 0.8) CALL GRSTRN(31) CALL UMSCWD(90.0, 90.0, 75.0) ! 円形のウィンドウを設定 CALL SGSTXY(-180.0, 180.0, 15.0, 90.0) ! 描画範囲を指定 CALL UMPFIT CALL GRSTRF CALL SGLSET('LCLIP', .TRUE.) CALL UMPMAP('coast_world') CALL UMPGLB ! 緯経線と地球の輪郭を描く CALL GRCLS STOP END ! PROGRAM TEST
SGOPN
あるいは GROPN
で図形出力装置をオープンする
とき, 負の値を入力すれば画面を縦長に使うように指定できます.
既に出力してしまった PostScript の図は dclpsrot
を用いるこ
とにより, 全体を90度回転させることができます. ETC マニュアルの
第 3 章には, sgksrot
を用いて PostScript の図を LaTeX に
組み込む方法が記されています.
sgksrot
は既に obsolete なので, dclpsrot
と読み替えて
頂ければ問題ありませんが, 次のマニュアル改訂では修正されている
ことでしょう.
sh 系のシェルは ":"が演算子として用いられるため, DCL 内部変数を 例えば
$ export SW:IHEIGHT=480のように設定することができません. そこで
$ export DCLENVCHAR=_ $ export SW_IHEIGHT=480のように環境変数 DCLENVCHAR を設定し, 外部からパッケージ名と内部 変数名のセパレータを変更することによって, 内部変数の値を環境変数 によって指定できるようになります.
お使いのFortranコンパイラにサービス関数 GETARG()
と
IARGC()
が用意されていないからだと思います. 管理者に相談さ
れることをお奨め致します.
SWCSET
でカラーマップや出力ファイル名が変更できません.
関数 SWCSET
が SGOPN
或は GROPN
の後で呼ばれていま
せんか? カラーマップ(規定値はcolormap_01.x11)や出力ファイル名(規
定値はdcl.ps)は SGOPN
或は GROPN
から呼ばれる関数
SWDOPN
内で確定されます. したがって, プログラム内でカラーマッ
プや出力ファイル名を変更したい場合には, SGOPN
或は
GROPN
の前で SWCSET
を呼ばねばなりません.
その通りです. といっても高速フーリエ変換(FFT)となるのは, データ 長が 2nや (2i)(3j)(5k)のような場合の時で, データ長が素数の場合には単なるデジタルフーリエ変換となります. 時 系列解析でデータ数が多い場合には, 最初或は最後のデータを1個や2個 削ったところで結果が大きく変わることはありませんから, うまく約数 の多いデータ数に調節してあげると計算速度の向上に繋がるでしょう.
UDPACK で描かれるラベル付きの等値線は, GRPH1 の SGpGET/SGpSET が
管理する内部変数 'LCHAR' を .TRUE. に設定して,実際には線分を描
く下位ルーチンによって描かれてます. ラベル付き線分の描画において,
ラベルを付けるか付けないかに影響する内部変数は以下の通りです.
これらの内部変数を適宜調節すると等値線のラベルが表示されるように
なります.
内部変数 | 説明 | 規定値 |
FWC | 文字列を描くための空白域の幅を全文字幅を単位としてどれだけとるかを指定する係数 | 1.25 |
CWL | 1サイクルあたり,線分部分の長さを文字高を単位として何文字分とるかを指定する係数 | 30.0 |
LBUFF | 折線の終わりが文字列を描くべき空白部分であるとき, そこを線分で結ぶためのバッファリングをするかどうかを指定する. .TRUE.の時にバッファリングを行い, .FALSE. の時にはしない | .TRUE. |
NBUFF | バッファリングをするときその長さを指定する | 20 |
LCURV | 折線のなす角が大きなところなどではラベルを書かないことを指定する. 正確には, LCURV が .TRUE. で, かつ文字を書くべきスペースが次のパラメタ RCURV の係数以下のときラベルを書かない..FALSE. の時にはラベルを書く | .TRUE. |
RCURV | LCURV が .TRUE. で, かつ文字を書くべきスペースが次のパラメタ RCURV の係数以下のときラベルを書かない. | 1.0 |
これは src/grph2/uepack/uearea.f の不具合のようですが, dcl-5.3以 降では修正されています.
等値線間隔のメッセージとタイトルの両方とも描く場合には, 座標軸 →等値線の順に描くとタイトルが上, 等値線間隔のメッセージが下に なります.
UDPACK が描くコンター間隔に関するメッセージは, そのときの座標軸
情報(もっとも外まで文字が描かれている位置; 具体的には UZRGET
の管理する内部変数'ROFFXB')をカンニングして描かれます. そしてメッ
セージを描いたあと, その情報はより外側の位置情報に置き換わります.
そのため, 次に座標軸を描こうとするとタイトルがメッセージより下に 描かれることになります.
こういうときには, ある状態の座標軸情報を覚えるルーチン UZPSAV
を適当なタイミング(座標軸を描く前)に呼んでおいて, メッセージを描
いたあとで UZPRST
を使って UZPSAV
を呼んだ状態に戻して
やればいいかと思います.
UDCNTR
を呼ぶ前に, UDSFMT
を用いると等高線ラベルのフォー
マットを指定することができます. 例えば整数4桁の場合,
CALL UDSFMT('(i4)')とします.
フォーマットについての詳細は「MISC1」マニュアルの FMTLIB を参照 してください.
地図上の描画をする場合には縦横比が投影方法によって自動的に決定さ れますので, 自分が定めた縦横比を持つ仮想画面に描くことはできませ ん.
また, 縦横比が自動的に決定されることから, 指定したビューポート内 に地図がおさまらない場合もあります. その場合は,
CALL GLRGET('rundef', rundef) CALL GRSVPT(vxmin, vxmax, rundef, rundef)と x 方向のビューポートを指定し, y 方向のビューポートを自動決定 させるとビューポートにおさまります.
vymin
, vymax
の値を取得したいのですが, sgrget('vymin', vymin)
では取得できません.
GRSTRF
を呼んだ後で
CALL SGQVPT(vxmin, vxmax, vymin, vymax)とすると, ビューポートの四隅の座標を取得することが出来ます(GRPH1 マニュアル 2.5.1 SGSVPT 参照).
ビューポートの外に地図を描かないために, クリッピングを設定してい ませんか. 地図を描いた後は, クリッピングを設定解除しておきましょ う.
CALL SGLSET('LCLIP', .TRUE.) CALL UMPMAP('coast_world') CALL SGLSET('LCLIP', .FALSE.)
dcl-5.3 以降では正式に陸地部分を特定の色あるいはパターンで塗るルー
チンを導入致しました. 陸地塗り潰しにはサブルーチン UMFMAP
を用います. 使い方は海岸線を描く UMPMAP
と同じで, 引数とし
て海岸線データのファイル名を指定します. 塗り潰しの色やパターンを
変更したい場合には,
CALL UMISET('IPATLAND', 2999)とします. これは色が赤(色番号2)のべた塗り(パターン番号999)に設定 する方法です. また湖を陸地とは別の色で塗りたい場合には,
CALL UMLSET('LFILLAKE', .TRUE.) CALL UMISET('IPATLAKE', 2999)とします. 上記3つの内部変数の規定値は以下の通りです.
IPATLAND : 1999 : 黒のべた塗り IPATLAKE : 9999 : シアンのべた塗り LFILLAKE : .false. : 湖は塗りつぶさない
尚, このべた塗りに対応した海岸線データは現在までのところ,
coast_worldのみです. また Fortran90 版 DCL にはまだ導入されておりません.
coast_japan
DCLのパッケージには国境(border_world), アメリカの州境界 (state_usa), 日本の県境(pref_japan), 大陸のプレート境界 (plate_world)のデータが内包されております. これらは, 海岸線デー タも含めて, Fortranバイナリデータですが, もともとのデータは ASCII 形式で以下のような緯度・経度の並びになっています.
N I maxLAT minLAT maxLON minLON LAT0001 LON0001 LAT0002 LON0002 LAT0003 LON0003 LAT0004 LON0004 LAT0005 LON0005 LAT0006 LON0006 .... ..... LAT_N/2 LON_N/2ここで N はデータの個数(地点数×2), I はデータのインデクス値です では, I=1 が海岸線, I=2 が湖岸線を表すとしております. maxLAT, minLAT, maxLON, minLON はセグメントの北端緯度, 南端緯度, 東端経 度, 西端経度を表します. データは(緯度, 経度)の組が繰り返され, 各 行に5点分(10個のデータ)が収められています. 言うまでもありません が, (LAT0001,LON0001)〜(LAT_N/2,LON_N/2)は連続した折線でなければ なりません. 従って複数の折線の集合としてデータを構成する場合には (これが一般的ですが), 上のようなデータの塊が複数連続したものとな ります. 緯度・経度のデータは Fortran のF型書式指定で '(F8.3)' で 書かれています. このような形式のデータを準備した後に, パッケージ の src/env1/mapdata/ 以下にある cvmapd というコマンドを用いて,
% echo province_china.asc province_china | ./cvmapdとすることにより, province_china というバイナリデータができます ので, このデータを
UMPMAP
に渡してあげれば, 中国の省境を描
くことができます.
海岸線のように塗り潰しを行えるデータにするためには, 上の一塊のデー タの並びは任意の折線に対するものではなく, 一筆書きとなった海岸線 あるいは境界線に対するものとなります. また閉じた海岸線・境界線は 反時計回りに辿らねばなりません. 但し N の最大値は塗り潰しを行う ルーチンの都合で 16384 となっています.
dcl-5.3 よりカラーマップの参照方法の仕様変更がなされました. これ までは
./colormap.x11 DUPATH/colormap.x11 DSPATH/colormap.x11の順番に直接カラーマップファイル colormap.x11 を探しにいっていま したが, dcl-5.3 からは, まず
./cmaplist DUPATH/cmaplist DSPATH/cmaplistの順番に複数のカラーマップファイルが定義されているリスト cmaplist を探索し, 次に SWPACK の内部変数 ICLRMAP で定義されてい る値に対応する順番のファイルを同様の順番に探しに行くようになりま した. 規定値では ICLRMAP=1 なので, 探索するカラーマップファイル の規定値は cmaplist の1番目のファイル colormap_01.x11 となります. ここで DUPATH は DCL の各種データを保存しておくユーザ用のパス名, DSPATH はそれらのオリジナルがインストールされているパス名を表し ます. dcldbs コマンドで DSPATH の確認をすることができます.
dcl-5.2 以前までのように自分の作成したカラーマップファイル (mycolormap.x11) を読ませたい場合には, DUPATHあるいはカレントディ レクトリに
1 mycolormap My_Original_ColorMapという cmaplist を置くだけで実現できます. cmaplist の 1行目はデー タの個数, 2行目以降はファイル名, コメントの組を記載します.
dcl-5.3.1 以降のバージョンには, 堀之内さんによる座標変換ルーチン の拡張が含まれており, それにより鉛直σ座標系で表現されたの3次元 変数の鉛直断面図を手軽に描くことができます. 詳細についてはパッケー ジ内の README_itr51 をご覧下さい. サンプルプログラムも記載してあ ります. σ座標系の描画例はパッケージ内の IMG_g2pk02.png でもご覧 頂けます.
主に2種類の方法があるかと思います. 1つは TeX 側で適切な BoundingBox を設定してあげることです.
\includegraphics*[llx,lly][urx,ury]{file.eps}と指定すると, 左下 (llx,lly) から右上 (urx,ury) までの領域をクリッ ピングしてくれます.
上記方法はクリッピングする位置が分かっている場合にはよいのですが, 通常は gv のような PostScript Viewer で位置を予め調べておくか, 或は試行錯誤で適切な位置を探す必要があります. そこで DCLではお手 軽に余白を取って新しい BoundingBox を設定するスクリプト dclpsmargin を用意しております. 余白は完全に消去するわけではなく, 規定値では図の長辺の 5% の余白を残すようにしてありますが, -m オ プションによりその割合を調節することも可能です. 図にコーナーマー クが存在する場合にはコーナーマークで囲まれた領域にクリッピングさ れるだけですから, 予めコーナーマークを削除しておくことが望ましい でしょう. 「コーナーマークを消したい」 を参照下さい.