$canvas

$canvas.axis2

gdi $canvas.axis2 [$xysystem]

return xysystem

キャンバスの表示用投影法を設定します
アーギュメントxysystemには座標系番号を与えます
1〜19 公共座標系
51〜56 UTM
0を与えると投影計算しません
アーギュメントを省略すると現在の設定値が返ります

測地系(回転楕円体)はgdi $canvas.ellipse2で設定します

$canvas.axis

gdi $canvas.axis [$xysystem]

return xysystem

キャンバスの投影法を設定します
アーギュメントxysystemには座標系番号を与えます
1〜19 公共座標系
51〜56 UTM
100 真球メルカトル
0を与えると投影計算しません
アーギュメントを省略すると現在の設定値が返ります

測地系(回転楕円体)はgdi $canvas.ellipseで設定します

$canvas.bl2xy

gdi $canvas.bl2xy $keido $ido

return {x y}

経緯度をxy座標(M単位実数)に変換します
経緯度は秒単位実数です
このコマンドを使用する前にキャンバスに投影法が設定されている必要があります
投影法の設定はgdi $canvas.projectionコマンドです
UTMの場合は,負数を避けるため東西方向に500Kmのオフセットが加算されます

ある座標系から,キャンバス座標系へ座標変換するにはgdi $canvas.inxyを使用します

$canvas.changemapname

gdi $canvas.changemapname $mapid $filename

mapidにリンクしているファイル名を変更します
このコマンドは絶対パスを設定するために用いられます
(loadWebMapコマンドでロードしたマップにはフォルダ名が付かない)

$canvas.center

gdi $canvas.center [$x $y]

return {x y}

キャンバスの表示中心座標を設定します
$x $yを省略すると現在の中心座標値が返ります
座標はマップ単位(32ビット符号付き整数)です

$canvas.clientcanvas

gdi $canvas.ClientCanvas $servercanvas

$canvas.closedc

gdi $canvas.closeDC

キャンバスのDC(デバイスコンテキスト)を解放します
gdi $obj.displayを使った後に実行します
逆にDCを得るのはgdi $canvas.OpenDCコマンドです

$canvas.closedem

gdi $canvas.closeDEM ["hokan"]

gdi $canvas.readDEM gdi $canvas.writeDEMが開いているDEMタイルファイルを閉じます
"hokan"を与えると標高不明値を埋める処理を行います

$canvas.close

gdi $canvas.close

キャンバスを削除します
キャンバスのレイヤ,オブジェクトは全て削除されます
通常はキャンバスを貼ったウインドウが削除されたときに自動的に
キャンバスも削除されるので,このコマンドを使う機会はあまりありません
gdi $canvas.deleteと同じ機能です

$canvas.clear

gdi $canvas.clear {clipbord|undo|redo|selection|mouse}

キャンバスのバッファをクリアします
クリアするバッファの種類をアーギュメントに与えます(ひとつ)
clipbord クリップボードをクリアします
undo UNDOバッファをクリアします
redo REDOバッファをクリアします
selection オブジェクトセレクションリストをクリアします
mouse 溜まっていたマウスイベントをクリアします

$canvas.copyallsymbol

gdi $canvas.copyallsymbol $canvas2

return num

キャンバスのシンボルリソースの全てを別のキャンバス(canvas2)にコピーします
コピーしたシンボルリソースの数が返ります

$canvas.createdemmesh

gdi $canvas.createDemMesh $classname $layername $altindex $xmin $ymin $xmax $ymax $folder $W $H $type

return olist

標高メッシュポリゴンを発生させオブジェクトリストを返します

classname : ポリゴンのクラス名
layername : ポリゴンのレイヤ名
altindex : 標高をセットする属性インデックス
xmin ymin xmax ymax : 発生範囲(mm単位)
folder : DEMタイルファイルの格納ルートフォルダ
W H : DEMタイルの幅と高さ(M単位)
type : DEMタイルのマップタイプ(dem)

$canvas.cursor

gdi $canvas.cursor [$kind]

return kind

キャンバスのカーソル形状を変更します
kindにはカーソルのキーワードを与えます
kindを省略すると現在の種別が返ります
変更した場合,変更前の種別が返ります

キーワード カーソル種別
wait 砂時計
zoom 虫眼鏡
hand 手(用紙指定)
arrow 矢印
cross 十字
ibeam I形
size 左上右下リサイズ
sizens 垂直リサイズ
sizewe 水平リサイズ
sizeall 垂直水平リサイズ
sizenesw 右上左下リサイズ
sizenwse sizeと同
pan 手(パー)
guu 手(グー)
cut 矢印(ラインカット)
rotateorigin 十字(回転)
rotate 回転

$canvas.delete

gdi $canvas.delete

キャンバスを削除します
アプリケーションオブジェクト(gwin++)により作成されたキャンバスなら
アプリケーションオブジェクトも削除されます
gdi $canvas.closeと同じ機能です

$canvas.dem.new

gdi $canvas.dem.new

return dem

DEMによる陰影・段彩表示設定

gdi $canvas.dem.new shadow $maptype $layername $RGB $direction $angle $mag

maptype : レイヤのマップタイプ (例:dem)
layername : レイヤ名 (例:標高.陰影)
RGB : 陰影色
direction : 入射方向 0:真北 1:北西 2:真西 3:南西 4: 真南 5:南東 (45度刻みの反時計回り)
angle : 入射高度角(度)
mag : 明度変化量縮小係数(0.1〜1.0)

gdi $canvas.dem.new color $maptype $layer $min $max $step

maptype : レイヤのマップタイプ (例:dem)
layername : レイヤ名 (例:標高.段彩)
min : 最低標高(M)
min : 最高標高(M)
step : 刻み値

$canvas.dms2xyscale

gdi $canvas.dms2xyscale

return {xscale yscale}

キャンバスに設定されている線形変換におけるスケール値を返します
線形変換とは経緯度をxy直角座標系に投影するときx方向とy方向
それぞれのスケールを経緯度に乗ずる方式であり,正規化された地図
を扱う場合に用いられます。
X = 経度 * xscale
Y = 緯度 * yscale
x方向とy方向のスケールを持つことにより,緯度による形状の歪みを
少なくしています
ただし,上記計算によるとXY空間をmm精度にした場合32ビット整数では
日本全国を扱えないため,経緯度及びXY座標にそれぞれオフセットを加えて
内部に格納しています
従って内部座標はXY空間ですが絶対位置ではありません
スケールを設定するのはgdi $canvas.FitDMSXYコマンドです

$canvas.dms2xy

gdi $canvas.dms2xy $ws $hs

return {x y}

経緯度をXY座標に変換します
経緯度はgdi $canvas.FitDMSXYコマンドにて登録された値を乗じて整数化
した秒で与えます
通常は秒を1000倍か10000倍して求めた整数です。

$canvas.drawmesh

gdi $canvas.drawmesh $layer $vlayer $x $y $dx $dy $angle $xmin $ymin $xmx $ymax

メッシュを作図します
$lyer : メッシュ図形のレイヤハンドル
$vlayer : 揮発レイヤハンドル
$x $y : 原点座標
$dx $dy : 水平、垂直方向の間隔
$xmin $ymin $xmx $ymax : メッシュを作図する範囲

$canvas.editreference

gdi $canvas.EditReference [$enable]

return enable

リファレンスオブジェクト編集可能モードを尋ねます
編集不可なら0,可能なら1が返ります
編集可能な時gdi $obj.referenceは常に0を返します
gdi $obj.ReferenceIDは編集モードに限らず本来の値
を返します

アーギュメント$enableを与えるとモードを変更します
 参照
   gdi $obj.id
   gdi $obj.maxid

$canvas.editstart

gdi $canvas.editstart $filename [direct]

@protection=0のリファレンスオブジェクトがあれば$filenameのマップファイルを書き換えてオブジェクトのprotection=2をセットします
Aその後、$filenameからロードされたオブジェクトのprotectionを0セットし、その他のオブジェクトのprotectionを2にセットします
ただし、アーギュメントにdirectが渡された場合はAの処理はありませんが@の結果として$filenameからロードされたオブジェクトのprotectionは2がセットされます
Aはマップファイル編集モード開始用、directが与えられた場合はダイレクト編集時のマップファイル保存前処理です

参照:gdi $canvas.editend

$canvas.editstart

gdi $canvas.editstart $filename

指定されたファイル名(filename)のオブジェクトを修正可能にします
具体的にはprotectionを0、他のファイルのオブジェクトのprotectionを2に設定します
もし対象ファイルに属するオブジェクトのprotectionが0のものがあれば初めての編集
ですのでprotection=2としたオブジェクトをファイルに保存します

$canvas.ellipse2

gdi $canvas.ellipse2 [$ellipse]

return ellipse

キャンバスの表示用測地系を設定します
アーギュメントellipseには楕円体名を与えます
  BESSEL WGS84 GRS80 GRS83 CLARKE IAU65 GRS67
  空文字,{},- のいずれかを与えると投影計算しません
現在の設定値が返ります

投影法はgdi $canvas.axis2で与えます
両方同時に与えるにはgdi $canvas.projection2を用います

$canvas.ellipse

gdi $canvas.ellipse [$ellipse]

return ellipse

キャンバスの測地系を設定します
アーギュメントellipseには楕円体名を与えます
  BESSEL WGS84 GRS80 GRS83 CLARKE IAU65 GRS67
  空文字,{},- のいずれかを与えると投影計算しません
現在の設定値が返ります

投影法はgdi $canvas.axisで与えます
両方同時に与えるにはgdi $canvas.projectionを用います

$canvas.enddocument

gdi $canvas.endDocument $prnhdc

印刷スプールを終了し印刷します

$prnhdc にはプリンタのDC(デバイスコンテキスト)を与えます
プリンタDCはgdi createPrinterDCコマンドで取得します
このプリンタDCはstartDocumentに与えたものと同じであること

下記のように、ページを印刷するコマンドの最後に実行します
ページ出力にエラーがあった場合には実行してはいけません

if {[gdi $canvas.startDocument $prnhdc]} {
if {[gdi $canvas.mapPrint $prnhdc]} {
gdi $canvas.endDocument $prnhdc
}
}

参照
  gdi PaperSize
  gdi PaperSizeDot
  gdi SetPaperSize
  gdi SetPaperLayout
  gdi $canvas.startDocument
  gdi $canvas.mapPrint
  gdi $canvas.hardcopy
  gdi $canvas.print

$canvas.event

gdi $canvas.event $eventname [$procname]

キャンバスにイベントプロシージャを登録します
$eventnameはイベント種類を表すキーワードを与えます
キーワードに大文字小文字の区別はありません
キーワードに続けてイベントプロシージャ名を与えます
イベントプロシージャはそれそれアーギュメントが異なります
省略すると現在のプロシージャ名が返ります

キーワード イベントプロシージャアーギュメント
ERR hcanvas message
SIZE hcanvas mode w h
PREREPAINT hcanvas left top right bottom
REPAINT hcanvas left top right bottom
MOVE hcanvas x y key
LDOWN hcanvas x y key
LDCLICK hcanvas x y
LUP hcanvas x y key
RDOWN hcanvas x y key
RDCLICK hcanvas x y
RUP hcanvas x y key
MDOWN hcanvas x y key
MDCLICK hcanvas x y
MUP hcanvas x y key
KEYDOWN hcnavas keyname
WHEEL hcanvas direction

アーギュメント

アーギュメント
hcanvas キャンバスウインドウハンドル
x y マウス座標(マップ座標)
key 0:キーオープン 1:CTRL 2:SHIFT
keyname キー名
  特殊キーと一般キーが同時に押されている場合は
  特殊キー名 一般キー名のリストが返る
direction 1:前に回転 -1:手前に回転

旧キーワードのLCLICKはLDOWNと同じです

同様にRCLICKはRDOWN,MCLICKはMDOWNと同じです
キーワードに大文字,小文字の区別はありません

$canvas.fire.mouse

gdi $canvas.fire.mouse

MACROコマンド

$canvas.fitdmsxy

gdi $canvas.fitdmsxy [$res] $ws $hs $wx $hy

経緯度をXY直角座標系に変換(線形変換)する比率を設定します
resは経緯度の秒を整数化するための乗数を与えます
resを省略するとデフォルト値1000になります
ws hs は整数化した秒で東西,南北の距離を与えます
wx hy はX,Y方向の対応距離をマップ単位で与えます
マップ単位はgdi $canvas.mapunitで設定されていなければなりません
このコマンドは
  gdi $canvas.dms2xy,gdi $canvas.xy2dms,
  gdi $canvas.s2xy,gdi $canvas.xy2s,
  gdi $canvas.sec2xy,[gdi $canvas.xy2sec}
を使用する前に実行しておかなければなりません

$canvas.fitwms

gdi $canvas.fitwms $w $h $xmin $ymin $xmax $ymax

x,y方向それぞれのスケールを設定します(screen_len/map_len)
$w,$hはスクリーンのサイズです
$xmin $ymin $xmax $ymaxはスクリーン全体に表示させるマップ範囲です。
WMSの画像生成に使用されます
解除するには gdi $canvas.fitを実行します

$canvas.fit

gdi $canvas.fit $app

gdi $canvas.fit [$app] $w $h $xmin $ymin $xmax $ymax

キャンバスのスクリーン上の範囲と,対応するマップ座標を与えることにより
表示スケールを設定します
w と h はスクリーン上でのキャンバスのサイズです(ピクセル単位)
(ピクセル数-1 = サイズ)
xmin ymin xmax ymax は対応するマップの矩形範囲です
x方向とy方向のスケールは同値が用いられます。したがって
例えば縦方向に比して横方向のみを延ばした表示等はできません。

$canvas.flashstop

gdi $canvas.flashstop

点滅表示を終了します

$canvas.fullarea

gdi $canvas.fullarea

マップ全体がスクリーンに表示されるように表示中心とスケールを設定します
gdi $canvas.redrawを実行すると表示されます
リファレンスオブジェクトも含まれた「全体」です

$canvas.gomu

gdi $canvas.gomu $switch [...]

ラバーバンド,十字カーソル,グリッドコマンド

gdi $canvas.gomu id [$id]

return id

使用していないラバーバンドIDが返ります
アーギュメントに$idを与えると、そのid以降から未使用のidを探します
IDは0から19の範囲です。
-1が返れば全て使用済みです

ラバーバンドオブジェクトは同時に20個作成できます
全てのラバーバンドコマンドにはラバーバンドオブジェクトを特定するための
IDを与えます。IDを省略すると0と見なされます
IDは0から19の範囲です。

gdi $canvas.gomu new $x $y [$id]

ライン型ラバーバンドオブジェクト作成(頂点追加)
$x $yは始点(追加頂点)座標

gdi $canvas.gomu newrect $x1 $y1 $x2 $y2 [$id]

矩形型ラバーバンドオブジェクト作成・修正
左下,右上座標を与えます
既に存在していれば変更になります

gdi $canvas.gomu newcircle $x $y $r [$id]

円型ラバーバンドオブジェクト作成・修正
中心座標と半径を与えます
既に存在していれば変更になります

gdi $canvas.gomu newpoly $x $y [$id]

ポリゴン型ラバーバンドオブジェクト作成(頂点追加)
$x $yは始点(追加頂点)座標

gdi $canvas.gomu newobj $layer $x $y [$id]

return obj

アニメートオブジェクト新規作成
$x $yはオブジェクトの始点座標です
返されたオブジェクトのプロパティはgdi $obj.*コマンドで与えます

gdi $canvas.gomu animateobj $obj $x $y [$id]

return obj

既存オブジェクト(obj)をコピーしてアニメートオブジェクトを作成します
$x $yはコピーオブジェクトの始点座標です(即ち移動されて作成されます)
返されたオブジェクトのプロパティはgdi $obj.*コマンドで変更・参照できます

gdi $canvas.gomu mouse $x $y [$id]

現在の終点とマウスポインタの間にラバーバンドを表示します
円の場合にはマウスポインタ上に円周が乗るように半径が変更されます
矩形の場合にはマウスポインタ位置に隅が乗るように矩形サイズが変化します
アニメートオブジェクトには機能しません

gdi $canvas.gomu movestart $x $y [$id]

ラバーバンドオブジェクトを移動モードにします
$x $yは移動原点です
全てのラバーバンドオブジェクトに有効です

gdi $canvas.gomu moveend [$id]

ラバーバンドオブジェクトを移動モードを終了します
全てのラバーバンドオブジェクトに有効です

gdi $canvas.gomu ismove [$id]

return movemode

ラバーバンドオブジェクトを移動モード(1か0)を返します
1が返れば移動モードです
全てのラバーバンドオブジェクトに有効です

gdi $canvas.gomu move $x $y [$id]

ラバーバンドオブジェクトを移動します
ラバーバンドオブジェクトを移動モードに設定するときに指定した原点座標が
$x $yに重なるように移動されます
全てのラバーバンドオブジェクトに有効です

gdi $canvas.gomu modify $index $x $y [$id]

ラバーバンドオブジェクトの頂点座標を変更します
$indexは頂点番号です(0から)
$x $yは新しい座標値です
円型のラバーバンドオブジェクトの場合,index=0は中心座標変更になり,
index=1は半径($x)の変更になります。その場合$yはダミー値を与えます
矩形型ラバーバンドオブジェクトの場合,indexは0か1です
その他のラバーバンドオブジェクトの場合にはindexが頂点数を超えないように
注意して下さい(index<頂点数)
このコマンドを実行すると自動的に移動モードはOFFされます

gdi $canvas.gomu modifyB $index $x $y [$id]

ラバーバンドオブジェクトの矩形形状を維持して座標を変更します
$indexは頂点番号です(0から)
$x $yは新しい座標値です
頂点数が4以外のラバーバンドオブジェクトに対しては無効です
従って円型,矩形型には絶対に無効です。
このコマンドを実行すると自動的に移動モードはOFFされます

gdi $canvas.gomu modifyR $index $x $y [$id]

ラバーバンドオブジェクトの長方形形状を維持して座標を変更します
(全ての内角が90度であるように維持して変更)
$indexは頂点番号です(0から)
$x $yは新しい座標値です
頂点数が4以外のラバーバンドオブジェクトに対しては無効です
従って円型,矩形型には絶対に無効です。
頂点番号により下記の修正になります
  頂点0 移動
  頂点1 原点を頂点0にして回転のみ
  頂点2 頂点0-頂点1方向のスケーリング(頂点0座標固定)
  頂点3 頂点1-頂点0方向のスケーリング(頂点1座標固定)
このコマンドを実行すると自動的に移動モードはOFFされます

gdi $canvas.gomu modifyT $index $x $y [$id]

ラバーバンドオブジェクトの長方形形状を維持して座標を変更します
(全ての内角が90度であるように維持して変更)
$indexは頂点番号です(0から)
$x $yは新しい座標値です
頂点数が4以外のラバーバンドオブジェクトに対しては無効です
従って円型,矩形型には絶対に無効です。
頂点番号により下記の修正になります
  頂点0 移動
  頂点1 原点を頂点0にして回転のみ
  頂点2 XY方向スケーリング(頂点0座標固定)
  頂点3 XY方向スケーリング(頂点1座標固定)
このコマンドを実行すると自動的に移動モードはOFFされます

gdi $canvas.gomu length [$id]

return length

ラバーバンドオブジェクトの長さを返します
全てのラバーバンドオブジェクトに有効です

gdi $canvas.gomu area [$no]

return area

ラバーバンドオブジェクトの面積を返します
全てのラバーバンドオブジェクトに有効です

gdi $canvas.gomu obj [$id]

ラバーバンドオブジェクトがアニメートオブジェクトである場合にオブジェクトハンドルを返します

gdi $canvas.gomu undo [$id]

最後に入力されたラバーバンドオブジェクトの頂点をひとつ削除します
アニメートオブジェクトには無効です
矩形型,円型ラバーバンドオブジェクトの場合には削除になります

gdi $canvas.gomu delete [$id]

ラバーバンドオブジェクトを削除します
ただしラバーバンドオブジェクトがロックされている場合には削除されません
その場合にはアンロックしてからこのコマンドを実行しなければなりません
ロックの設定/解除はlock/unlockコマンドで行います

gdi $canvas.gomu erase [$id]

ラバーバンドオブジェクトを非表示にします
ラバーバンドオブジェクトの表示は自動的に行われますが,ラバーバンドオブジェクト
から座標を取得し,実際のオブジェクトを重ね書きする場合などはラバーバンド
を先に削除するか非表示にしないとラバーバンドオブジェクトの残像が残る場合
があります

gdi $canvas.gomu show

ラバーバンドオブジェクトを表示します
非表示にしたラバーバンドオブジェクトを再表示する場合に使用します

gdi $canvas.gomu lock [$id]

ラバーバンドオブジェクトをロックします
ロックされているラバーバンドオブジェクトは削除できません

gdi $canvas.gomu unlock [$id]

ラバーバンドオブジェクトをアンロックします

gdi $canvas.gomu num [$id]

return num

ラバーバンドオブジェクトの頂点数を返します
円型,矩形型の場合は必ず2が返ります

gdi $canvas.gomu geometry [$id]

return {x1 y1 ... xn yn}

ラバーバンドオブジェクトの頂点座標リストを返します
昔のコマンドはgdi gomu coo $canvas [$id]です

gdi $canvas.gomu point $index [$id]

return {x y}

ラバーバンドオブジェクトのindex番目の頂点座標を返します
indexは0からです

十字カーソル

gdi $canvas.gomu cursor {on|off}

十字カーソル(キャンバス全体の十字カーソル)の表示をON/OFFします

gdi $canvas.gomu cmove $x $y

十字カーソルの位置を移動します
通常はマウスの移動イベントプロシージャから実行します

gdi $canvas.gomu cerase

十字カーソルを非表示にします
通常は使われません

gdi $canvas.gomu credraw

十字カーソルを再表示にします
通常は使われません

グリッド

グリッドの表示のみを管理します
座標値をグリッド単位に丸める処理を行うものではありません

gdi $canvas.gomu grid $pitch $ang $x0 $y0

グリッド間隔(pitch),グリッド角度(ang),グリッド原点(x,y)を設定し
その後グリッド表示モードをONにして,直ぐに表示します
ただし表示グリッド間隔が5ピクセル未満なら表示されません
(真っ黒になってしまうので)

gdi $canvas.gomu gridxy $x $y

グリッドの原点のみ変更します
その後グリッド表示モードをONにして,直ぐに表示します

gdi $canvas.gomu gridoff

グリッド表示モードをOFFにして直ぐに非表示にします

gdi $canvas.gomu gridon

グリッド表示モードをONにして,直ぐに表示します

gdi $canvas.gomu gridredraw

グリッドが表示ONの場合にのみ再表示します
何らかの原因で表示が乱れた場合に実行します
通常は使いません

$canvas.grayscale

gdi $canvas.grayscale $glob [$onoff]

return num

$glob
グレイスケールに設定するレイヤのレイヤ名検索条件を与えます
*を記述できますが、*は先頭か末尾だけです。中間には記述できません。

下水.共用.*
*.共用.*
*

$onoff
1かon レイヤの表示色をグレースケールにします
0かoff カラー表示に戻します
省略 初期設定状態に戻します
初期設定状態とはレイヤのプロパティ値として設定した状態です。

設定したレイヤ数が返ります。

揮発レイヤやシンボルを構成するレイヤにこのコマンドは適用できませんが、
レイヤに適用することで、シンボルも揮発レイヤの色もグレスケール表示されます

$canvas.hardcopy

gdi $canvas.hardcopy $prnhdc [$scale]

マップを印刷します
スクリーンに表示されている範囲が印刷されます
$prnhdcはプリンタのDC(デバイスコンテキスト)です
プリンタDCはgdi createPrinterDCコマンドで取得します
印刷後にprnhdcは自動的に削除されます
$scaleを与えると地図縮尺を指定して印刷できます
$scaleは分母値で与えます。
ただしマップ単位がmmであるとして計算するので,マップ単位がmmでない
場合には$scaleを調整します。
例えばcm単位のデータを1/500で印刷したい場合には
scale = 50
を与えます。
マップ単位をキャンバスから抽出して計算すれば汎用的になります
set scale [expr 500/[gdi $canvas.mapunit]]

参照
  gdi PaperSize
  gdi PaperSizeDot
  gdi SetPaperSize
  gdi SetPaperLayout
  gdi $canvas.startDocument
  gdi $canvas.endDocument
  gdi $canvas.print
  gdi $canvas.mapPrint

$canvas.id

gdi $canvas.id

return id

これから作成されるオブジェクトに付与されるIDを取得します

$canvas.importdem

gdi $canvas.importDEM $xmlfile $folder $W $H $type

国土地理院基盤図標高データXMLからDEMタイルを出力

xmlfile : xmlファイル名(絶対パス)
folder : 出力タイルのフォルダ名
W H : 出力タイルの幅と高さ(M単位)
type : マップタイプ

参照 gdi $canvas.readDEM

$canvas.inxy

gdi $canvas.inxy $X $Y

return {x y}

表示用座標系座標(M単位)をマップ内部座標系に変換して返します
(gdi $canvas.projection2で設定されている座標系からの変換)
$X,$YはM単位の表示座標です

$canvas.layer

gdi $canvas.layer [$layername]

return {hlayer | hlayerlist}

レイヤ名(layername)を与えるとレイヤハンドルを返します
省略すると,全てのレイヤハンドルリストを表示順で返します

$canvas.limitpresetscale

gdi $canvas.LimitPresetScale $index

小縮尺の限界をセットします
指定した論理スケールに達するとズームアウト禁止になります

$canvas.linearprojection

gdi $canvas.LinearProjection [$ido $res]

return secunit

線形投影パラメータを設定します
idoには中心緯度を秒単位実数で与えます
resには内部で秒を整数で持つための整数化乗数を与えます
整数化乗数が返ります

アーギュメントを省略することもできます
0以外の値が返れば線形投影パラメータが設定済みであることが分かります

$canvas.loadedmaprange

gdi $canvas.LoadedMapRange

return {xmin ymin xmax ymax}

直前にロードしたマップの座標範囲を返します

$canvas.loadmapmem

gdi $canvas.LoadMapMem $mem $size

メモリにロードされたマップファイルイメージからロードします
マップファイルイメージは圧縮もエンコードもされていないマップファイルデータです

memにはメモリアドレス,sizeにはメモリサイズをセットします
このコマンドでロードされたオブジェクトはアクティブマップオブジェクトになります
リファレンスマップオブジェクトとしてロードしたい場合にはLoadRefMapMemを用います

$canvas.loadmapvar

gdi $canvas.LoadMapVar $text $size

Tcl変数にロードされたマップファイルイメージからロードします
マップファイルイメージは圧縮もエンコードもされていないマップファイルデータです

textにマップデータ,sizeにはデータサイズ(==[string length $text])をセットします
このコマンドでロードされたオブジェクトはアクティブマップオブジェクトになります
リファレンスマップオブジェクトとしてロードしたい場合にはLoadRefMapVarを用います

$canvas.loadmap

gdi $canvas.LoadMap $filename

マップファイルを編集目的でロードします
ロードされたオブジェクトはアクティブオブジェクトになります
読み込みモードで開くにはgdi $canvas.LoadRefMapを用います

マップファイル内のレイヤがキャンバスに登録されていない場合には,
  MAP::マップタイプ->GAU $layername
が実行されます。例えばマップタイプが"DM"で,未登録レイヤ名が"街区"なら
  MAP::DM->GAU 街区
が実行され,その戻り値のレイヤ名でオブジェクトロードが行われます
これは「レイヤ読み替え」機能です。もし戻り値が空文字の場合は該当する
レイヤのオブジェクトはロードされません(読み捨て機能)
更に,プロシージャがダイナミックにレイヤを作成し,そのレイヤ名を返す方法を採用する
のが「ダイナミックレイヤ機能」です。

マップタイプはマップファイルを保存するときに与えた文字列です
このマップタイプが未定義ならば(格納されていなければ)
  MAP::Unknown->GAU
が実行されます。

MAPクラスが見つからない場合,tclexgau.ocxに"unknownlayer"イベントが

通知されます。引数はマップタイプとレイヤ名です

$canvas.loadrefmapmem

gdi $canvas.LoadRefMapMem $filename $mem $size

メモリにロードされたマップファイルイメージからロードします
マップファイルイメージは圧縮もエンコードもされていないマップファイルデータです
memにはメモリアドレス,sizeにはメモリサイズをセットします
filenameにはマップデータを識別するための文字列をセットします
通常はマップファイルURLです。

このコマンドでロードされたオブジェクトはリファレンスマップオブジェクトになります
アクティブマップオブジェクトとしてロードしたい場合にはLoadMapMemを用います

$canvas.loadrefmapvar

gdi $canvas.LoadRefMapVar $filename $text $size

Tcl変数にセットされたマップファイルイメージからロードします
マップファイルイメージは圧縮もエンコードもされていないマップファイルデータです
textにデータ,sizeにデータサイズ(==[string length $text])をセットします
filenameにはマップデータを識別するための文字列をセットします
通常はマップファイルURLです。

このコマンドでロードされたオブジェクトはリファレンスマップオブジェクトになります
アクティブマップオブジェクトとしてロードしたい場合にはLoadMapVarを用います

$canvas.loadrefmap

gdi $canvas.LoadRefMap $filename ["update"]

return success

マップファイルを参照用としてロードします
成功したら1,失敗したら0が返ります
すでにロード済みの場合にも1が返ります

"update"アーギュメントを与えると、update値をそのままロードします
省略するとupdate値はクリアされます

編集するためにロードしたい場合にはgdi $canvas.LoadMapを用います

$canvas.loadwebmap

gdi $canvas.LoadWebMap $hex $header [update]

return mapname

圧縮されBASE64エンコードされたマップファイルイメージデータをロードします
hexにマップファイルイメージデータを与えます
headerにはNULL文字を与えます(互換性維持のため残存)
成功したらマップ名が,失敗したらNULLが返ります
すでにロード済みの場合にもNULLが返ります(ロードはされません)
ロードされたオブジェクトはリファレンスオブジェクトになり,修正できません

"update"アーギュメントを与えると、update値をそのままロードし,
ロードされたオブジェクトをオブジェクトリストで返します
省略するとupdate値はクリアされ、成功したらマップ名が,失敗した
らNULLが返ります

$hexデータは
set hex [gdi CmpHex $infile $outfile $before $after]
で作成されたものです

作成例
set hex [gdi CmpHex test.map test.htm {<!--MYMAP test.map} {-->}]
ロード例
gdi $canvas.LoadWebMap $hex {<!--MYMAP}

$hexに複数のマップイメージがあれば複数のマップがロードされます

$canvas.logclose

gdi $canvas.LogClose

ログファイルを閉じます(ロギング終了)
クローズしたらファイルも削除しなければなりません
マップファイルをsaveしたら実行すべきです
ログファイルを作成するコマンドは
  gdi $canvas.LogCreate
です

$canvas.logcreate

gdi $canvas.LogCreate $filename

ログファイルを作成します(ロギング開始)
成功すると1,失敗すると0が返ります
gdi $canvas.LoadMapの直後に実行すべきコマンドです
ログファイルはシステムダウンしたときのデータ復旧のための操作ログです
オブジェクトの作成,消去,修正操作を記録できます
それぞれを行うコマンドが用意されています
  gdi $obj.lognew
  gdi $obj.logdelete
  gdi $obj.log
ログファイルを閉じるのは
  gdi $canvas.logclose
です。クローズしたらファイルも削除しなければなりません
復旧のためログファイルを実行するコマンドは
  gdi $canvas.logexec $fname
です。

$canvas.logexec

gdi $canvas.LogExec $filename

システムダウンにより失われたデータを復旧するためログファイルを実行します
gdi $canvas.LoadMapの直後にログファイルの存在を調べ,ファイル(filename)
があればこのコマンドを実行します。
復旧したデータを保存した場合は必ずログファイルを削除してください。
ログファイルを実行してのデータ復旧処理は,ログに格納されているイベントプロシージャ
を実行しながら進められます

参照
  gdi $canvas.logcreate
  gdi $canvas.logclose
  gdi $obj.log
  gdi $obj.lognew
  gdi $obj.logdelete

$canvas.logicalscale

gdi $canvas.LogicalScale [$index]

現在の論理スケールを返します
indexを与えると,表示スケールをindex番目の論理スケールに変更します
つまり表示拡大・縮小操作になります
ただし,正しく表示させる為には,内部マップ単位とスクリーンの実幅が
あらかじめ設定されている必要があります。これらは
  gdi $canvas.mapunit
で設定します

論理スケールとは地図情報レベルを表す整数値であり小さい程情報量が多い
(大縮尺)事を表します。
論理スケールは0から17までの18段階があります
論理スケールはアプリケーション側で自由に設定します
そして論理スケールにはレイヤの表示,非表示を設定することができます
論理スケールを設定するのはgdi $canvas.PresetScaleコマンドです

$canvas.logicaltoreal

gdi $canvas.LogicalToReal $index

論理スケール番号に割付られている実縮尺を返します
実縮尺とは地図縮尺そのものです
実数で返されます。即ち1/500なら0.002が返ります
論理スケールに付いてはgdi $canvas.LogicalScale解説を参照して下さい

$canvas.logicaltoscale

gdi $canvas.LogicalToScale $index

論理スケール番号に対応する表示スケールを返します
表示スケールとは内部マップ座標をスクリーンピクセル座標に投影する際の乗数です
実縮尺とは異なることに注意して下さい
論理スケールに付いてはgdi $canvas.LogicalScale解説を参照して下さい

$canvas.macro

gdi $canvas.macro [{0|1}]

return current

$canvas.mapbitmaplasterror

gdi $canvas.MapBitmapLastError

return error_msg

gdi $canvas.MapBitmapが失敗した場合の原因を示す文字列を返します

$canvas.mapbitmap

gdi $canvas.MapBitmap $pw $ph $dpi [[$filename] [transparent] [brgb]

return success

マップ全体(WorldRange)をpngファイルに出力します
pw : 画像幅ピクセル数
ph : 画像高ピクセル数
dpi : dot/inch
filename : bmpファイル名
省略するとクリップボードにコピー
transparent:透過の有無(1|0)
brgb:透過出力色 R<16+G<8+B

$canvas.mapfilenames

gdi $canvas.MapfileNames [type] [id] [maxid]

return マップファイル名リスト

キャンバスに開かれているリファレンスマップファイル名称をTclリストで返します
キーワード"type"を与えるとマップ名称とマップタイプを順に並べたリストを返します
マップタイプが設定されていない場合にはタイプは空要素として返ります
例:"A.map {} B.map DM C.map SIMA"
マップファイル名はオープンされるときに与えられたパスそのものです
返されるマップ名にはアクティブマップは含まれません。リファレンスマップのみです。

キーワード"id"を与えると更にリファレンス番号も含まれたリストが返されます
リファレンス番号とはロードしたマップファイルの識別用IDです

キーワード"maxid"を与えると更に最大オブジェクトIDも含まれたリストが返されます
最大オブジェクトIDとはロードしたマップファイルに含まれているオブジェクトの最大IDです

$canvas.mapid

gdi $canvas.mapid $filename

return referenceid

$canvas.mapinfo

gdi $canvas.mapinfo $filename

return {version $val maptype $val ellipse $val axis $val unit $val second $val secunit $val}

マップファイルのヘッダ情報を返します
リターン値をarray setのアーギュメントで受ければ配列として参照できます

$canvas.mapprint

gdi $canvas.MapPrint $prnhdc [$title]

reuturn success

マップを印刷します
prnhdcはプリンタのDC(デバイスコンテキスト)です
  プリンタDCはgdi CreatePrinterDCCコマンドで作成します

titleを与えるとその文字列を用紙左上に印刷します

印刷範囲はマップ領域全体です(MapRange)
  マップ領域全体はアクティブオブジェクトだけの全体です
  リファレンスオブジェクトは上記領域に含まれるもののみ印刷されます
 「マップ領域全体」はgdi $canvas.MapRangeで取得できます
  印刷前に意図的にマップ領域を変更すれば望みの範囲のみを
  印刷することができます
マップ領域はプリンタの最大用紙全体に印刷されます。A4プリンタならA4サイズです。
この用紙サイズは用紙規格サイズであり実印刷可能サイズではありません

印刷後に$prnhdcは自動的に削除されます

preview++での出力はこのコマンドを使用しています

参照
  gdi PaperSize
  gdi PaperSizeDot
  gdi SetPaperSize
  gdi SetPaperLayout
  gdi $canvas.startDocument
  gdi $canvas.endDocument
  gdi $canvas.print
  gdi $canvas.hardcopy

$canvas.mappreview

gdi $canvas.MapPreview $prnhdc [$title] [$scale]

return dib

仕様はgdi $canvas.MapPrintと同じですが,印刷するのではなく
印刷イメージを作成してそのDIBハンドルを返します
返されたDIBハンドルをビットマップオブジェクトに与えれば表示できます
ただし,印刷範囲(用紙のピクセル範囲)が大きいと成功しません
印刷プレビューにはviewオブジェクトを使用してください

$canvas.maprect

gdi $canvas.MapRect [$xmin $ymin $xmax $ymax]

return {xmin ymin xmax ymax}

現在スクリーンに表示されている範囲をマップ単位で返します
範囲を与えると表示範囲を変更します
つまり拡大,縮小表示操作になります
似たようなコマンドにgdi $canvas.MapRangeがありますので,混同しない
ように注意してください
このコマンドで表示範囲を変更した場合の戻り値は新しい表示範囲であるわけ
ですが,スクリーンの縦横比とマップ範囲の縦横比が異なる場合には範囲が調整
されますので,同じ範囲が戻るとは限りません。

現在の表示範囲を求めるだけなら他のコマンドでも可能です
  foreach {left top right bottom} [gui get #$canvas client] {}
  foreach {xmin ymin xmax ymax} [gdi $canvas.ScreenToMapRect $left $top $right $bottom] {}
上記プログラムでは,キャンバスのピクセル範囲を求め,それをマップ単位に変換して
います(同じ処理が内部で行われています)

$canvas.maprange

gdi $canvas.MapRange [$xmin $ymin $xmax $ymax]

return {xmin ymin xmax ymax}

すべてのアクティブオブジェクトマップを包含する最小矩形としての
範囲を与えると強制的に書き換えることができます
例えばgdi $canvas.MapPrintコマンドで印刷する場合などです
マップ範囲を強制的に変更した場合は必ず元に戻してください
マップ領域を変更した場合,戻り値は空です

似たようなコマンドにgdi $canvas.MapRectがありますので,混同しない
ように注意してください
リファレンスオブジェクトをも含めたマップ全体領域を求めるコマンドは
  gdi $canvas.WorldRange
です

マップ領域はアクティブオブジェクトがロードされたり作成された時に更新されます
しかし,オブジェクトが削除されたときには更新されません
つまり拡がる方向にしか更新されません
全てのオブジェクトが削除されたときにはリセットされます
リセットされた状態で範囲を取得すると
  xmin > xmax
  ymin > ymax
の値が返るので無効値であることがわかります

$canvas.mapupdate

gdi $canvas.MapUpdate $fname $hfname $del_list $change_list $append_list

return $success

マップファイルを更新します

 $fname マップファイル名
 $hfname 時系列管理用履歴タイルマップ名
 $del_list 削除オブジェクトが格納されたオブジェクトリスト
 $change_list 変更オブジェクトが格納されたオブジェクトリスト
 $append_list 新規オブジェクトが格納されたオブジェクトリスト

削除オブジェクトの子供オブジェクトもすべて削除します
削除オブジェクトがマップに見つからなくてもエラーになりません
ただしオブジェクト削除とは履歴タイルマップへの移動処理です

通常,削除オブジェクトは「削除フラグが立った」オブジェクト群です
  [gdi $canvas.queryDeleted $layer...]
で抽出できます(削除フラグが立ったリファレンスオブジェクト)

変更オブジェクトは
  [gdi $canvas.queryChanged $layer...]
で抽出できます(update!=0のリファレンスオブジェクト)

新規オブジェクトは
  [gdi $canvas.QueryNew $layer...]
で抽出できます(update!=0のアクティブオブジェクトで)

$canvas.maptobmp

gdi $canvas.MapToBmp $fname $xmin $ymin $xmax $ymax [$cbits]

return success

指定範囲をラスタイメージとして作成し,ビットマップファイル(.bmp)に保存します
成功すると1,失敗すると0が返ります
fnameにはファイル名をフルパスで与えます(拡張子は.bmpにして下さい)
cbitsはカラービット数を与えます。例えば2値画像の場合には1,16色画像
の場合には4,256色画像の場合には8を与えます
省略すると8指定と見なされます
作成されるラスタイメージのサイズと解像度は,このコマンドを実行する前に
キャンバスサイズを変更しgdi $canvas.fitコマンドを実行します。
表示状態のままで実行するとサイズ,解像度は現在のキャンバスに従います

$canvas.maptodibex

gdi $canvas.MapToDibEx $xmin $ymin $xmax $ymax $scale $dpm [$color]

return dib

指定範囲を指定解像度,指定カラー数のラスタイメージとして作成し,そのアドレスが格納
されたDIBハンドルを返します

xmin〜ymax マップ範囲を与えます
scale 実縮尺を与えます。例えば1/500なら0.002を与えます
dpm 1mm当たりのビット数を与えます
color カラービット数を与えます。例えば白黒なら1,フルカラーなら24です。
    colorを省略するとカラービット数はディスプレイの設定に従います

DIBハンドルは,ビットマップファイルを作成したり,画像変換したり,ビットマップ
オブジェクトの表示画像として用いることができます
DIBハンドルはビットマップオブジェクトにセットするケースを除きアプリケーション側で使用後に削除
して下さい。削除コマンドはgdi FreeDib $dibです。

$canvas.maptodib

gdi $canvas.MapToDib $xmin $ymin $xmax $ymax [$cbits]

return dib

指定範囲をラスタイメージとして作成し,そのアドレスが格納されたDIBハンドル
を返します
cbitsはカラービット数を与えます。例えば2値画像の場合には1,16色画像
の場合には4,256色画像の場合には8を与えます
省略すると8指定と見なされます
作成されるラスタイメージの解像度はスクリーンの解像度です
DIBハンドルは,ビットマップファイルを作成したり,画像変換したり,ビットマップ
オブジェクトの表示画像として用いることができます
DIBハンドルはビットマップオブジェクトにセットするケースを除きアプリケーション側で使用後に削除
して下さい。削除コマンドはgdi FreeDib $dibです。

$canvas.maptopng

gdi $canvas.MapToPng $fname $xmin $ymin $xmax $ymax

return success

指定範囲をラスタイメージとして作成し,PNGファイル(.png)に保存します
成功すると1,失敗すると0が返ります
fnameにはファイル名をフルパスで与えます(拡張子は.pngにして下さい)
作成されるラスタイメージのカラー数は256色固定です
解像度はスクリーンの解像度です
このコマンドはマップ画像を配信するWebサーバーを構築するときに活用されます

$canvas.maptoscreenrect

gdi $canvas.MapToScreenRect $xmin $ymin $xmax $ymax

return {left top right bottom}

マップ座標範囲を,現在の表示スケールと中心に従ってスクリーン座標範囲に
変換します
逆の処理を行うのがgdi $canvas.ScreenToMapRectです

$canvas.maptoscreen

gdi $canvas.MapToScreen $x $y

return {px py}

マップ座標を,現在の表示スケールと中心に従ってスクリーン座標に
変換します
逆の処理を行うのがgdi $canvas.ScreenToMapです

$canvas.maptype

gdi $canvas.maptype $mapid

return maptype

$canvas.mapunit

gdi $canvas.MapUnit

現在のマップ単位が何mmかを返します
例えばcm単位なら10を返します
デフォルトは1に設定されています

gdi $canvas.MapUnit $mm [$w]

マップの単位が何mmに相当するかを与えます
例えばcm単位なら10を与えます
デフォルトは1に設定されています
省略可能なw値にはスクリーン幅(mm)を与えます
論理スケールを使用する場合にはスクリーン幅をキャンバスに設定する必要があります

$canvas.maxsize

gdi $canvas.MaxSize $maxW $maxH $right_space $bottom_space

キャンバスの最大幅と高さ,及び右余白と下余白を設定します
このコマンドで設定されたサイズ以上にはリサイズができないようになります
更に右余白と下余白分だけ小さくされます
全てピクセル単位で与えます

$canvas.namespace

gdi $canvas.namespace [$name]

return name

キャンバスに名前をセットします

省略すると現在の名前が返ります
セットされていなければ空文字が返ります

$canvas.newlist

gdi $canvas.newlist

return olist

空のオブジェクトリストを作成します
作成されたオブジェクトリストハンドルが返ります
オブジェクトリストには図形オブジェクトを要素として挿入できます
例えば条件検索に該当するオブジェクトを記憶したい場合などには
オブジェクトリストに格納し,後にそれらを順に取り出して処理します
作成したオブジェクトリストは使用後に削除しなければなりません
オブジェクトリストへのアクセスには[gdi $olist.*]コマンドが用意されています

$canvas.newlayer

gdi $canvas.newlayer $layername $gtype

return layer

キャンバスに新しいレイヤを作成し例やハンドルを返します
layernameには作成するレイヤ名称を与えます(255文字以内)
gtypeには図形タイプの名称,または番号を与えます

図形タイプ 名称 番号
道路 road 1
circle 2
ラインストリング string 3
ポリゴン polygon 4
テキスト text 5
シンボル symbol 6
シンボルライン symbolline 7
シンボルポリゴン symbolpolygon 8
ビットマップ bmp 10
エリアテキスト areatext 11
円弧 arc 12
扇形 fan 13
矩形 rectangle 15
長方形 square 16
ビュー view 17
アイコン aicon 18

$canvas.newstyle

gdi $canvas.newstyle $name $kind [...]

第1アーギュメントにスタイル名称($name)を与えます
  この名称がシンボルラインレイヤのappstyleプロパティ値になります
第2アーギュメント($kind)にsymbolかdashかsolidを与えます
  symbol は「シンボル配置型スタイル」
  dash は「破線型スタイル」
  solid は「実線型スタイル」
第3アーギュメント以降にそれぞれのパラメータをキーワード,値を与えます
値はリストではなくそれそれをアーギュメントで渡します

既に同名のスタイルが存在する場合はプロパティの変更になります

【symbolスタイルアーギュメント】

 キーワード
 symbol $Ss $Sm $Se
 span $Ls $Lm $Le
 limit $limit
 adjust on | off
symbol シンボルライン,シンボルポリゴンに適用するスタイルを作成します
    Ss,Seは始終点シンボルハンドル,Smは中間シンボルハンドルです
    これらのシンボルハンドルは\gdi \$canvas.symbol\コマンドで作成します(ダイナミックサイズのみ)
spanは シンボル配置間隔です
    シンボルハンドルに0を与えるとシンボルは配置されませんがスパンは有効です。
    スパンに負数を与えると無効であり対応シンボルも配置されません。
      Ss   Sm   Sm   Se
    ---●-------■------■-----▲---
    Ls   Lm   Lm   Lm  Le
    各スパンは係数aが求められ調節されます
      Len = a * ( Ls + Lm * n + Le)
        ただし n>=0
        Len=全長
limit スタイル描画する場合のライン最小長(mm)です
   最小長未満のときlimitが正数なら中点にSsシンボルを配置します
adjust シンボルが頂点上に置かれないように調整するか否かを指定します

【破線スタイルアーギュメント】

 キーワード
 width $w
 color $red $green $blue
 join round | sharp
 start on | off
 span $Ls $L0 $L1 $Le
 limit $limit
width 線幅です。mm実寸で与えます。
color 線色です。RGB値を与えます。
   ただしレイヤにpaint==onが設定されている場合,レイヤのRGB値が優先します。
join 頂点部で折れる部分の描画方法です。
   roundを与えると丸く整形されます。
   sharpを与える尖って描画されます。
start 始点側の実線/隠戦の指定です
   onのとき実線から始まり実線で終わる指定です
   offのとき隠線から始まり隠線で終わる指定です
span 実線,隠線の長さです
    ■■□□□■■■□□□■■■□□□■■
     Ls L0  L1  L0  L1  L0  Le
   
   各スパンは係数aが求められ下記式が成立するように調節されます
    Len == a * ( Ls + (L0 + L1) * n + L0 + Le)
      ただし n>=1
      Len=全長
limit スタイル描画する場合のライン最小長(mm)です
   ラインが最小長未満のときlimitが負数なら隠線,正数なら実線で描画されます

【実線スタイルアーギュメント】

 キーワード
 width $w
 color $red $green $blue
 join round | sharp
 start on | off
 span $Ls $Le
 limit $limit
width 線幅です。mm実寸で与えます。
color 線色です。RGB値を与えます。
    ただしレイヤにpaint==onが設定されている場合,レイヤのRGB値が優先します。
join 頂点部で折れる部分の描画方法です。
    roundを与えると丸く整形されます。
    sharpを与える尖って描画されます。
start 始点側の実線/隠戦の指定です
    onのとき実線から始まり実線で終わる指定です
    offのとき隠線から始まり隠線で終わる指定です
span 始終点端の隠線の長さです
    □□□■■■■■■□□□
     Ls         Le
limit スタイル描画する場合のライン最小長(mm)です
   ラインが最小長未満のときlimitが負数なら隠線,正数なら実線で描画されます

$canvas.newsymbol

gdi $canvas.newsymbol $name

return symbol

キャンバスにシンボルリソースオブジェクトを作成します
シンボルリソースオブジェクトハンドルが返ります
nameにはシンボルリソース名を与えます
この名称はレイヤプロパティの"symbol"プロパティで使用されます

返されたシンボルリソースオブジェクトにレイヤを作成し,更にそのレイヤに図形オブジェクト
を作成することによりシンボルリソース作成が完了します

「シンボルリソース」と「シンボル」は違います
図形タイプが「シンボル」のレイヤに作成されたオブジェクトをシンボルオブジェクトと呼び,
シンボルオブジェクトの形状を提供するのが「シンボルリソース」オブジェクトです。
実際には,シンボルレイヤはシンボルリソースのコピーを保持し,シンボルオブジェクトの位置に
それらを描画するという方式になっています。

$canvas.newvlayer

gdi $canvas.newVlayer [$name]

return vlayer

キャンバスに揮発レイヤを作成します
揮発レイヤハンドルが返されます
0が返れば失敗です

揮発レイヤには名称を与えることも省略することもできます
揮発レイヤは個々の図形オブジェクトに与える事により,本来の表現を変更する
為に利用されます。例えば色分けなどです。
図形オブジェクトの表現形式は,そのオブジェクトが属するレイヤが持っています
これを一時的に変更するためのレイヤなので「揮発レイヤ」と呼びます
gdi $obj.vlayerコマンド解説を参照して下さい

揮発レイヤの下にオブジェクトを作成することはできません
揮発レイヤはキャンバスが削除されるときに自動的に削除されます
[gdi $vlayer.savemap 1]を実行した揮発レイヤがオブジェクトにセットされたまま
マップに保存されると揮発レイヤ名がオブジェクトのプロパティとして保存され,
ロード時に自動セットされます

$canvas.numflash

gdi $canvas.numFlash

return num

点滅表示しているオブジェクトの数を返します

$canvas.nummaps

gdi $canvas.numMaps

return num

キャンバスに開かれている(ロードされた)リファレンスマップの数を返します

$canvas.objundermouseex

gdi $canvas.ObjUnderMouseEx $x $y $distance

return obj

x,yの座標(マップ座標)の下にあるオブジェクトを検索し,発見したオブジェクト
ハンドルを返します
セレクションが禁止されているオブジェクトも検索します
この点を除いてObjUnderMouseと同機能です

$canvas.objundermouse

gdi $canvas.ObjUnderMouse $x $y $distance

return obj

x,yの座標(マップ座標)の下にあるオブジェクトを検索し,発見したオブジェクト
ハンドルを返します
セレクションが禁止されているオブジェクトは検索対象から場外されます
(セレクションが禁止されているオブジェクトも検索するのはObjUnderMouseExです)
distanceには検索範囲をピクセル単位で与えます(半径)
発見されなかった場合は0が返ります

このコマンドはマウスでオブジェクトをセレクションする操作に用いられます
複数のオブジェクトが重なってた場合,最前面に表示されているオブジェクトが
返されます
オブジェクトがポリゴンのような領域を持つ場合には内外判定が行われます。
その場合にdistanceは配慮されません(点の内外判定が行われます)

$canvas.obj

gdi $canvas.obj [$layer]

return num

オブジェクトの総数を返します
レイヤハンドル(layer)を指定すると,そのレイヤのオブジェクト数だけを返します
(gdi $layer.num と同じです)

$canvas.opendc

gdi $canvas.OpenDC

return hDC

キャンバスのDC(デバイスコンテキスト)を返します
gdiコマンドでDCを受け取るものはありません
他のシステムに渡す必要がある場合などに利用します
DCは利用後にgdi $canvas.CloseDCで解放して下さい

$canvas.opened

gdi $canvas.opened $filename

return yes

マップファイルが既にオープンされているか否かを1か0で返します
filenameにはオープンする時に指定したであろうファイル名をフルパスで与えます

アクティブマップの検出には使用できません
オープンされているリファレンスマップの数を調べるのは
  gdi $canvas.numMaps
です。
オープンされているリファレンスマップのファイル名リストを得るのは
  gdi $canvas.MapfileNames
です

$canvas.outxy

gdi $canvas.outxy $x $y

return {X Y}

マップ内部座標を表示用座標系に変換してM単位で返す
(gdi $canvas.projection2で設定されている座標系への変換)
$x,$yはマップ内部座標

$canvas.pan

gdi $canvas.pan start $x $y

gdi $canvas.pan $x $y
gdi $canvas.pan stop $x $y

パンニング開始,パンニング,パンニング終了
$x $y はマップ座標

$canvas.pastable

gdi $canvas.pastable

return bool

貼り付けが可能か否かを返します

クリップボードはWindowsのクリップボードではなく,gdi固有のクリップボードです
  gdi $olist.clip cut
  gdi $olist.clip copy
  gdi $olist.clip paste
を参照して下さい

$canvas.past

gdi $canvas.past

return num

カットもしくはコピーコマンドでクリップボードに格納されているオブジェクトを
キャンバスに貼り付け(コピーして),そのオブジェクト数を返します
クリップボードはWindowsのクリップボードではなく,gdi固有のクリップボードです
  gdi $olist.clip cut
  gdi $olist.clip copy
を参照して下さい

$canvas.patchjgd

gdi $canvas.patchJGD $kei $ido

return $kei2 $ido2

経緯度をparファイルの補正値で変換する
canvasの測地系を事前に設定のこと
gdi $canvas.ellipse

$canvas.plane

gdi $canvas.plane

  gdi $canvas.plane.define
  gdi $canvas.plane.add
  gdi $canvas.plane.clear
  gdi $canvas.plane.expr
  gdi $canvas.plane.disable
  gdi $canvas.plane.enable
  gdi $canvas.plane.enable?
  gdi $canvas.plane.delete

gdi $canvas.plane.define $layer1 $layer2 ...

return no

プレーンを新規登録します
layerはレイヤハンドルです(レイヤ名ではありません)
アーギュメントの順番がそのままプレーン内での表示順になります
各レイヤに与えられている表示ON/OFF設定は有効です
0から始まる整数でプレーン番号が返ります
この番号は記憶しておかなければなりません(表示演算式に使用します)

gdi $canvas.plane.add $index $layer1 $layer2 ...

return num

プレーンにレイヤを追加します
indexはプレーン番号です
登録されている最大プレーン番号よりindexが大きい場合は最大プレーン番号に調節されます
プレーンが一つも登録されていなければ何もしません
layerはレイヤハンドルです(レイヤ名ではありません)
登録済みレイヤの末尾に追加されます
アーギュメントの順番がそのままプレーン内での表示順になります
重複レイヤは無視されます
登録レイヤ数が返ります
ひとつもレイヤを与えずにこのコマンドを実行するとプレーンの登録レイヤ数を求めることができ
ます

gdi $canvas.plane.clear $index

return num

プレーンのレイヤをクリアします
indexはプレーン番号です
プレーンは残ります
登録されている最大プレーン番号よりindexが大きい場合はエラーです
プレーンが一つも登録されていなければ何もしません

gdi $canvas.plane.expr $expression

return success

プレーンの表示方法を数式(表示演算式)で与えます
  例 0*1*2+3*4*5+(6+7)*8
*はベクトル描画,+は白部透明でのラスタ描画演算子です
数字はプレーン番号です
*は+に優先して演算されます
()を使うこともできます
ただし,*演算子の右項はプレーン番号以外許されません
  (誤り) (1+2)*(3+4)
  (正解) (1+2)*3+(1+2)*4
式中のブランク,水平タブは無視されます

gdi $canvas.plane.disable

プレーンによる演算描画機能をOFFします

gdi $canvas.plane.enable

return on

プレーンによる演算描画機能をONします
成功したら1が返ります
プレーンが未設定なら0が返ります

gdi $canvas.plane.enable?

return on

プレーンによる演算描画機能がONになっているか問い合わせます
ONなら1が返ります

gdi $canvas.plane.delete

return success

設定されているプレーンを全削除します
プレーンが未設定なら何もしません

$canvas.presetscale

gdi $canvas.PresetScale $scale0 ... $scaleN

論理スケールを設定します
アーギュメントは最大18個です
最初のアーギュメントが論理スケール0番の設定になります
アーギュメントの個数以降の論理スケールは未設定になります
つまりアーギュメントが10個与えられると0から9までの論理スケールの設定となり
10から17までは未設定になります
各アーギュメントには実縮尺を実数値で与えます
例えば1/500の場合には0.002を与えます
縮尺は大縮尺から小縮尺方向に与えられなければなりません
論理スケールについてはgdi $canvas.LogicalScaleを参照して下さい

$canvas.print

gdi $canvas.print $prnhdc $scale [$title]

return success

gdi $canvas.print $prnhdc $xmin $ymin $xmax $ymax $scale [$title]
return success

マップを印刷します
prnhdcはプリンタのDC(デバイスコンテキスト)です
プリンタDCはgdi createPrinterDCコマンドで取得します

印刷縮尺がscaleです。分母値で指定します
マップ単位をmmとして計算しますので,マップ単位がmmでない場合には縮尺を
調整して与えます
例えばマップ単位がcmの場合に1/500で印刷するには
  1/500*10=0.02 を与えます
より汎用的にプログラムしたい場合にはマップ単位を読み取る方式を採用します
  1/500*[gdi $canvas.MapUnit]

印刷範囲を与える方式も提供されています
印刷したい矩形範囲をマップ単位値 xmin ymin xmax ymax で与えます
指定した範囲が用紙に収まるように印刷されます
指定した範囲が用紙の縦横比と異なる場合には印刷範囲を拡げる方式で
調整されます
この方式は縮尺よりも印刷範囲を重視する場合に用います(ハードコピー)

titleを与える用紙左上に印刷します
印刷後にprnhdcは自動的に削除されます

参照
  gdi PaperSize
  gdi PaperSizeDot
  gdi SetPaperSize
  gdi SetPaperLayout
  gdi $canvas.startDocument
  gdi $canvas.endDocument
  gdi $canvas.mapPrint
  gdi $canvas.hardcopy

$canvas.projection2

gdi $canvas.projection2 [$ellipse $xysystem]

return {ellipse xysystem}

表示座標系をUTMまたは公共座標系とします(投影座標モード)
アーギュメントellipseには楕円体名を与えます
  BESSEL WGS84 GRS80 GRS83 CLARKE IAU65 GRS67
  空文字を与えると投影計算しません
アーギュメントxysystemには座標系番号を与えます
  1〜19 公共座標系
  51〜56 UTM
  0を与えると投影計算しません
2つのアーギュメントを省略すると現在の設定値がリストで返ります
  {楕円体名 番号}
アーギュメントをひとつだけ与えると測地系だけの変更になります

$canvas.projection

gdi $canvas.projection [$ellipse $xysystem]

return {ellipse xysystem}

オブジェクト座標をUTMまたは公共座標系とします(投影座標モード)
アーギュメントellipseには楕円体名を与えます
  BESSEL WGS84 GRS80 GRS83 CLARKE IAU65 GRS67
  空文字を与えると投影計算しません
アーギュメントxysystemには座標系番号を与えます
  1〜19 公共座標系
  51〜56 UTM
  0を与えると投影計算しません
2つのアーギュメントを省略すると現在の設定値がリストで返ります
  {楕円体名 番号}
アーギュメントをひとつだけ与えると測地系だけの変更になります

$canvas.protection

gdi $canvas.protection [$onoff]

return before_onoff

キャンバスのプロテクション機能のON/OFFを設定します
onoffには1か0,もしくは"on"か"off"を与えます
プロテクション機能がOFFの場合はオブジェクトに設定されているプロテクションが機能
しなくなります(gdi $obj.protectionを参照)

onoffを省略すると現在の状態が0か1で返ります
onoffを与えると変更前の状態が0か1で返ります

$canvas.pullundo

gdi $canvas.pullundo [$offset]

return olist

直前のPushBefore/PushAfterによりUndoバッファに積まれた
オブジェクトをオブジェクトリストで返します
$offsetを与えると直前ではなくもっと前に積まれたオブジェクト
を返します。$offsetは必ず負数です。
返されたolistを削除する必要はありません。
(削除しても実際には削除されないのでエラーにはなりません)

$canvas.queryactive

gdi $canvas.QueryActive $hlay ...

return olist

アクティブオブジェクトを検索しオブジェクトリストで返します
非表示,セレクションロック,削除フラグが立ったオブジェクトも含みます
返されたオブジェクトリストは使用後に削除してください
 参考
  gdi $canvas.QueryNew
  gdi $canvas.QueryDeleted
  gdi $canvas.QueryChanged
  gdi $canvas.TileUpdate

$canvas.querychanged

gdi $canvas.QueryChanged $hlay ...

return olist

修正されたリファレンスオブジェクトを検索しオブジェクトリストで返します
このコマンドは修正後にgdi $obj.pushAfterが実行されたリファレンスオブジェクトを検索
するものです。
返されたオブジェクトリストは使用後に削除してください

 参考
  gdi $canvas.QueryNew
  gdi $canvas.QueryActive
  gdi $canvas.QueryDeleted
  gdi $canvas.TileUpdate

$canvas.queryclass

gdi $canvas.QueryClass [$layername] $classname

return olist

レイヤ名とクラス名でオブジェクトを検索しオブジェクトリストで返します
レイヤ名は省略可です
クラス名はオブジェクトの先頭属性値です
返されたオブジェクトリストは使用後に削除してください

$canvas.querydeleted

gdi $canvas.QueryDeleted $hlay ...

return olist

gdi $obj.deleteflag で消去されたリファレンスオブジェクトを検索しオブジェクトリストで返します
返されたオブジェクトリストは使用後に削除してください

 参考
  gdi $canvas.QueryNew
  gdi $canvas.QueryActive
  gdi $canvas.QueryChanged
  gdi $canvas.TileUpdate

$canvas.queryid

gdi $canvas.QueryID $reference [$id]

return {olist|ob}

オブジェクトをリファレンスファイル番号とオブジェクトIDの組み合わせで検索します
$referenceは検索対象となるリファレンスファイル番号です
$idはオブジェクトIDです
該当するオブジェクトが検索されるとオブジェクトハンドルが返ります
オブジェクトがなければ0が返されます

$id省略するとIDはチェックされません。そしてオブジェクトリストが返されます

オブジェクトIDはマップファイル単位でユニークです
従って、複数のマップファイルがロードされている場合には同じIDのオブジェクトが存在
しうるので、オブジェクトが属するマップファイルを指定する必要があります
マップファイルを指定するための識別番号がリファレンスファイル番号であり、
gdi $canvas.mapid $filename
で得ることができます
ただし、アクティブオブジェクトのリファレンス番号は0ですので上記コマンドでは取得できま
せんし、その必要もありません

リファレンス番号はオブジェクトのプロパティにも記憶されています
オブジェクトのリファレンス番号は
gdi $obj.ReferenceID
で得ることができます

$canvas.queryincircle

gdi $canvas.QueryInCircle $x $y $r {$displayonly | $hlayer ...}

return olist

gdi $canvas.QueryInCircleEx $x $y $r {$displayonly | $hlayer ...}
return olist

円形範囲に一部でも含まれるオブジェクトを検索し,それらをオブジェクトリスト
で返します。
返されたオブジェクトリストは使用後に削除してください。

x y は中心,r は半径です。いずれもマップ単位で与えます。

displayonly は,表示されているオブジェクトのみ検索対象とする場合には1を
非表示のオブジェクトも検索対象とする場合には0を与えます。
セレクションが禁止されている(セレクションロック)オブジェクトは対象外です。
セレクションが禁止のオブジェクトも対象とする場合はgdi $canvas.QueryInCircleEx を使用します

displayonlyではなくレイヤハンドルを渡すこともできます。複数与えられます。
レイヤハンドルを与えた場合、表示やセレクション可否に関係なく、レイヤに属するオブジェクト
が検索されます。

$canvas.queryinrect

gdi $canvas.QueryInRect $xmin $ymin $xmax $ymax $displayonly

return olist

gdi $canvas.QueryInRectEx $xmin $ymin $xmax $ymax
return olist

矩形範囲に一部でも含まれるオブジェクトを検索し,それらをオブジェクトリスト
で返します
  $xmin $ymin $xmax $ymax : マップ単位矩形範囲
  $displayonly : 表示されているオブジェクトのみ検索対象とする場合には1を
          非表示のオブジェクトも検索対象とする場合には0を与えます

シンボル,テキスト類は原点が対象です。gdi $canvas.QueryOverlapRect参照。
返されたオブジェクトリストは使用後に削除してください

QueryInRectはセレクションが禁止されている(セレクションロック)オブジェクトは対象外です

QueryInRectExは非表示,セレクションロックの有無に関わらず抽出します

$canvas.queryinsidecircleex

gdi $canvas.QueryInsideCircleEx $x $y $r $displayonly

return olist

円形範囲に完全に含まれているオブジェクトを検索し,それらをオブジェクトリスト
で返します
x y は中心,r は半径です。いずれもマップ単位で与えます
displayonly は,表示されているオブジェクトのみ検索対象とする場合には1を
非表示のオブジェクトも検索対象とする場合には0を与えます
セレクションが禁止されているオブジェクトも対象であることがInsideCircleと異なります
返されたオブジェクトリストは使用後に削除してください

$canvas.queryinsidecircle

gdi $canvas.QueryInsideCircle $x $y $r $displayonly

return olist

円形範囲に完全に含まれているオブジェクトを検索し,それらをオブジェクトリスト
で返します
x y は中心,r は半径です。いずれもマップ単位で与えます
displayonly は,表示されているオブジェクトのみ検索対象とする場合には1を
非表示のオブジェクトも検索対象とする場合には0を与えます
セレクションが禁止されている(セレクションロック)オブジェクトは対象外であることがInsideCircleExと異なります
返されたオブジェクトリストは使用後に削除してください

$canvas.queryinsiderectex

gdi $canvas.QueryInsideRectEx $xmin $ymin $xmax $ymax $displayonly

return olist

矩形範囲に完全に含まれているオブジェクトを検索し,それらをオブジェクトリスト
で返します
矩形範囲をxmin ymin xmax ymax で与えます。マップ単位です。
displayonly は,表示されているオブジェクトのみ検索対象とする場合には1を
非表示のオブジェクトも検索対象とする場合には0を与えます
セレクションが禁止されている(セレクションロック)オブジェクトも対象であることがInsideRectと異なります
返されたオブジェクトリストは使用後に削除してください

$canvas.queryinsiderect

gdi $canvas.QueryInsideRect $xmin $ymin $xmax $ymax $displayonly

return olist

矩形範囲に完全に含まれているオブジェクトを検索し,それらをオブジェクトリスト
で返します
矩形範囲をxmin ymin xmax ymax で与えます。マップ単位です。
displayonly は,表示されているオブジェクトのみ検索対象とする場合には1を
非表示のオブジェクトも検索対象とする場合には0を与えます
セレクションが禁止されている(セレクションロック)オブジェクトは対象外であることがInsideRectExと異なります
返されたオブジェクトリストは使用後に削除してください

$canvas.queryinsidelockobj

gdi $canvas.QueryInsideLockObj [$olist] $lock_olist $unlock_olist $out_olist

return num

$olistから修正オブジェクトを$out_olistに抽出します
$olistが省略されていればキャンバスから修正オブジェクトを$out_olistに抽出します

$lock_olist にはクライアントロックエリアオブジェクトを格納して渡します
$unlock_olistにはプロテクトエリアオブジェクトを格納して渡します
修正オブジェクトとは
  親(root)のみを調べ
    protection==0
    update != 0
    原点がlockオブジェクトの範囲内でunlockオブジェクトの範囲外
    削除フラグが立っている場合はリファレンスオブジェクトだけ
  の条件が真であるファミリー

$out_olistのオブジェクト群はクライアントマップに保存されるべきものです
修正オブジェクトを保存したマップをクライアントマップと呼びます
  参照:gdi $canvas.UpdateLoading
     gdi $canvas.ReplaceMap

$canvas.querynew

gdi $canvas.QueryNew $hlay ...

return olist

update!=0 のアクティブオブジェクトを検索しオブジェクトリストで返します
これらのオブジェクトは作成後にgdi $obj.pushCreateObject
実行されたオブジェクトです。
返されたオブジェクトリストは使用後に削除してください

  参考
   gdi $canvas.QueryActive
   gdi $canvas.QueryChanged
   gdi $canvas.QueryDeleted
   gdi $canvas.TileUpdate

$canvas.queryoverlaprectex

gdi $canvas.QueryOverlapRectEx $xmin $ymin $xmax $ymax

return olist

矩形範囲に一部でも含まれているオブジェクトを検索し,それらをオブジェクトリスト
で返します
矩形範囲をxmin ymin xmax ymax で与えます。マップ単位です。
非表示,セレクション禁止であっても抽出されるところがQueryOverlapRectと異なります
シンボル,テキスト類は原点ではなく表示サイズで判断されます。QueryInRectEx参照。
返されたオブジェクトリストは使用後に削除してください

$canvas.queryoverlaprect

gdi $canvas.QueryOverlapRect $xmin $ymin $xmax $ymax $displayonly

return olist

矩形範囲に一部でも含まれているオブジェクトを検索し,それらをオブジェクトリスト
で返します
矩形範囲をxmin ymin xmax ymax で与えます。マップ単位です。
displayonly は,表示されているオブジェクトのみ検索対象とする場合には1を
非表示のオブジェクトも検索対象とする場合には0を与えます
セレクションが禁止されている(セレクションロック)オブジェクトは対象外です
シンボル,テキスト類は原点ではなく表示サイズで判断されます。QueryInRect参照。
返されたオブジェクトリストは使用後に削除してください

$canvas.querylayerex

gdi $canvas.QueryLayerEx $layer1 ...

return olist

指定レイヤに属するオブジェクトをオブジェクトリストで返します
セレクションが禁止されている(セレクションロック)オブジェクトも含みます
プロテクションが3に設定されているオブジェクトは除外します
ただしキャンバスのプロテクションモードが0の場合は除外しません

layerはレイヤハンドルです。複数指定可能です
レイヤ名からレイヤハンドルを得るには
gdi $canvas.layer
コマンドを使用します

$canvas.querylayer

gdi $canvas.QueryLayer $layer1 ...

return olist

指定レイヤに属するオブジェクトをオブジェクトリストで返します
セレクションが禁止されている(セレクションロック)オブジェクトは含まれません
gdi $canvas.QueryLayerExを参照して下さい

$canvas.querynearnodeincircle

gdi $canvas.QueryNearnodeInCircle $x $y $r $displayonly

return olist

円形範囲に頂点が含まれているオブジェクトを検索し,それらをオブジェクトリスト
で返します
x y は中心,r は半径です。いずれもマップ単位で与えます
displayonly は,表示されているオブジェクトのみ検索対象とする場合には1を
非表示のオブジェクトも検索対象とする場合には0を与えます
セレクションが禁止されている(セレクションロック)オブジェクトは対象外です

オブジェクトリストには範囲内にある頂点番号も格納されています
  オブジェクトリストからi番目のオブジェクトハンドルを取り出す
    set obj [gdi $olist.obj $i]
  このオブジェクトの範囲内頂点番号を取り出す
    set no [gdi $olist.node $i]
返されたオブジェクトリストは使用後に削除してください

このコマンドはキャンバス全体から検索します。これに類似して
  gdi $olist.NearNode $x $y $r
というコマンドがあります。このコマンドはオブジェクトリストに含まれている
オブジェクト群に対して円形範囲内頂点検索を行うものです

$canvas.querynearnodeinrect

gdi $canvas.QueryNearnodeInRect $x $y $distance $displayonly

return olist

矩形範囲に頂点が含まれているオブジェクトを検索し,それらをオブジェクトリスト
で返します
矩形範囲を中心座標($x,$y)と半幅($distance)で与えます。マップ単位です。
displayonly は,表示されているオブジェクトのみ検索対象とする場合には1を
非表示のオブジェクトも検索対象とする場合には0を与えます
セレクションが禁止されている(セレクションロック)オブジェクトは対象外です

オブジェクトリストには範囲内にある頂点番号も格納されています
  オブジェクトリストからi番目のオブジェクトハンドルを取り出す
    set obj [gdi $olist.obj $i]
  このオブジェクトの範囲内頂点番号を取り出す
    set no [gdi $olist.node $i]
返されたオブジェクトリストは使用後に削除してください

$canvas.queryobject

gdi $canvas.QueryObject $x $y $distance

return obj

指定した位置(x,y:map座標)から指定距離(distance:ピクセル単に)内に頂点もしくは辺があるオブジェクトを検索し,
最前面のにあるオブジェクトを返します
セレクションが禁止されている(セレクションロック)オブジェクトは対象外です

$canvas.queryundermouseex

gdi $canvas.QueryUnderMouseEx $x $y $distance

return olist

指定した位置から指定距離内に頂点もしくは辺があるオブジェクトを検索し,
オブジェクトリストを返します
セレクションが禁止されている(セレクションロック)オブジェクトも対象となるところが
gdi $canvas.QueryUnderMouseと異なります

$canvas.queryundermouse

gdi $canvas.QueryUnderMouse $x $y $distance

return olist

指定した位置から指定距離内に頂点もしくは辺があるオブジェクトを検索し,
オブジェクトリストを返します
面的オブジェクトの場合は内外判定にて評価されます
x y は位置,distance は距離です。x,yはマップ座標、distanceはピクセル単位で与えます
セレクションが禁止されている(セレクションロック)オブジェクトは対象外です
複数のオブジェクトを検索するところがgdi $canvas.objundermouse
異なります

$canvas.queryunderpointlayer

gdi $canvas.QueryUnderPointLayer $x $y $distance $layer

return olist

指定したレイヤに属するオブジェクトを対象とし,指定した位置から指定距離内
に頂点もしくは辺があるオブジェクトの集合をオブジェクトリストで返します
面的オブジェクトの場合は内外判定にて評価されます
x y は位置,distance は距離です。いずれもマップ単位で与えます
layerはレイヤハンドルです
非表示,あるいはセレクションが禁止されているオブジェクトも対象になります

$canvas.queryunderpoint

gdi $canvas.QueryUnderPoint $x $y $distance $displayonly

return olist

全てのオブジェクトを対象とし,指定した位置から指定距離内に頂点もしくは
辺があるオブジェクトの集合をオブジェクトリストで返します
面的オブジェクトの場合は内外判定にて評価されます
x y は位置,distance は距離です。いずれもマップ単位で与えます
displayonly には,表示されているオブジェクトのみ検索対象とする場合
には1を,非表示のオブジェクトも検索対象とする場合には0を与えます
セレクションが禁止されている(セレクションロック)オブジェクトは対象外です

$canvas.queryxy

gdi $canvas.QueryXY $x $y

return olist

始点座標が完全一致するオブジェクトの集合をオブジェクトリストで返します
キャンバスに存在する全てのオブジェクトが対象です

$canvas.rasope

gdi $canvas.RasOpe [$kind]

return kindlist

実装されているベクタ論理演算表示の全種類をTclリストで返します
kindを与えるとベクタ論理演算表示種類を変更します
論理演算には下記の種類が実装されています

copy notcopy black
white masknotpen maskpennot
notmask mask mergenotpen
mergepennot notmerge merge
nop not xor
notxor

$canvas.readdem

gdi $canvas.readDEM $folder $W $H $type $x $y

return altitude

DEMタイルファイルにアクセスして標高値を返します
標高値が求められなかった場合は空文字を返します
この関数を連続使用したあとにgdi $canvas.closeDEMをコールしてください

folder : DEMタイルファイルの格納ルートフォルダ
W H : DEMタイルの幅と高さ(M単位)
type : DEMタイルのマップタイプ(dem)
x y : 地点座標(公共座標系mm単位)

参照
gdi $canvas.closeDEM
gdi $canvas.importDEM

$canvas.realscale

gdi $canvas.RealScale [$scale]

return scale

現在の表示スケールを実縮尺で返します
実縮尺とは地図縮尺そのものです
実数で返されます。即ち1/500なら0.002が返ります

実縮尺をscaleにて与えれば表示スケールをで変更できます
ただし,正しく表示させる為には,マップ単位とスクリーンの実幅が
あらかじめ設定されている必要があります。これらは
  gdi $canvas.mapunit
で設定します

$canvas.realtological

gdi $canvas.RealToLogical $realscale

return index

実スケールから論理スケール番号を得ます
実スケールは実数値です。即ち1/500なら0.002を与えます

$canvas.redonum

gdi $canvas.redonum

return num

Redoバッファの件数を返します

$canvas.redo

gdi $canvas.redo

return num

戻した修正操作を再度実行します(Redo)
戻り値は,Redoバッファに残っている件数です
もし件数が0ならばアプリケーションのRedoボタンをDisableにして下さい
Redoバッファ操作を積むのは
  gdi $canvas.undo
コマンドです

$canvas.redraw

gdi $canvas.redraw [{disable|enable}] [$xmin $ymin $xmax $ymax]

キャンバスの指定矩形範囲(マップ単位)を再描画します
矩形範囲を与えなければ全体を再描画します
アーギュメントに"disable"を与えると、次に"enable"が与られるまで再描画しません

広範囲に渡ってオブジェクトを削除したり幾何形状を変更した場合には
このコマンドにて結果を表示します

$canvas.removeallobjects

gdi $canvas.RemoveAllObjects

全ての図形オブジェクトを削除します

$canvas.removecloneobjects

gdi $canvas.RemoveCloneObjects lock_olist unlock_olist

ロックエリア内にあり、cloneフラグが立っていてプロテクトされていないオブジェクトを削除する
lock_olist : 編集範囲オブジェクトリスト
unlock_olist : 編集禁止範囲オブジェクトリスト

$canvas.removelayer

gdi $canvas.RemoveLayer $layer1 ...

レイヤを削除します
複数のレイヤを指定することが出来ます
削除レイヤに含まれていた図形オブジェクトも削除されます
ひとつのレイヤだけを削除すれば良いのであれば
  gdi $layer.delete
コマンドもあります

$canvas.removerefobjects

gdi $canvas.RemoveRefObjects $filename

指定されたファイル名(filename)のリファレンスファイルを閉じます
実際には指定したファイルからロードされたオブジェクトを全削除するものです

$canvas.removeundo

gdi $canvas.removeundo $obj

Undo/Redoバッファからobjを除去します

$canvas.replacemap

gdi $canvas.ReplaceMap $olist

GUIDで比較し同じオブジェクトを$olistのオブジェクトに入れ替えます
$olistはクライアントマップからロードされた更新オブジェクトが格納されたものです
  参照:gdi $canvas.UpdateLoading

$canvas.reprotection

gdi $canvas.reprotection $lock_olist

全オブジェクトについてプロテクト0なら2に変更します
ロック、アンロック領域は無視します(2010/03/01変更)

$canvas.s2xy

gdi $canvas.s2xy $ws $hs

return "x,y"

整数化乗数を乗じて得た整数秒で与えられた経緯度(ws,hs)を内部XY座標
に変換し,カンマで区切った座標文字列を返します
この変換は線形変換であり経度,緯度それぞれにオフセットを加えたのち,
それぞれのスケールを乗じてx,y座標に変換します
このコマンドを使用する前に
  gdi $canvas.fitdmsxy
コマンドにて変換係数が設定されていなければなりません
変換係数が設定されていない場合には同じ値を返します
このコマンドはgdi $canvas.dms2xyと同機能です

返されたx,y座標はUTMや公共座標系などの投影座標ではなくシステムの内部
座標なので表示することには意味がありません

$canvas.savemapareavisiblexy

gdi $canvas.SaveMapAreaVisibleXY \

   $fname $xmin $ymin $xmax $ymax [$mapname]
return success

キャンバスに表示されており,かつ指定範囲内のオブジェクトを内部座標のまま
でマップファイルに保存します。
(注)秒座標を保存するSaveMapAreaVisibleの方を使用すべきです
リファレンスオブジェクトは保存されません

fnameは保存ファイル名です
xmin ymin xmax ymax で矩形範囲を指定します
maptype はマップタイプです。省略可能です
成功すると1が,失敗すると0が返ります

非表示のオブジェクトも保存するには
  gdi $canvas.SaveMapAreaXY
を使用します

$canvas.savemapareavisible

gdi $canvas.SaveMapAreaVisible \

   $fname $xmin $ymin $xmax $ymax [$maptype]
return success

キャンバスに表示されており,かつ指定範囲内のオブジェクトを経緯度座標値で
マップファイルに保存します。
リファレンスオブジェクトは保存されません

fnameは保存ファイル名です
xmin ymin xmax ymax で矩形範囲を指定します
maptype はマップタイプです。省略可能です
成功すると1が,失敗すると0が返ります

このコマンドを使用する為には
  gdi $canvas.fitdmsxy
コマンドにて線形変換係数が設定されていなければなりません

非表示のオブジェクトも保存するにはgdi $canvas.SaveMapArea
を使用します

$canvas.savemapareaxy

gdi $canvas.SaveMapAreaXY $fname $xmin $ymin $xmax $ymax [$mapname]

return success

指定範囲内のオブジェクトを内部座標のままマップファイルに保存します。
リファレンスオブジェクトは保存されません
(注)秒座標を保存するSaveMapAreaDMSの方を使用すべきです

fnameは保存ファイル名です
xmin ymin xmax ymax で矩形範囲を指定します
maptype はマップタイプです。省略可能です
成功すると1が,失敗すると0が返ります

表示されているオブジェクトだけを保存するには
  gdi $canvas.SaveMapAreaVisibleXY
を使用します

$canvas.savemaparea

gdi $canvas.SaveMapArea \

   $fname $xmin $ymin $xmax $ymax [$mapname]
return success

指定範囲内のオブジェクトを経緯度座標値でマップファイルに保存します。
リファレンスオブジェクトは保存されません

fnameは保存ファイル名です
xmin ymin xmax ymax で矩形範囲を指定します
maptype はマップタイプです。省略可能です
成功すると1が,失敗すると0が返ります

このコマンドを使用する為には
  gdi $canvas.fitdmsxy
コマンドにて線形変換係数が設定されていなければなりません

表示されているオブジェクトだけを保存するには
  gdi $canvas.SaveMapAreaVisible
を使用します

$canvas.savemapvisiblexy

gdi $canvas.SaveMapVisibleXY $filename [$maptype]

return success

表示されている全てのオブジェクトを内部XY座標値でマップファイルに保存します。
リファレンスオブジェクトは保存されません

fnameは保存ファイル名です
maptype はマップタイプです。省略可能です
成功すると1が,失敗すると0が返ります

非表示のオブジェクトも保存するには
  gdi $canvas.SaveMapXY
を使用します

$canvas.savemapvisible

gdi $canvas.SaveMapVisible $filename [$maptype]

return success

表示されている全てのオブジェクトを経緯度座標値でマップファイルに保存します。
リファレンスオブジェクトは保存されません

fnameは保存ファイル名です
maptype はマップタイプです。省略可能です
成功すると1が,失敗すると0が返ります

非表示のオブジェクトも保存するには
  gdi $canvas.SaveMap
を使用します

$canvas.savemapxy

gdi $canvas.SaveMapXY $filename [$maptype]

return success

全てのオブジェクトを内部XY座標値でマップファイルに保存します。
非表示のオブジェクトも保存されますが,リファレンスオブジェクトは保存されません

fnameは保存ファイル名です
maptype はマップタイプです。省略可能です
成功すると1が,失敗すると0が返ります

表示されているオブジェクトだけを保存するには
  gdi $canvas.SaveMapVisibleXY
を使用します

$canvas.savemap

gdi $canvas.SaveMap $filename [$maptype]

return success

全てのオブジェクトを経緯度座標値でマップファイルに保存します。
非表示のオブジェクトも保存されますが,リファレンスオブジェクトは保存されません

fnameは保存ファイル名です
maptype はマップタイプです。省略可能です
成功すると1が,失敗すると0が返ります

表示されているオブジェクトだけを保存するには
  gdi $canvas.SaveMapVisible
を使用します

$canvas.savetilexy

gdi $canvas.SaveTileXY $fname $xmin $ymin $xmax $ymax [$mapname]

return success

指定範囲内のオブジェクトを内部座標のままタイルマップファイルに保存します。
全てのオブジェクトが対象になります
fnameは保存ファイル名です
xmin ymin xmax ymax で矩形範囲を指定します
maptype はマップタイプです。省略可能です
保存したオブジェクト数がかえります
保存オブジェクトが無かった場合はファイルも作成されません
矩形境界のオブジェクトはBREC_CLONEレコードとともに保存されます
矩形外のオブジェクトでも内部オブジェクトとグループなら保存されます

実際は使用されていません
参照 gdi $olist.saveTileXY

$canvas.savetile

gdi $canvas.SaveTile $fname $xmin $ymin $xmax $ymax [$mapname]

return num

指定範囲内のオブジェクトを経緯度座標でタイルマップファイルに保存します。
全てのオブジェクトが対象になります
fnameは保存ファイル名です
xmin ymin xmax ymax で矩形範囲を指定します
maptype はマップタイプです。省略可能です
保存したオブジェクト数がかえります
保存オブジェクトが無かった場合はファイルも作成されません
矩形境界のオブジェクトはBREC_CLONEレコードとともに保存されます
矩形外のオブジェクトでも内部オブジェクトとリンクしていれば保存されます

$canvas.scale

gdi $canvas.scale [$scale]

return scale

表示スケールを返します
表示スケールとは内部マップ座標をスクリーン座標へ変換するときの乗数です
scaleを与えると表示スケールを変更します

$canvas.screenrect

gdi $canvas.ScreenRect $w $h

キャンバスのサイズをピクセル単位で設定します
このコマンドは一時的にスクリーンサイズを変更することが必要な場合に使用します
キャンバスサイズは,キャンバスが貼られているウインドウサイズが変更されたとき自動的
に変更されます

$canvas.screentomaprect

gdi $canvas.ScreenToMapRect $left $top $right $bottom

return {xmin ymin xmax ymax}

指定したスクリーン上の矩形範囲に表示されるマップ座標範囲を返します

$canvas.screentomap

gdi $canvas.ScreenToMap $px $py

return {x y}

指定したスクリーン上の位置(px,py)に対応するマップ座標値を返します

$canvas.scrolledrect

gdi $canvas.scrolledRect

return {xmin ymin xmax ymax [xmin2 ymin2 xmax2 ymax2]}

スクロールによって再描画された矩形範囲をマップ単位で返します
水平,または垂直スクロールの場合はひとつの矩形範囲が返ります
斜めスクロールの場合は2つの矩形範囲がかえります

$canvas.scroll

gdi $canvas.scroll $dx $dy

キャンバスに表示されているマップ範囲をスクロールします
dx dy はピクセル座標で与えます
dxが正の値のとき右側にスクロールします(隠れていた左側部分が現れます)
dyが正の値のとき下側にスクロールします(隠れていた上側部分が現れます)

$canvas.sec2xy

gdi $canvas.sec2xy $ws $hs

return {x y}

実数秒で与えられた経緯度を内部XY座標に変換します
キャンバスに投影座標系が設定されている場合には投影変換します
投影座標系が未設定の場合には線形変換します。
線形変換を行う為には
  gdi $canvas.fitdmsxy
コマンドにて線形変換係数が設定されていなければなりません
変換係数も未設定の場合には同じ値 {ws hs}を返します

このコマンドと反対の処理を行うのが
  gdi $canvas.xy2sec
です

$canvas.selection

gdi $canvas.selection [$vlayer]

return olist

セレクションされているオブジェクト集合ををオブジェクトリストで返します
返されたオブジェクトリストを削除する必要はありません(削除できません)

(以下は互換性維持のため残存させている機能)
揮発レイヤハンドル(vlayer)を与えるとセレクションオブジェクト表示用の揮発レイヤを
変更します

最新版ではgdi $canvas.selection.vlayer $vlayer を使うべきです

gdi $canvas.selection.vlayer [$vlayer]

return vlayer

セレクションオブジェクト表示用の揮発レイヤをハンドル(vlayer)を与えます
vlayerを与えると旧設定値が返ります
vlayerを省略すると現在の設定値を返します

セレクションオブジェクト表示用の揮発レイヤが与えられていなければセレクションされ
てもオブジェクトの表示は変わりません
以前はセレクションオブジェクトの着色をアプリケーション側で行っていましたが ,
現在はgdiに委ねなければなりません

gdi $canvas.selection.color [$obj] $vlayer

return num

$obj,$vlayerの両方を与えると,セレクションの中から$objだけの揮発レイヤを
変更します(セレクションが解除されたときにその揮発レイヤで表示されます)
$objがセレクションされていたので変更したら1を返します
セレクションされていない場合は何もせずに0を返します

$objだけを与えるとそのオブジェクトの着色vlayerを返します
着色されていない場合はセレクションvlayerを返します

$vlayerをだけを与えると,全てのセレクションオブジェクトの揮発レイヤを変更します
変更されたオブジェクト数が返ります(セレクションが解除されたときにその揮発レイヤ
で表示されます)

【解説】
設定した揮発レイヤでの表示は,セレクションが解除されたときに実現します。
つまりこのコマンドはセレクションオブジェクトの本来の揮発レイヤを設定するものです。
[gdi $obj.vlayer $vlayer],[gdi $obj.paint $vlayer]との違いに注意して下さい。
上記コマンドをセレクションオブジェクトに対して使用すると,すぐに表示が変更さ
れますが,セレクションが解除されると元の表示に戻ってしまいます。
つまり,上記コマンドはセレクション表示を一時的に変更するためのものです。

使用例 (オブジェクトがセレクションされている場合)

◆セレクション状態の色を変更するだけ。セレクション解除後は元の色
  gdi $obj.paint $vlayer
◆セレクション状態の色はそのままで,解除後の色を変更したい
  gdi $canvas.selection.color $obj $vlayer
◆セレクションオブジェクトの色を変更しかつセレクション解除後にもその色を維持
 したいとき
  gdi $obj.paint $vlayer
  gdi $canvas.selection.color $obj $vlayer

gdi $canvas.selection.num

return $num

セレクションされているオブジェクト数を返します

gdi $canvas.selection.obj $index

return obj

セレクショから$index番目のオブジェクトを返します

gdi $canvas.selection.add {$obj | $olist}

return num

セレクションにオブジェクト($obj)を追加します
又は,オブジェクトリスト($olist)に含まれる全オブジェクトについて上記処理を実行します
ただしプロテクト3のオブジェクトは追加されません
追加後のオブジェクト数を返します

既にセレクションされている場合は逆に除去されます
追加/除去された場合はセレクションオブジェクトの数とインデックスが変更されますので
ループ処理の中で実行する場合はご注意下さい

gdi $canvas.selection.append {$obj | $olist}

return num

セレクションにオブジェクト($obj)を追加します
又は,オブジェクトリスト($olist)に含まれる全オブジェクトについて上記処理を実行します
ただしプロテクト3のオブジェクトは追加されません
追加後のオブジェクト数を返します

既にセレクションされている場合は無視されます(addと異なる点です)
追加された場合はセレクションオブジェクトの数とインデックスが変更されますので
ループ処理の中で実行する場合はご注意下さい

gdi $canvas.selection.appendA {$obj | $olist}

return num

セレクションにオブジェクト($obj)を追加します
重複チェックをしない点がgdi $canvas.selection.appendと異なります

gdi $canvas.selection.sub {$obj | $olist}

return num

セレクションからオブジェクト($obj)を除外します
又は,オブジェクトリスト($olist)に含まれる全オブジェクトについて上記処理を実行します
除外後のセレクションオブジェクト数を返します

このコマンドが成功してもgdi $canvas.selection.numで返るセレクションオブジェクト数は変化しません
[gdi $canvas.selection.obj $index]で除外したオブジェクトを取り出そうとすると0が返ります
除外したオブジェクトをセレクションから完全に除去するために[gdi $canvas.selection.compress]
を実行するのを忘れないでください

gdi $canvas.selection.remove [{$obj | $olist}]

return num

オブジェクト($obj)がセレクションされている場合にオブジェクト($obj)を削除します
又は,オブジェクトリスト($olist)に含まれる全オブジェクトについて上記処理を実行します
アーギュメントが省略されると,セレクションされているオブジェクトの全てを削除します
UNDOが効かない削除です
削除後のセレクションオブジェクト数を返します

このコマンドが成功しても[gdi $canvas.selection.num]で返るセレクションオブジェクト数は変化しません
[gdi $canvas.selection.obj $index]で除外したオブジェクトを取り出そうとすると0が返ります
除外したオブジェクトをセレクションから完全に除去するために[gdi $canvas.selection.compress]
を実行するのを忘れないでください

gdi $canvas.selection.compress

return num

セレクションリストを圧縮します
セレクションオブジェクト数を返します
[gdi $canvas.selection.sub]や[gdi $canvas.selection.remove]コマンドのあとに実行します

gdi $canvas.selection.clear

セレクションをクリアします
[gdi $canvas.clear selection]と同機能です

gdi $canvas.selection.range

return {xmin ymin xmax ymax}

セレクションされているオブジェクトの全てを包含する最小範囲を返します
セレクションオブジェクトが存在しない場合は空文字が返ります
gdi $canvas.selrangeと同じです

$canvas.selrange

gdi $canvas.selrange

return {xmin ymin xmax ymax}

セレクションされているオブジェクト集合全体を包含する最小矩形範囲を返します
セレクションオブジェクトが存在しない場合は空文字が返ります
旧コマンドです。

$canvas.simple

gdi $canvas.simple [$mode]

return mode

現在の表示モードを返します
modeが与えられると表示モードを変更します

modeには下記のキーワードがあります

n 通常表示
s 簡略表示
a 簡略表示+始終点記号表示
np 通常表示+セレクションオブジェクトの頂点に矩形記号表示
sp 簡略表示+セレクションオブジェクトの頂点に矩形記号表示
ap 簡略表示+始終点記号表示+セレクションオブジェクトの頂点に矩形記号表示
m 白黒表示

$canvas.snaparea

gdi $canvas.snaparea [$distance]

return distance

現在のスナップ範囲をピクセル値で返します
distanceを与えるとスナップ範囲を変更します

スナップ範囲とは,マウスポインタから最短距離にある頂点や辺の座標を取り出す
処理(スナップ)における最大距離です。スナップ範囲より離れた位置にある
頂点や辺はスナップ対象外になります。
gdi $canvas.snapコマンド参照

$canvas.snap

gdi $canvas.snap [$mode]

return mode

現在のスナップモードを番号で返します
modeを与えるとスナップモードを変更します

スナップ処理とはマウスポインタから最短距離にある頂点や辺の座標を取り出す
処理であり,各種モードがあります
モードは下記のキーワードか番号で指定できます

キーワード 番号 モード
off 0 スナップ機能OFF
point 1 最近傍頂点座標を取り出す
line 2 最近傍線分への垂線交点座標を取り出す
center 3 最近傍線分の中心座標を取り出す
end 4 最近傍オブジェクトの始点または終点座標を取り出す
grid 5 最近傍グリッド座標を取り出す

スナップ機能がONの時,マウスイベントプロシージャに渡されてくる座標値は上記モード
によりスナップされた座標値です
マウスポインタはスナップ座標に移動されませんので,スナップされた座標を明示する
ため,一般的には,アプリケーション側でスナップ位置に十字カーソル等を表示します

$canvas.startdocument

gdi $canvas.startDocument $prnhdc $docname $filename

return success

印刷を開始します

$prnhdc にはプリンタのDC(デバイスコンテキスト)を与えます
プリンタDCはgdi createPrinterDCコマンドで取得します

$docname には印刷進捗状況に表示されるドキュメント名を与えます
空文字を与えると"マップ印刷"がデフォルト名になります。

$filename にはファイルに出力したときにそのファイル名を与えます
空文字を与えるとプリンタの設定先に出力します

下記のように、ページを印刷するコマンドの前に実行します

if {[gdi $canvas.startDocument $prnhdc {} {}]} {
if {[gdi $canvas.mapPrint $prnhdc]} {
gdi $canvas.endDocument $prnhdc
}
}

参照
  gdi PaperSize
  gdi PaperSizeDot
  gdi SetPaperSize
  gdi SetPaperLayout
  gdi $canvas.startDocument
  gdi $canvas.endDocument
  gdi $canvas.mapPrint
  gdi $canvas.hardcopy
  gdi $canvas.print

$canvas.staticredraw

gdi $canvas.staticredraw

2012/03/19廃止

$canvas.styleproperty

gdi $canvas.StyleProperty $style_name arrayname

return type

$canvas.newstyleで作成されたアプリケーションスタイルのプロパティを配列変数に返します
style_name にスタイル名を与えます
arrayname に配列変数名称を与えます
下記のいすれかのタイプを返します
  symbol,dash,solid
エラーの場合は空文字を返します

$canvas.symbol

gdi $canvas.symbol

return symbolname_list

キャンバスに登録されている全シンボルリソースのハンドルリスト(Tclリスト)を返します

gdi $canvas.symbol $symbolname

return symbol

シンボル名を与えるとシンボルリソースを検索し,指定した名前のシンボルハンドル
を返します
返されたシンボルハンドルは
gdi $symbol.*
コマンドにてそのプロパティを変更できます
ただし,変更はそのシンボルリソースを既に使用しているシンボルレイヤには
反映されません。なぜなら,シンボルレイヤはシンボルリソースのコピーを使用
しているからです。シンボルレイヤにシンボルリソースを再度選択すれば変更
結果が反映されます(この時コピーが行われます)。

gdi $canvas.symbol $symbolname $size

return symbol

シンボル名とサイズを与えてシンボルリソースをコピーし,そのハンドルを得ることができます
ダイナミックサイズのみの対応です
返されるシンボルハンドルはシンボルラインに適用するスタイル作成コマンドのアーギュメントに使用します
(gdi $canvas.newstyleコマンドで使用します)

$canvas.transparent

gdi $canvas.transparent $onoff

(gdi $canvas.tranceparent $onoff)

キャンバスの透過モードを設定します
onoffに1を与えると透過モード,0を与えると非透過モード指定になります
非透過モードの時は背景は白色でペイントされます
透過モードの時はキャンバスの下にあるコントーロールが表示されますし使用できます
透過モードは非透過モードよりも表示が遅くなります
初期設定は透過モードです

$canvas.tileupdate

gdi $canvas.TileUpdate $fname $hfname $del_list $change_list $append_list [$xmin $ymin $xmax $ymax]

return $success

タイルマップを更新します

 $fname タイルマップ名
 $hfname 時系列管理用履歴タイルマップ名
 $del_list 削除オブジェクトが格納されたオブジェクトリスト
 $change_list 変更オブジェクトが格納されたオブジェクトリスト
 $append_list 新規オブジェクトが格納されたオブジェクトリスト
 $xmin,$ymin,$xmax,$ymax タイル範囲(省略可)

削除オブジェクトの子供オブジェクトもすべて削除します
削除オブジェクトがマップに見つからなくてもエラーになりません
ただしオブジェクト削除とは履歴タイルマップへの移動処理です

通常,削除オブジェクトは「削除フラグが立った」オブジェクト群です
  [gdi $canvas.QueryDeleted $layer...]
で抽出できます(削除フラグが立ったリファレンスオブジェクト)

変更オブジェクトは
  [gdi $canvas.QueryChanged $layer...]
で抽出できます(update!=0のリファレンスオブジェクト)

新規オブジェクトは
  [gdi $canvas.QueryNew $layer...]
で抽出できます(update!=0のアクティブオブジェクトで)

$canvas.undofinish

gdi $canvas.UndoFinish

Undoグルーピングを終了します
UndoStartからUndoFinishまでの操作が一回のUndoで復元されます

$canvas.undostart

gdi $canvas.UndoStart

Undoグルーピングを開始します
UndoStartからUndoFinishまでの操作が一回のUndoで復元されます

$canvas.undoclear

gdi $canvas.undoclear [$num]

return undo_num

UNDOバッファから最新のレコードを$num数クリアします
$numが省略されたらnum=1として処理します
クリア後のUNDOバッファのレコード数を返します

$canvas.undonum

gdi $canvas.undonum

return num

UNDOバッファの件数を返します

$canvas.undonum

gdi $canvas.undonum [$num]

return num

UNDOバッファを指定階数削除します

$canvas.undo

gdi $canvas.undo

return num

修正操作を元に戻します
戻り値は,Undoバッファに残っている件数です
イベントプロシージャ(RedoEvent)の2要素からなるTclリストです
もし件数が0ならばアプリケーションのUndoボタンをDisableにして下さい
Undo処理結果はgdi $canvas.redoで元に戻せます
つまり,Undo処理はRedoバッファに積む処理も兼ねています
Undoバッファに修正操作を積むコマンドは
  gdi $olist.PushBefore
  gdi $olist.PushAfter
コマンドです

$canvas.unprotection

gdi $canvas.unprotection $lock_olist $protect_olist [$olist]

始点座標がロック矩形範囲内にある
オブジェクトのプロテクトを0にセットします

$canvas.updateloading

gdi $canvas.UpdateLoading $file

return olist

クライアントマップローディングを行います
updateプロパティがセットされたオブジェクトのみを格納したオブジェクトリストが返ります
失敗するか,既オープン済みの場合は0が返ります
クライアントマップとは下記コマンドで抽出したオブジェクト($savelist)を格納したマップです
  gdi $canvas.QueryInsideLockObj $locklist $protectlist $savelist

返されたオブジェクトリストを削除する必要はありませんが,使用後にクリアするとメモリ
を節約できます

  set olist [gdi $canvas.UpdateLoading $file]
  .... 差し換え処理 ....
  gdi $olist.clear

返されたオブジェクトリストを使ってオブジェクトの差し替え処理を行って下さい
差し替え処理とは,同一GUIDをもつ既存のオブジェクトグループをロードされた
オブジェクトにグループ単位で置き換える処理です
具体的には,ロードされたオブジェクトの全範囲の差し替え対象オブジェクトをロードしてから
gdi $canvas.ReplaceMap $updatelist
を実行することです。「差し替え対象オブジェクトのロード」方法はアプリケーションに委ねられています

$canvas.update

gdi $canvas.update

キャンバスに再描画要求を発行します
gdi $canvas.redrawは即時に再描画しますが,このコマンドは
Windowsに再描画を要求するだけであり,実際の再描画のタイミングは
Windowsに任せます

$canvas.vlayer

gdi $canvas.vlayer [$vlayername]

return hvlayer

レイヤ名(vlayername)を与えると揮発レイヤハンドルを返します
レイヤ名を省略すると全揮発レイヤハンドルリストを返します

$canvas.webprint

gdi $canvas.WebPrint $hdc $left $top $right $bottom

ブラウザからのプレビュー/プリント処理

$canvas.worldrange

gdi $canvas.WorldRange [$xmin $ymin $xmax $ymax]

return {xmin ymin xmax ymax}

リファレンスオブジェクトも含めた全オブジェクトを包含する最小範囲を返します
この範囲は拡大方向にのみ更新されます
つまり,オブジェクトが削除されてもこの範囲が縮小されることはありません
全てのオブジェクトが削除されたときにはリセットされます
リセットされた状態で範囲を取得すると
  xmin > xmax
  ymin > ymax
の値が返るので無効値であることがわかります

範囲を与えると強制的に書き換えることができます

gdi $canvas.MapRangeとの違いに注意して下さい

$canvas.writedem

gdi $canvas.writeDEM $folder $W $H $type $msize $x $y $alt

DEMタイルに標高値を書き込みます
この関数を連続使用したあとにgdi $canvas.closeDEMをコールしてください

folder : DEMタイルファイルの格納ルートフォルダ
W H : DEMタイルの幅と高さ(M単位)
type : DEMタイルのマップタイプ(dem)
msize : 標高メッシュサイズ(mm単位)
x y : 地点座標(公共座標系mm単位)
alt : 標高値(M単位)

参照
gdi $canvas.closeDEM
gdi $canvas.importDEM

$canvas.xy2bl

gdi $canvas.xy2bl $x $y

return {ew ns}

平面直角座標を経緯度座標に逆投影します
x,y にはm単位の実数を与えます
$ew,$ns は実数秒単位の経度,緯度です
このコマンドを使用する前にキャンバスに投影法が設定されている必要があります
投影法の設定はgdi $canvas.projectionコマンドです
キャンバスに投影座標系が設定されていない場合(表示目的変換)には
  gdi xy2bl $x $y
コマンドを使用します
UTMの場合は負数を避けるため東西方向に500Kmのオフセットが加算された値が返
ります

$canvas.xy2dms

gdi $canvas.xy2dms $x $y

return "経緯度文字列"

内部座標値を経緯度に変換し文字列で返します
このコマンドを使用する為には
  gdi $canvas.fitdmsxy
コマンドにて線形変換係数が設定されていなければなりません

$canvas.xy2sec

gdi $canvas.xy2sec $x $y

return {ew ns}

内部座標値を経緯度に変換し実数秒で返します
戻り値を整数秒で得るのは
  gdi $canvas.xy2s
です
キャンバスに投影座標系が設定されている場合は逆投影して経緯秒を返します
投影座標が設定されていない場合は線形逆変換を試みます
線形逆変換を行う為には
  gdi $canvas.fitdmsxy
コマンドにて線形変換係数が設定されていなければなりません。
もし変換係数が設定されていない場合には同じ値{x y}が返ります

このコマンドと逆の機能が
  gdi $canvas.sec2xy
です

$canvas.xy2s

gdi $canvas.xy2s $x $y

return {ew ns}

内部座標値を経緯度に変換し整数秒で返します
戻り値を実数秒で得るのは
  gdi $canvas.xy2sec
です

このコマンドを使用する為には
  gdi $canvas.fitdmsxy
コマンドにて線形変換係数が設定されていなければなりません
変換係数が設定されていない場合には同じ値{x y}が返ります

このコマンドと逆の機能が
  gdi $canvas.s2xy
  gdi $canvas.dms2xy
です

$canvas.xylib

gdi $canvas.xylib $dll_name

内部座標をスクリーン座標に変換する関数を提供するDLLを指定します
  gdi $canvas.scale
  gdi $canvas.ScreenToMap
  gdi $canvas.MapToScreen
  gdi $canvas.ScreenToMapRect
  gdi $canvas.MapToScreenRect
等のコマンドは,このDLLに実装された関数を実行しています
このコマンドによりDLLが設定されていない場合には内部座標はスクリーン座標系
になります。
TclGDI_XY.DLLはY軸方向がスクリーン座標系と反対方向の数学座標系です

$canvas.zorder

gdi $canvas.zorder $layer1 ...

return success

アーギュメントに並べられたレイヤハンドル順に表示順位を設定します
成功すれば1が,失敗すれば0が返されます
最初のレイヤが再背面,最後のレイヤが最前面に表示されます
このコマンドが実行される前まではレイヤ定義順が表示順です