$obj

$obj.addline

gdi $obj.addline $L1xs $L1ys L1xe L1ye ... $Lnxs $Lnys $Lnxe $Lnye

return num_line

polygon型のオブジェクトにハッチングラインを追加します
ライン本数が返ります

座標値はラインの始終点座標列で与えます
参照 gdi $obj.line

$obj.align

gdi $obj.align [$align]

return oldalign

AreTextの配置調整モードをセットします
元のモードが返ります

文字列は範囲をはみ出すとカットされます
$align

 fit 均等配置
 left 左詰め
 right 右詰め
 center 中心

$obj.addxy

gdi $obj.addxy $x $y ....

return {num}

オブジェクトに頂点を追加します
頂点数が返ります
円、円弧、扇形、シンボル、テキストオブジェクトの場合、2点目以降の追加は無視さ
れます
プロテクトされているオブジェクトには働きません

$obj.addselection

gdi $obj.Addselection

return selectionlist

セレクションリスト(内部のオブジェクトリスト)へオブジェクトを追加します
オブジェクトリストであるセレクションリストが返ります
セレクションリストは削除不要です(試みても無視されます)
ただしオブジェクトのプロテクトが3に設定されている場合は拒否されます

$obj.and

gdi $obj.and $obj2

return {x1 y1 ... xn yn}

オブジェクト(obj)とオブジェクト(obj2)とのAND部を座標列で返します
両オブジェクトはポリゴンでなければなりません
完全内包はAND部と見なされません(このコマンドに先立ちチェックしてください)

gdi $obj.and $x1 $y1 .... $xn $yn
return {x1 y1 ... xn yn}

オブジェクト(obj)と座標で与えられた領域とのAND部を座標列で返します
オブジェクト(obj)はポリゴンでなければなりません

$obj.angle2

gdi $obj.angle2

return angle

円弧、扇形オブジェクトの開き角度を返します
他のオブジェクトの場合は0.0を返します

$obj.angle

gdi $obj.angle

return angle

テキスト、シンボル、bmp、円弧、扇形の角度を返します
円弧、扇形の場合は開始角度を返します
他のオブジェクトの場合は0.0を返します

gdi $obj.angle $angle

テキスト、シンボル、bmpの角度を設定します
円弧、扇形の場合は開始角度を設定します
他のオブジェクトの場合は何もしません
プロテクトされているオブジェクトには働きません

gdi $obj.angle $sa $wa

円弧、扇形の開始角度、開き角度を設定します
他のオブジェクトの場合は何もしません
プロテクトされているオブジェクトには働きません

$obj.appstyle

gdi $obj.appstyle $index [s1 $s1] [s2 $s2] [s3 $s3] [w $w] [Ls $Ls] [Le $Le] [Lm $Lm] [L0 $L0] [L1 $L1]

シンボルラインとシンボルポリゴンオブジェクトのappスタイルパラメータを変更します
gdi $canvas.newstyleコマンドで作成したスタイルはレイヤのappstyle
プロパティにセットして使用しますが、オブジェクト毎にスタイルパラメータを変
更する為のコマンドです。シンボルは表示OFF/ON設定しかできません。

indexには変更するスタイルインデックスを与えます
例えばレイヤプロパティが下記のとき
appstyle {2 私の破線 僕のシンボル}
「僕のシンボル」の値を変えたいならindexに1を与えます
s1 のあとに0か1を与え表示OFF/ONします(省略可能です)
s2 のあとに0か1を与え表示OFF/ONします(省略可能です)
s3 のあとに0か1を与え表示OFF/ONします(省略可能です)
w のあとに線幅を与えます(省略可能です)
Lsのあとに始点側オフセット値を与えます(省略可能です)
L0の後に繰り返しピッチ0を与えます(省略可能です)
L1の後に繰り返しピッチ1を与えます(省略可能です)
Leの後に終点側オフセット値を与えます(省略可能です)
Lmの後にシンボル配置オフセット値を与えます(省略可能です)

indexのみアーギュメントに与えるとスタイルパラメータのキャンセルになります
即ちレイヤ設定での描画になります

$obj.area

gdi $obj.area

return area

オブジェクトの面積を返します(内部単位)
ロード、ライン、シンボルライン、円弧の場合は0.0を返します

参考 gdi area

$obj.bmpcolor

gdi $obj.bmpcolor $index [$r $g $b]

return {r g b}

ビットマップオブジェクトの指定インデックスのカラーを設定します
カラーを与えなければ現在のカラーを返します
ビットマップオブジェクトでなければ何もしません
プロテクトされているオブジェクトはカラーを変更できません

$obj.brother

gdi $obj.brother

return olist

兄弟オブジェクトをオブジェクトリストで返します
返されたオブジェクトリストは呼び出し側で削除して下さい
$objがmdbオブジェクトの場合も有効です

$obj.canvas

gdi $obj.canvas

return canvas

オブジェクトのキャンバスを返します

$obj.cap

gdi $obj.cap [$cap]

return cap

ロードオブジェクトのキャップタイプを返します
ロードオブジェクトで無ければヌルを返します
プロテクトされているオブジェクトは変更できません
キャップタイプ
  -1:未設定(レイヤ設定に従う)
  0 :capなし
  1 :始点cap
  2 :終点cap
  3 :始終点cap

$obj.centering

gdi $obj.centering

オブジェクトが中心になるようキャンバス表示範囲を変更します
表示スケールは変えません
自動再表示もしません
$objがmdbオブジェクトの場合はタイルマップが自動ロードされgdiオブジェクトを得てから実行します

$obj.center

gdi $obj.center

return {x y}

オブジェクトの中心座標{x y}を返します
現バージョンではレンジ中心です

重心は
  lscan [eval gdi Garea [gdi $obj.xy]] gx gy
で求めてください

$obj.check

gdi $obj.check [cross]

return {x1 y1 ... xn yn}

オブジェトのねじれ(辺の交差)をチェックして全ての交差点の座標リストを返します
交差点がない場合、または円、ビットマップ、円弧、扇形、テキストオブジェクトの場合 /// はヌル文字を返します

gdi $obj.check doublepoint
  return {x1 y1 ... xn yn}

オブジェトの全ての2重頂点の座標リストを返します
2重頂点がない場合、または円、ビットマップ、円弧、扇形、テキストオブジェクトの場
合はヌル文字を返します

$obj.childrenex

gdi $obj.childrenEx [num]

return {olist|num}

子供オブジェクトをオブジェクトリストで返します
numが与えられたら子供の数を返します
子供オブジェクトに削除フラグが立っていても抽出するところがgdi $obj.childrenと異なります

返されたオブジェクトリストは呼び出し側で削除して下さい
$objがmdbオブジェクトの場合も有効です
参照
gdi $obj.link
gdi $obj.unlink
gdi $obj.parent
gdi $obj.parents
gdi obj.root

$obj.children

gdi $obj.children [num]

return {olist|num}

子供オブジェクトをオブジェクトリストで返します
numが与えられたら子供の数を返します

返されたオブジェクトリストは呼び出し側で削除して下さい
$objがmdbオブジェクトの場合も有効です
参照
gdi $obj.link
gdi $obj.unlink
gdi $obj.parent
gdi $obj.parents
gdi obj.root

$obj.clock

gdi $obj.clock

return clock

ポリゴンの面方向を求める
時計回りならclock=1を、反時計回りなら-1を返します

参考 gdi clock

$obj.connect

gdi $obj.connect {start|end} [{selection|$olist}]

return olist

オブジェクト端点と接続するオブジェクトをオブジェクトリストで返します
第1アーギュメントにはstartかendを与えます
"start"を与えると始点接続、"end"を与えると終点接続

第2アーギュメントに"selection"を与えるとセレクション可のオブジェクトのみ対象となり、
$olistを与えると$olistのオブジェクトのみ対象となります

$obj.copyproperty

gdi $obj.copyproperty $obj2

obj2にobjのプロパティ(name,field,座標値)をコピーします
obj2の色塗り揮発レイヤはクリアされます
objとobj2はレイヤが異なっても良いが、図形タイプは同じであること
obj2がプロテクトされていたら何もしません

$obj.copy

gdi $obj.copy [$x $y]

return obj

始点がx,yの位置にobjのコピーを作成して新しいオブジェクトハンドルを返します
name,fieldもコピーされます
objに親がいても独立したオブジェクトになります(linkはコピーされません)
x y を省略すると完全なコピーオブジェクトを返します
色塗り揮発レイヤはクリアされます

$obj.cross

gdi $obj.cross [$olist]

return {$obj1 x1 y1 ... objn xn yn}

$objと辺が交差するオブジェクトとその座標を求めます
即ち$objの辺を切断するためのものです
$objの始終点が他の返上に乗っている時も交点とみなされます
対象はolistに含まれるオブジェクトです
olistを省略するとマップ全体(表示ON && セレクションON)が対象です
ただし非線形オブジェクトは除外されます

リターン値は交差しているオブジェクトハンドルと交点座標(計3要素)の繰り
返しです。

参照
 gdi CrossEx
 gdi Cross

$obj.cutline

gdi $obj.cutline $index $x $y

return obj

ラインタイプのオブジェクトをindex番目の辺で分割して新しいオブジェクトハンドルを返し
ます
切断が失敗した場合は0が返ります
indexは1からです
新しいオブジェクトは終点側に生成されます
切断座標は与えられた座標がそのまま採用されます
頂点でも切断可。ただし始終点での切断は許されません
新しいオブジェクトは$obj.copyと同じ処理がされます(座標を除き)
ポリゴンタイプのような、ラインタイプ以外のオブジェクトには何もしません
色塗り揮発レイヤはクリアされます

$obj.cutpoint

gdi $obj.cutpoint $index

return n

ラインタイプのオブジェクトをindex番目の頂点を削除します
indexは0からです
ラインを分割し新しいオブジェクトを作成するのはgdi $obj.cutlineです
色塗り揮発レイヤはクリアされます

$obj.deleteflag

gdi $obj.deleteflag [?]

オブジェクトの座標を無効にし非表示にします(削除フラグ)

?を与えると現在の状態が返ります(1か0)

リファレンスオブジェクトが対象です
このコマンドにより削除フラフが立ったオブジェクトは
  gdi $canvas.QueryDeleted
  gdi $canvas.QueryInsideLockObj
で検索できますし、保存/読み込み可能です

削除フラグがセットされるとき、修正前のファミリィレンジがrootオブジェクトのmrecプロパティに自動セットされます
このmrecプロパティは、タイルマップ更新gdi $canvas.TileUpdate時に、タイルマップから旧オブジェクトを除外する処理で参照されます

$obj.delete

gdi $obj.delete [$del_event] [$new_event]

return num

オブジェクトを削除します
ただしclass::deleteイベントが1を返した場合だけです
削除したらUndoバッファに登録し、redoバッファをクリアします
削除された個数が返ります
$del_eventにはundoされた時のイベントプロシージャを与えます
$new_eventにはredoされた時のイベントプロシージャを与えます
いずれのイベントプロシージャも引数にオブジェクトハンドルが渡されます

$obj.dib

gdi $obj.dib

return dib

bmpタイプオブジェクトのDIBイメージハンドルを返します
DIBハンドルをTclBMP.DLLのGetDibInfo関数に渡すことによりイメージ情報を取得
することができます
また、TCL_RAS.DLLのrotation関数やtriming関数で回転、トリミング処理ができ /// ます
加工されたDIBイメージはbmpタイプオブジェクトに$obj.nameコマンドで再セットしたり、
BMZファイルに保存することなどもできます
このコマンド取得したDIBハンドルを破棄する処理はあり得ません

$obj.display

gdi $obj.display $xorswitch

xorswitchに1を与えるとオブジェクトを排他的論理和表示します
オブジェクトを非表示にしたいときに用います
通常表示されている場合、このコマンドの奇数回目のコールで非表示になり、偶数 /// 回目のコールで表示になります
ただし、他のオブジェクトが重なって表示されている場合は完全に非表示になら /// ない場合があります
このコマンドに類似した$obj.redrawは単なる再表示ですが、他のオブジェクトが重 /// なっていても正しく再表示されます
xorswitchに0を指定すると単なる再表示になります

$obj.disppixel

gdi $obj.disppixel $onoff

return oldonoff

viewオブジェクトにのみ有効です
ソースキャンバスのピクセルサイズのオブジェクを表示するか否か設定します
変更前の値が返ります

$obj.dms

gdi $obj.dms $latitude1 $altitude1 ....

return n

経緯度座標をオブジェクトにセットします
頂点数を返します
gdi $obj.xy コマンドの経緯度単位バージョンです
このコマンドに先立ち、gdi $canvas.fitdmsxy が実行されていなければなりま /// せん
つまり線形投影パラメータが設定されている場合にのみ有効です
経緯度は秒に10のn乗倍して求めた整数です
ここで10のn乗値はgdi $canvas.fitdmsxy で第1アーギュメントにセットされた値で

$obj.edge

gdi $obj.edge [$edge]

return edge

道路タイプ(road)の道路縁幅をセットします
edgeを省略すると現在の幅を返します
道路タイプ以外のオブジェクトの場合は空文字を返します

$obj.erase

gdi $obj.erase

オブジェクトを表示OFFします
一時的ですので次の再描画時には表示されます
このコマンドはオブジェクトを削除する前にコールします
削除前に非表示にして削除したことを知らせる為です

$obj.familyex

gdi $obj.familyEx

return olist

オブジェクトにリンクする全てのオブジェクトをオブジェクトリストで返します
自分自身もリストに含まれます
返されたオブジェクトリストは削除して下さい
$objがmdbオブジェクトの場合も有効です
deleteflagが立っているオブジェクトも含めるところがgdi $obj.family
と異なります

$obj.family

gdi $obj.family

return olist

オブジェクトにリンクする全てのオブジェクトをオブジェクトリストで返します
自分自身もリストに含まれます
返されたオブジェクトリストは削除して下さい
$objがmdbオブジェクトの場合も有効です

$obj.fieldutf($index)

gdi $obj.fieldutf($index) [$val]

return field_value

index番目のフィールドにUcsHexコード値をセットします
valの漢字コードはUcsHexコードであるべきです。

valを省略すると現在値を返します。返される文字コードは内部値のままです
つまり文字コードはユーザー自身が判断しなければなりません。
この場合には[gdi $obj.field($index)]と同じです

UcsHexコードとはgdi特有のコードで、漢字をユニコードHEX表現文字で表し、漢字部 /// の前後がESC(0x1B)で挟まれます
UcsHexコードをShift-JISに変換する手段は提供されていません
UcsHexコードをユニコードに変換する手段はapiコマンドで提供されます

$obj.field($index)

gdi $obj.field($index) [$val]

return field_value

index番目のフィールドに値valをセットします
valの漢字コードはShift-JISコードであるべきです
モード2以上でプロテクトされているオブジェクトには機能しません

値を省略すると現在値が返されます
この場合には、$objがmdbオブジェクトの場合も有効です

$obj.fielducs

gdi $obj.fielducs [$list]

return field_value

$listが省略されると現在のフィールド値をそのまま返します(Tclリスト)
この場合にはgdi $obj.fieldと全く同じ動作です。
$listを与える場合には、それらはUcsHexコードであること
オブジェクトフィールドには渡されたままのリストがセットされるが内部でUcsHexコードであ /// ることを意味するフラグが立ち、表示時に配慮されます

$obj.fieldutf

gdi $obj.fieldutf [$list]

gdi $obj.fielducsと同
互換性維持

$obj.field

gdi $obj.field [$list]

return field_value

$listが省略されると現在のフィールド値をそのまま返します(Tclリスト)
この場合には、$objがmdbオブジェクトの場合も有効です

$listが与えられるとオブジェクトフィールド値を変更します
モード2以上でプロテクトされているオブジェクトには機能しません

$obj.filetype

gdi $obj.fileType

return type

オブジェクトをロードしたファイル(リファレンスファイル)のタイプを返します
ただしアクティブオブジェクトの場合は空文字が返ります

$obj.file

gdi $obj.file

return filename

オブジェクトをロードしたファイル名(リファレンスファイル名)を返します
$objがmdbオブジェクトの場合も有効です
ただしアクティブオブジェクトの場合は空文字が返ります
アクティブオブジェクトとは、新規作成されたオブジェクトか、書き込みモードでロードされたファイルに含まれていたオブジェクト

$obj.fit

gdi $obj.fit

オブジェクトを画面全体に表示します
表示範囲は図形レンジから求められます
シンボルの場合は幅、高さ100000の範囲が表示されます
つまり、1ドットが1mmのマップ単位の場合にはシンボルを中心として100m範囲が表
示されます
結果を表示するにはgdi $canvas.redrawが必要です

$obj.flashstop

gdi $obj.flashstop

オブジェクトの点滅表示をOFFします

$obj.flash

gdi $obj.flash [$times]

オブジェクトを点滅表示します
$timeには点滅回数を与えます
$timesを省略するとgdi $canvas.flashstopが実行されるまで点滅を継続します(ver3.0)
点滅は表示0.15秒、非表示0.1秒間隔で行われます
$objがmdbオブジェクトの場合はタイルマップが自動ロードされgdiオブジェクトを得てから実行します

$obj.free

gdi $obj.free

ビットマップオブジェクトのメモリイメージを一時的に解放します
再表示されるときに再ロードされます

$obj.gdi

gdi $obj.gdi

return gdiobj

gdiオブジェクトハンドルを返します
このコマンドはobjがmdbオブジェクトの時に意味があります
objがgdiオブジェクトの時コールされると同じobjが返されます

$obj.getvlayer

gdi $obj.getvlayer

return vlayer

オブジェクトが記憶する揮発レイヤにはプライマリとセカンダリの2つがあります
0が返ればプライマリ、セカンダリ揮発レイヤが共にセットされていないことを意味します
この判定の為にのみ使用してください
参照
 gdi $obj.vlayer
 gdi $obj.paint

$obj.hole

gdi $obj.hole

return numhole

オブジェクトのホール数(飛び地数)を返します

$obj.id

gdi $obj.id [$id]

return id

オブジェクトのIDを返します
$objがmdbオブジェクトの場合も有効です
IDはオブジェクトが発生するときに振られ、永久に不変です
IDはファイル単位でユニークです
つまり複数のファイルからオブジェクトがロードされた場合には同じID
のオブジェクトが存在しますが、オブジェクトのリファレンスIDとの組み合
わせで区別することが出来ます
オブジェクトのリファレンスIDを求めるにはgdi $obj.ReferenceID
使用します
オブジェクトのファイル名を得るにはgdi $obj.fileを使用します

アーギュメントに$idを与えるとIDを変更します
リファレンスオブジェクト編集が許可されている場合、保存する際にユニーク
なIDをアプリケーション側で振り直す必要があります。
参照: {
 gdi $canvas.EditReference
 gdi $obj.maxid

$obj.inner.set.symbol

gdi $obj.inner.set.symbol [$index $symobj ...]

return success

TEXTオブジェクト($obj)の文字列にシンボルオブジェクト($symobj)を外字として挿入します。
TEXTオブジェクトにのみ有効なコマンドです。
挿入されたシンボルオブジェクトのハンドルは無効になります。

既にシンボルオブジェクトが存在する場合はクリアしてから再セット処理が行われます。

$indexはシンボルの挿入位置であり、バイトアドレスで与えます。
シンボルが挿入されるTEXTオブジェクトの文字列は、シンボルが挿入される範囲にスペース文字
が必要です。

アーギュメントを省略して実行すると挿入オブジェクトの全クリアになります

シンボルオブジェクトの配置座標と角度は自動設定されますが、サイズは変更されません。
(現実的にはシンボルサイズの微調整が必要だからです)
シンボルの座標は挿入位置の左下座標になります。

挿入されたシンボルオブジェクトは親TEXTオブジェクトの修正に連動して自動修正されます。
ただし、
TEXTオブジェクトの文字数が変更された場合はインナーオブジェクトの位置も変更する必要が
あるので再セットしなければなりません(インナーオブジェクトで再セットしてはいけません)

このコマンドはgdi $obj.inner.setと排他的です

例:シンボルオブジェクト☆を用いて "つのだ☆ひろお" と表示する
set text [gdi $textlay.newobj]
gdi $text.name "つのだ ひろお"
set symbol [gdi $symlay.newobj]
gdi $text.inner.set.symbol 6 $sym

参照
gdi $obj.inner.set
gdi $obj.inner.num
gdi $obj.inner.olist

$obj.inner.set

gdi $obj.inner.set [$innerobj ...]

return num

オブジェクト($obj)にオブジェクト($innerobj)を挿入します。
インナーオブジェクト数が返ります
既にインナーオブジェクトが存在する場合はクリアしてから再セット処理が行われます。

挿入されたオブジェクトは親オブジェクトの修正に対し連動して自動修正されます。
つまり複数のオブジェクトを一つのオブジェクトとして扱えるようになります。
挿入されたオブジェクトのハンドルは無効になります

アーギュメントを省略して実行するとインナーオブジェクトの全クリアになります

このコマンドはgdi $obj.inner.set.symbolと排他的です

参照
gdi $obj.inner.set.symbol
gdi $obj.inner.num
gdi $obj.inner.olist

$obj.inner.num

gdi $obj.inner.num

return num

オブジェクト($obj)のインナーオブジェクト数を返します

参照
gdi $obj.inner.set
gdi $obj.inner.set.symbol
gdi $obj.inner.olist

$obj.inner.olist

gdi $obj.inner.olist

return olist

オブジェクト($obj)のインナーオブジェクトをオブジェクトリストで返します
オブジェクトリストは使用後に呼び出し側で削除して下さい

参照
gdi $obj.inner.set
gdi $obj.inner.set.symbol
gdi $obj.inner.num

$obj.insert

gdi $obj.insert $index $x $y

return n

頂点を挿入します
新頂点数が返ります
頂点数固定のオブジェクトに対しては無意味です
$indexは挿入後の頂点番号(0から現在の頂点数までの範囲)
$x $yは挿入頂点座標
既存頂点と同じ座標には挿入できません(2重頂点禁止)
また現在の頂点数が1の場合には無視されます
プロテクトオブジェクトには機能しません

$obj.inside

gdi $obj.inside $x $y

return inside

座標$x,$yの位置がオブジェクトの内部に含まれているか否かを返します
inside=1が返れば内部点、0が返れば外部点です
境界線上の場合は2が返ります

$obj.layername

gdi $obj.layername

return layername

オブジェクトのレイヤ名を返します
$objがmdbオブジェクトの場合も有効です

$obj.layer

gdi $obj.layer [$layer]

return {layer|obj}

$layerを省略するとオブジェクトのレイヤハンドルを返します
$objがmdbオブジェクトの場合はレイヤ名を求めてからハンドルを求め直して下さい
  例:
   set layername [gdi $obj.layername]
   set layer [gdi $canvas.layer $layername]

レイヤハンドル$layerを与えると、オブジェクトをそのレイヤに移動します
移動先は原則的に同じ図形タイプのレイヤでなければなりません
図形タイプが異なっていてもエラーではありません
新しいオブジェクトハンドルが返ります

プロテクトオブジェクトには機能しません

$obj.length

gdi $obj.length

return length

オブジェクトの長さを実数値で返します
シンボル以外の全てのオブジェクトが値を返します
シンボルの場合には0.0が返ります

$obj.line

gdi $obj.line $L1xs $L1ys L1xe L1ye ... $Lnxs $Lnys $Lnxe $Lnye

return n

polygon型のオブジェクトにハッチングラインをセットします
ライン本数が返ります

座標値はラインの始終点座標列で与えます
参照 gdi $obj.addline

gdi $obj.link $parentobj

オブジェクトリンクを作成します
$objは$parentobjの子供になります
参照
gdi $obj.unlink
gdi $obj.parent
gdi $obj.parents
gdi obj.root
gdi $obj.children

$obj.lock

gdi $obj.lock

return bool

オブジェクトが修正禁止か否かを返します
0が返れば修正可です
0以外の値は修正禁止(オブジェクトがプロテクトされている)です

このコマンドは下記のコマンドを複合したものです
gdi $canvas.protectionがonの時はgdi $obj.protection
の値がそのまま返ります。
gdi $canvas.protectionがoffの時は常に0が返ります
ただしレイヤの修正ロックがかかっている場合は常に1を返します

$obj.logdelete

gdi $obj.logdelete $event $arg1 ...

return success

ログファイルにオブジェクト削除を記録します
成功したら1、失敗したら0が返ります
このコマンドを使用する際はログファイルが作成されている必要があります
ログファイルを作成するコマンドは
 gdi $canvas.LogCreate $filename
です
オブジェクトを削除する直前に実行します
$eventは、オブジェクトを削除する時に実行するイベントプロシージャ名です
$arg1 ... はイベントプロシージャのアーギュメントです

$viewobj.logicalscale

gdi $viewobj.logicalscale $scale

$obj.lognew

gdi $obj.lognew $event $arg1 ...

return success

ログファイルにオブジェクトが作成されたことを記録します
成功したら1、失敗したら0が返ります
このコマンドを使用する際はログファイルが作成されている必要があります
ログファイルを作成するコマンドは
 gdi $canvas.LogCreate $filename
です
オブジェクトが作成され座標や属性のセットが完了してから実行します
$eventは、オブジェクトが作成されたときに実行したイベントプロシージャ名です
$arg1 ... はイベントプロシージャのアーギュメントです

$obj.log

gdi $obj.log $event $arg1 ...

return success

ログファイルにオブジェクト修正を記録します
成功したら1、失敗したら0が返ります
このコマンドを使用する際はログファイルが作成されている必要があります
ログファイルを作成するコマンドは
 gdi $canvas.LogCreate $filename
です
オブジェクト修正が完了した直後に実行します
$eventは、オブジェクトが修正されたときに実行したイベントプロシージャ名です
$arg1 ... はイベントプロシージャのアーギュメントです

$obj.maxid

gdi $obj.maxid

return maxid

オブジェクトが属するファイルに格納されているオブジェクトの
最大IDを返します

参照
 gdi $obj.id
 gdi $canvas.EditReference

$obj.move

gdi $obj.move $x $y

return n

オブジェクトの始点が($x,$y)になる位置に移動します
頂点数を返します
プロテクトオブジェクトには機能しません

$obj.nameucs

gdi $obj.nameucs [$name]

return name

$nameが省略されると現在のname値をそのまま返します。
この場合にはgdi $obj.nameと全く同じ動作です。
$nameを与えるとname値を変更します(プロテクトオブジェクトには機能しません)
$nameを与える場合には、それらはUcsHexコードであること
オブジェクトには渡されたままの文字列がセットされるが内部でUcsHexコードである
ことを意味するフラグが立ち、表示時に配慮されます

$obj.name

gdi $obj.name [$name]

return name

ビルトインプロパティであるname値を操作します
nameはオブジェクトによっては特別な役割も持ちます

$nameが省略されると現在のname値をそのまま返します
この場合、$objがmdbオブジェクトの場合も有効です

$nameを与えると変更します(プロテクトオブジェクトには機能しません)
gdiオブジェクトに対してのみ有効です

テキスト,エリアテキストオブジェクトのname値

name値は表示文字列になります

ビットマップオブジェクトのname値

name値はイメージファイル名です
 この場合,ファイル名と矩形範囲をリストで与えることも出来ます
    gdi $obj.name [list $filename $xmin $ymin $xmax $ymax]
 これは
    gdi $obj.name $filename
    gdi $obj.xy $xmin $ymin $xmax $ymax
 と同じです
 座標付きのname値をセットした場合でも、参照するとファイル名しか返りません

また、既に作成済みのdibハンドルを与えることもできます
 この場合、アーギュメントは2つ与えることになります
 gdi $obj.name $dib $filename
 gdi $obj.name $dib [list $filename $xmin $ymin $xmax $ymax]

  $dibが現在のdibと異なるなら旧メモリイメージが解放され,入れ替えられます
  与えた$dibは作成側が削除しなければなりません(メモリイメージは削除しないモード)
  ただしdibを別のビットマップオブジェクトから得た場合(gdi $obj.dib)には削除
  してはいけません
  dibに関してはtclexgau_bmp.dllの関数で操作します

アイコンオブジェクトのname値

name値はアイコンをリソースとしてもっているexe,dllファイル名です
小さいアイコンを優先して採用します
name値に"filing"を与えるとファイリング用のFボタンアイコンを表示します

クエリ

name値へのクエリコマンドが独立して提供されています
参照
 gdi $olist.QueryName
 gdi $olist.QueryNameInclude
 gdi $olist.QueryNameGlob
 gdi $olist.QueryNameFirst
 gdi $olist.QueryNameAll

$obj.near

gdi $obj.near $x $y $distance

return {index x y}

オブジェクトが指定点($x,$y)から$distance以内に有るか否かを返します
離れていれば空文字を返します
範囲内ならば{index x y}リストを返します
index : 最近傍辺番号(0から)
x y : 指定点から辺に降ろした垂線との交点座標

$obj.num

gdi $obj.num

return n

頂点数を返します
負数が返されたらそれはdeleteフラグが立ったオブジェクトです

$obj.overlap

gdi $obj.overlap [$onoff]

return onoff

タイル跨りであるかその真偽を返します

$obj.paint

gdi $obj.paint [{$vlay|?}]

一時着色用の揮発レイヤをセット/リセットします
$vlayに0を与えるか省略するとリセットします
$vlayに負数を与えるとオブジェクトは非表示になります。

オブジェクトの揮発レイヤにはプライマリ/セカンダリの2つがあります
このコマンドはセカンダリ揮発レイヤを操作します

もしセレクションオブジェクトに適用するとセレクション表示を一時的に変更する
処理になります。セレクションが解除されると元に戻されます。
  参照:gdi $canvas.selection.color}

$vlayに"?"を与えると現在のセカンダリ揮発レイヤハンドルを返します

プライマリ揮発レイヤへのアクセスはgdi $obj.vlayerコマンドです

$obj.parents

gdi $obj.parents [num]

return {olist|num}

リンクを辿り全ての親オブジェクトをオブジェクトリストで返します
numが与えられたら親の数を返します

オブジェクトリストは使用後削除して下さい
$objがmdbオブジェクトの場合も有効です
参照
gdi $obj.link
gdi $obj.unlink
gdi $obj.parent
gdi obj.root
gdi $obj.children

$obj.parent

gdi $obj.parent

return obj

親オブジェクトを返します
複数の親がいる場合、最後に親とされたオブジェクトが返ります
$objがmdbオブジェクトの場合も有効です
参照
gdi $obj.link
gdi $obj.unlink
gdi $obj.parents
gdi obj.root
gdi $obj.children

$obj.pixel2xy

gdi $obj.pixel2xy $px $py

return {x y}

ビットマップオブジェクトのラスタ座標(px,py)をマップ座標(x,y)に変換します
{x y}リストが返ります

$obj.polygonclip

gdi $obj.polygonclip $stringobj

return {L1xs L1ys L1xe L1ye L2xs L2ys... Lnxe Lnye}

ポリゴンオブジェクト領域で線形オブジェクトをクリッピングします
クリッピング結果として線分座標値リストを返します
空リストが返れば内部に含まれる辺がないことを意味します

gdi $obj.polygonclip $x1 $y1 ...
return {L1xs L1ys L1xe L1ye L2xs L2ys... Lnxe Lnye}

ポリゴンオブジェクト領域で座標アーギュメントで与えられたラインをクリッピングします
クリッピング結果として線分座標値リストを返します
空リストが返れば内部に含まれる辺がないことを意味します

$obj.protection

gdi $obj.protection [$mode]

return protected

$modeに1またはonを与えるとオブジェクトの座標修正がプロテクトされます
$modeに2を与えるとオブジェクトの座標及び属性修正がプロテクトされます
$modeに3を与えると更にオブジェクトのセレクションもプロテクトされます
$modeに0またはoffを与えるとオブジェクトのプロテクトを解除します
$modeを省略すると現在の設定状態が返ります

ただし、キャンバスのプロテクトモードがOFFの場合にはプロテクト機能は働きません
キャンバスのプロテクトモードは[gdi $canvas.protection $onoff]で設定します
キャンバスの初期設定はプロテクションモードがONです。

$obj.pushafter

gdi $obj.pushAfter [$event]

return success

変更後のオブジェクトをUndoバッファに積みます
eventにはUndoされた後に実行するイベントスクリプトを与えます
このイベントスクリプトは変更の際に実行されるものと同じです
スクリプトはTclリスト形式で、先頭要素がコマンド名、以降の要素がアーギュメントです
Redoのときには、コマンド名の次ぎにオブジェクトハンドルが挿入されて実行されます
従ってコマンドは第一アーギュメントにオブジェクトハンドルを受け取るものとして定義され
ている必要があります
eventは省略可能です
PushBeforeした後に修正し、その直後にPushAfterをコールしてください
尚、オブジェクトの更新時刻がupdateプロパティに自動セットされます

gdi $obj.PushBefore参照

$obj.pushbefore

gdi $obj.pushBefore [$event]

return success

変更前のオブジェクトをUndoバッファに積みます
eventにはUndo後Redoされた時に実行するスクリプトを与えます
このスクリプトは変更が戻される時に実行されるものなので、移動などの場合には、
変更の際に実行されたスクリプトとアーギュメントが逆の値(符号逆転)を与えます。
スクリプトはTclリスト形式で、先頭要素がコマンド名、以降の要素がアーギュメントです
Redoのときには、コマンド名の次ぎにオブジェクトハンドルが挿入されて実行されます
従ってコマンドは第一アーギュメントにオブジェクトハンドルを受け取るものとして定義され
ている必要があります
eventは省略可能です
PushBeforeした後に修正し、その直後にPushAfterをコールしてください
gdi $obj.PushAfter参照

$obj.pushcreateobj

gdi $obj.pushCreateObj [$new_event [$del_event]]

return success

新規作成されたオブジェクトをUndoバッファに積みます
尚、オブジェクトの変更時刻が自動セットされます

$obj.radius

gdi $obj.radius [$radius]

return radius

円、円弧、扇形の半径を返します
$radiusが与えられると半径を変更します
半径を持たないオブジェクトに対しては何もしません(空文字を返します)
プロテクトオブジェクトの半径は変更出来ません

$obj.rectclip

gdi $obj.rectclip $stringobj

return {line line2 ...}

オブジェクトレンジで、線形オブジェクトをクリッピングします
クリッピング結果としてライン座標を複合リストで返します
例:{x1 y1 x2 y2 ... yn} {x1 y1 x2 y2 ... yn}
空リストが返れば内部に含まれる辺がないことを意味します

gdi $obj.rectclip $x1 $y1 ...
return {line line2 ...}

オブジェクトレンジで、座標アーギュメントで与えられたラインをクリッピングします

$obj.range

gdi $obj.range [{old | family | oldfamily}]

return {xmin ymin xmax ymax}

オブジェクトのレンジを返します

レンジとはオブジェクト全体を囲む最小の矩形範囲です
objがmdbオブジェクトの場合も有効です

"old"を与えると編集前レンジを返します
編集レンジがなければ空リストを返します

"family"を与えると家族全体の範囲を返します
"oldfamily"を与えると、マップからロードされた状態(編集前)の家族全体の範囲を返します
このオプション機能はmdbオブジェクトには無効です

$obj.rect

gdi $obj.rect [{old | family | oldfamily}]

return {xmin ymin xmax ymax}

gdi $obj.rangeと同じです
旧バージョンとの互換性のため残されています

$obj.referenceid

gdi $obj.referenceID [$id]

return referenceid

オブジェクトのリファレンスIDを返します
0が返ればオブジェクトはアクティブオブジェクトです
$idを与えるとリファレンスIDをセットします
その時、IDも更新されます

$obj.reference

gdi $obj.reference [$notsave]

return {1 | 0}

オブジェクトがリファレンスオブジェクトであるか否かを返します
1が返ればリファレンスオブジェクト、0が返ればアクティブオブジェクトです
リファレンスオブジェクトとは、gdi $canvas.LoadRefMapコマンドで参照用としてファイルか
らロードされたオブジェクトです
これらのオブジェクトはファイルに保存されません
修正が可能で、ファイルに保存できるオブジェクトがアクティブオブジェクトです
gdi $canvas.LoadMapコマンドでロードされたか、新規入力されたオブジェクトです

アーギュメントに1を与えると擬似的にリファレンスオブジェクトにすることができます
ただしアクティブオブジェクトに対してのみ有効です
保存したくない場合などに擬似的リファレンスオブジェクトにします
アーギュメントに0を与えると擬似的にリファレンスオブジェクトにされていたオブジェクトをアクティブ
に戻します

リファレンス編集可能モードの時はリファレンスオブジェクトでも0が返ります
参照: gdi $canvas.EditReference

$obj.redraw

gdi $obj.redraw

オブジェクトを再描画します
実際にはオブジェクトのレンジ全体を再描画します

$obj.remove

gdi $obj.remove

オブジェクトを削除します(Undoできない削除です)
削除しても再表示コマンドを実行しませんと確認できません
キャンバス全体を再表示すると効率が悪いので下記のように処理します
 gdi $obj.erase
 gdi $obj.remove
つまり先に非表示にします
プロテクトオブジェクトには機能しません

$obj.reverse

gdi $obj.reverse

オブジェクトの座標順を反転します
ポリゴンや線形タイプオブジェクトにのみ有効です
プロテクトオブジェクトには機能しません

$obj.root

gdi $obj.root

return obj

リンクを辿り、最上位の親オブジェクトを返します
親が居なければ0を返します
$objがmdbオブジェクトの場合も有効です
参照
gdi $obj.link
gdi $obj.unlink
gdi $obj.parent
gdi $obj.parents
gdi $obj.children

$obj.rotatecopy

gdi $obj.rotatecopy $x $y $ang

return newobj

($x,$y)を中心にして$ang度回転したコピーオブジェクトを返します
色塗り揮発レイヤはクリアされます

$obj.rotate

gdi $obj.rotate $x $y $ang

オブジェクトを($x,$y)を中心にして$ang度回転します
プロテクトオブジェクトには働きません

$obj.scalecopy

gdi $obj.scalecopy $x $y $sx $sy

return newobj

($x,$y)を中心にしてx方向に$sx倍、y方向に$sy倍したコピーオブジェクトを返し
ます
色塗り揮発レイヤはクリアされます

$obj.scaling

gdi $obj.scaling $x $y $sx $sy

オブジェクトを($x,$y)を中心にしてx方向に$sx倍、y方向に$sy倍します
プロテクトオブジェクトには働きません

$obj.source

gdi $obj.source [$canvas]

return canvas

旧コマンドです。gdi $obj.view.sourceに変更されました

$obj.type

gdi $obj.type

return type

オブジェクトの図形タイプを返します
$objがmdbオブジェクトの場合も有効です

load
circle
arc
fan
string
polygon
text
areatext
symbol
symbolline
symbolpolygon
bmp
rectangle
square
view
icon

gdi $obj.unlink

オブジェクトのリンクを解除します
プロテクトオブジェクトには働きません
参照
gdi $obj.link
gdi $obj.parent
gdi $obj.parents
gdi obj.root
gdi $obj.children

$obj.update

gdi $obj.update [set|clear|$second|before|after $buffadr]

return {update_time|buffadr}

アーギュメントを省略するとオブジェクトの修正時刻を秒で返します
setを与えると現在の時刻をセットします
clearを与えると修正時刻をクリアします
その時同時にmrec(修正前レンジ)もクリアされます

時刻を与えると([clock second])その時刻をセットします

beforeを与えると修正前のオブジェクトの状態を記憶し,そのバッファアドレスを返します
afterを与えると修正後のオブジェクトの状態を調べ修正があれば修正時刻をセットします
afterに続けてバッファアドレスを渡す必要があります

gdi $obj.pushAfter,gdi $obj.pushCreateObjコマンドが実行されると、自動的に
gdi $obj.update set
がコールされます

$obj.view

gdi $obj.view

旧コマンドです。gdi $obj.view.areaに変更されました

$obj.view.area

gdi $obj.view.area [$xmin $ymin $xmax $ymax [wms]]

return {xmin ymin xmax ymax}

viewオブジェクトの表示範囲(マップ座標)を設定します

gdi $obj.view.area $x0 $y0 $x1 $y1 $x3 $y3

viewオブジェクトの表示範囲の座標軸(マップ座標)を設定します

プロテクトオブジェクトは設定できません
アーギュメントを省略すると現在値を返します
※viewオブジェクトの大きさが変更されると表示範囲は自動調節されます
 自動調節は中心維持、スケール維持で行われます

参照 gdi $obj.view.source

$obj.view.source

gdi $obj.view.source [$canvas]

return canvas

viewオブジェクトが表示するマップを開いているキャンバス(ソースキャンバス)を設定します
アーギュメントを省略すると現在値(キャンバスハンドル)を返します

参照 gdi $obj.view.area
gdi $obj.view.dpi

$obj.vlayer

gdi $obj.vlayer [{$vlayer|?}]

return $vlayer

オブジェクトの揮発レイヤにはプライマリ/セカンダリの2つがあります
このコマンドはプライマリ揮発レイヤを書き換えます
揮発レイヤ($vlayer)をアーギュメントに与えるとオブジェクトの表示が変更されます
その時、セカンダリ揮発レイヤ(着色用)は無条件にクリアされます

$vlayerに0を与えるか省略すると解除になります
 (セカンダリが設定されている場合はセカンダリ揮発レイヤで表示されます)
$vlayerに-1を与えると「非表示」指定になります
ただしプライマリ揮発レイヤは変更されずにセカンダリ揮発レイヤに-1がセットされます
したがって非表示設定は[gdi $obj.paint -1]を使用すべきです

このコマンドは恒久的な(マップを閉じるまで)表示変更の為に用いられます
更に、このコマンドで与えた揮発レイヤのsavemapフラグが立っている場合には
プライマリ揮発レイヤはマップに保存され、ロード時に再アタッチが試みられます。
(非表示設定は保存されません)

$vlayerに"?"を与えるとプライマリ側の現在値を返します
0が返ってもセカンダリ側に揮発レイヤがセットされている場合がありますので
オブジェクトは着色表示されています(参照:gdi $obj.getvlayer)

このコマンドにオブジェクトプロテクションは関与しません

$obj.width

gdi $obj.width [$width]

return width

道路、円弧オブジェクトにのみ有効です
$widthを省略すると現在の幅(厚さ)が返ります
$widthを与えると道路幅、円弧の厚さを変更します
プロテクトオブジェクトは変更できません

$obj.xy($i)

gdi $obj.xy($i) [$x $y]

return {x y}

アーギュメントを省略するとオブジェクトのi番目の座標値を返します
この場合には、$objがmdbオブジェクトの場合も有効です

iは頂点番号であり始点は0です
iが負数の場合は最終点からのオフセットになります
-1が最終点です

$x $yを与えると座標値を変更します
プロテクトされたオブジェクトは変更出来ません

$obj.x($i)

gdi $obj.x($i) [$x]

return x

オブジェクトのi番目のx座標値を返します

iは頂点番号であり始点は0です
iが負数の場合は最終点からのオフセットになります
-1が最終点です

$xを与えるとi番目のx座標値を変更します
ただしこの使い方は推奨されません。座標はx,yペアで与えるべきものなの
で[gdi $obj.xy($i) $x $y]を使用して下さい
プロテクトされたオブジェクトは変更出来ません

$obj.xy2pixel

gdi $obj.xy2pixel $px $py

return {x y}

ビットマップオブジェクトのイメージ座標(ピクセル座標)をマップ座標に変換して返します
$px,$pyはイメージデータサイズ外でも構いません(例えば負数)
オブジェクトがビットマップオブジェクトでない場合には与えた座標がそのまま返りま

$obj.xyex

gdi $obj.xyEx

return {座標値リスト及びパラメータ}

オブジェクトの座標値リストとともに、オブジェクトが円、円弧、扇形、道路、シンボル、 /// テキストの場合には固有の値も返します

circle x y r rは半径
arc x y r sa wa w rは半径,saは開始角,waは開き角wは厚さ
fan x y r sa wa rは半径,saは開始角,waは開き角
symbol x y ang angは角度
text x y ang angは角度
road Ww Eedge Ccap x1 y1 ... xn yn
    wは幅員,edgeは道路縁幅,capは端末処理フラグ
    それぞれW,E,Cはキーワードです
    w,edge,capがオブジェクトにセットされていなければ戻
    り値リストに現れません

$obj.xy

gdi $obj.xy [$x1 $y1 ... xn yn]

return {x1 y1 ...xn yn}

オブジェクトの座標値リストを返します
座標値リストを与えると座標値を変更します
変更はプロテクトされたオブジェクトには機能しません

オブジェクト固有の幾何情報も戻り値リストに含まれます。
$obj.xyExと異なる点は、シンボル、テキスト、道路の場合に座標値しか返さない点
です

座標以外のパラメータ(半径や角度)に限り、それらを与えることも、省略する
ことも出来ます
(シンボル、テキストの角度は取得は出来ませんが、与えることはできます)

このコマンドの仕様は分かりにくいものがあります
互換性を維持しながら拡張してきた結果、分かりにくくなっています
基本的に、座標値を一括して(リストとして)取り出すには、オブジェクトタイプに
より下表のコマンドを使い分けて下さい

gdi $obj.xyを使用するオブジェクトタイプ(頂点数不定)
string, polygon, road, symbolline, symbolpolygon,
square, areatext
gdi $obj.xy(0)を使用するオブジェクトタイプ(中心座標のみ)
circle,arc,fan,symbol,text
gdi $obj.rectを使用するオブジェクトタイプ(矩形範囲)
bmp, rectangle

※ bmpオブジェクト座標を{gdi $obj.xy]で取得すると5頂点座標が返ります /// す
※ squareオブジェクト座標を[gdi $obj.xy]で取得すると2頂点座標が返り
ます

半径や角度など、座標以外の幾何情報の取得、設定にはそれぞれにコマンドが
用意されているのでそれらを使用して下さい

$obj.y($i)

gdi $obj.y($i) [$y]

return y

オブジェクトのi番目のy座標値を返します

iは頂点番号であり始点は0です
iが負数の場合は最終点からのオフセットになります
-1が最終点です

$yを与えるとi番目のy座標値を変更します
ただしこの使い方は推奨されません。座標はx,yペアで与えるべきものなの
で[gdi $obj.xy($i) $x $y]を使用して下さい
プロテクトされたオブジェクトは変更出来ません