$canvas
- A
- $canvas.axis
- $canvas.axis2
- B
- $canvas.bl2xy
- C
- $canvas.center
- $canvas.changemapname
- $canvas.clear
- $canvas.clientcanvas
- $canvas.close
- $canvas.closedc
- $canvas.closedem
- $canvas.copyallsymbol
- $canvas.createdemmesh
- $canvas.cursor
- D
- $canvas.delete
- $canvas.dem.new
- $canvas.dms2xy
- $canvas.dms2xyscale
- $canvas.drawmesh
- E
- $canvas.editreference
- $canvas.editstart
- $canvas.editstart
- $canvas.ellipse
- $canvas.ellipse2
- $canvas.enddocument
- $canvas.event
- F
- $canvas.fire.mouse
- $canvas.fit
- $canvas.fitdmsxy
- $canvas.fitwms
- $canvas.flashstop
- $canvas.fullarea
- G
- $canvas.gomu
- $canvas.grayscale
- H
- $canvas.hardcopy
- I
- $canvas.id
- $canvas.importdem
- $canvas.inxy
- J
- K
- L
- $canvas.layer
- $canvas.limitpresetscale
- $canvas.linearprojection
- $canvas.loadedmaprange
- $canvas.loadmap
- $canvas.loadmapmem
- $canvas.loadmapvar
- $canvas.loadrefmap
- $canvas.loadrefmapmem
- $canvas.loadrefmapvar
- $canvas.loadwebmap
- $canvas.logclose
- $canvas.logcreate
- $canvas.logexec
- $canvas.logicalscale
- $canvas.logicaltoreal
- $canvas.logicaltoscale
- M
- $canvas.macro
- $canvas.mapbitmap
- $canvas.mapbitmaplasterror
- $canvas.mapfilenames
- $canvas.mapid
- $canvas.mapinfo
- $canvas.mappreview
- $canvas.mapprint
- $canvas.maprange
- $canvas.maprect
- $canvas.maptobmp
- $canvas.maptodib
- $canvas.maptodibex
- $canvas.maptopng
- $canvas.maptoscreen
- $canvas.maptoscreenrect
- $canvas.maptype
- $canvas.mapunit
- $canvas.mapupdate
- $canvas.maxsize
- N
- $canvas.namespace
- $canvas.newlayer
- $canvas.newlist
- $canvas.newstyle
- $canvas.newsymbol
- $canvas.newvlayer
- $canvas.numflash
- $canvas.nummaps
- O
- $canvas.obj
- $canvas.objundermouse
- $canvas.objundermouseex
- $canvas.opendc
- $canvas.opened
- $canvas.outxy
- P
- $canvas.pan
- $canvas.past
- $canvas.pastable
- $canvas.patchjgd
- $canvas.plane
- $canvas.presetscale
- $canvas.print
- $canvas.projection
- $canvas.projection2
- $canvas.protection
- $canvas.pullundo
- Q
- $canvas.queryactive
- $canvas.querychanged
- $canvas.queryclass
- $canvas.querydeleted
- $canvas.queryid
- $canvas.queryincircle
- $canvas.queryinrect
- $canvas.queryinsidecircle
- $canvas.queryinsidecircleex
- $canvas.queryinsidelockobj
- $canvas.queryinsiderect
- $canvas.queryinsiderectex
- $canvas.querylayer
- $canvas.querylayerex
- $canvas.querynearnodeincircle
- $canvas.querynearnodeinrect
- $canvas.querynew
- $canvas.queryobject
- $canvas.queryoverlaprect
- $canvas.queryoverlaprectex
- $canvas.queryundermouse
- $canvas.queryundermouseex
- $canvas.queryunderpoint
- $canvas.queryunderpointlayer
- $canvas.queryxy
- R
- $canvas.rasope
- $canvas.readdem
- $canvas.realscale
- $canvas.realtological
- $canvas.redo
- $canvas.redonum
- $canvas.redraw
- $canvas.removeallobjects
- $canvas.removecloneobjects
- $canvas.removelayer
- $canvas.removerefobjects
- $canvas.removeundo
- $canvas.replacemap
- $canvas.reprotection
- S
- $canvas.s2xy
- $canvas.savemap
- $canvas.savemaparea
- $canvas.savemapareavisible
- $canvas.savemapareavisiblexy
- $canvas.savemapareaxy
- $canvas.savemapvisible
- $canvas.savemapvisiblexy
- $canvas.savemapxy
- $canvas.savetile
- $canvas.savetilexy
- $canvas.scale
- $canvas.screenrect
- $canvas.screentomap
- $canvas.screentomaprect
- $canvas.scroll
- $canvas.scrolledrect
- $canvas.sec2xy
- $canvas.selection
- $canvas.selrange
- $canvas.simple
- $canvas.snap
- $canvas.snaparea
- $canvas.startdocument
- $canvas.staticredraw
- $canvas.styleproperty
- $canvas.symbol
- T
- $canvas.tileupdate
- $canvas.transparent
- U
- $canvas.undo
- $canvas.undoclear
- $canvas.undofinish
- $canvas.undonum
- $canvas.undonum
- $canvas.undostart
- $canvas.unprotection
- $canvas.update
- $canvas.updateloading
- V
- $canvas.vlayer
- W
- $canvas.webprint
- $canvas.worldrange
- $canvas.writedem
- X
- $canvas.xy2bl
- $canvas.xy2dms
- $canvas.xy2s
- $canvas.xy2sec
- $canvas.xylib
- Y
- Z
- $canvas.zorder
$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が与えられた場合はダイレクト編集時のマップファイル保存前処理です
$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 : マップタイプ
$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単位)
$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単位)
$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が返されます
最初のレイヤが再背面,最後のレイヤが最前面に表示されます
このコマンドが実行される前まではレイヤ定義順が表示順です