$olist

$olist.addselection

gdi $olist.AddSelection

return olist

オブジェクトリストに含まれるオブジェクトをセレクションリストに追加します
セレクションリストハンドルを返します

$olist.and

gdi $olist.and $olist1 ...

return newolist

オブジェクトリストolistとアーギュメントに与えられたオブジェクトリストに共通に含まれるオブジェクト
を新しいオブジェクトリストハンドルで返します
$olistがmdbリストの場合も有効です。その場合mdbリストが返ります。

$olist.append

gdi $olist.append $obj ...

return olist

オブジェクトリストにオブジェクトを追加します
同じオブジェクトリストを返します

オブジェクトリストを追加する場合はgdi $olist.mergeを使います
$olistがmdbリストの場合も有効です。ただしその場合には$objもmdbオブジェクトでなければなりません

$olist.canvas

gdi $olist.canvas

return canvas

オブジェクトリストが所属するキャンバスを返します

$olist.clear

gdi $olist.clear

return num

オブジェクトリストをクリアします
クリアされたオブジェクト数が返ります

$olist.clip

gdi $olist.clip copy [$new_event [$del_event]]

gdi $olist.clip cut [$new_event [$del_event]]
return num

オブジェクトリストに含まれるオブジェクトをクリップボードにコピー/カットします
オブジェクトの個数が返ります
クリップボードはWindowsのそれではなく、gdiのクリップボードです

$olist.compress

gdi $olist.compress

return num

除外フラグが立っているオブジェクトをリストから除外し、個数を返します
mdbオブジェクトリストにも有効です
参照: gdi $olist.subst

$olist.copy

gdi $olist.copy

return newlist

オブジェクトリストのコピーを返します
$olistがmdbリストの場合も有効です。その場合mdbリストが返ります。

$olist.cross

gdi $olist.cross [$guiname] [$format]

return {obj1 obj2 x y ....}

オブジェクトリスト内で互いに交差するオブジェクトを探し交差した両オブジェクトの
オブジェクトハンドルと交点座標をTclリストで返します
例えば交点が2カ所あれば8要素のリストが返ります
guiname とformatには途中経過を表示したい場合にguiコントロール名と表示
フォーマット(c言語の整数タイプ置換フォーマット)を与えます

$olist.data

gdi $olist.data $obj [$data]

return data

オブジェクトリストに含まれるオブジェクトのデータを参照します
-99が返るとデータが無いことを意味します

$data与えると変更します
成功すると同じ値が返ります
失敗すると$dataから99を減じた値が返ります

$olist.deleteflag

gdi $olist.deleteflag

リスト内オブジェクトに削除フラグを立てます

$olist.deleteobj

gdi $olist.deleteobj [$del_event [$new_event]]

return num

リスト内オブジェクトを削除します
ただしdeleteイベントが1を返した場合だけです
削除したらUndoバッファに登録し、redoバッファをクリアします
削除された個数が返ります

$olist.delete

gdi $olist.delete

return refcount

参照カウンタが0ならオブジェクトリストを削除します
0以外なら参照カウンタを減じます
参照カウンタ値を返します
-1が返れば削除されたことを意味します
オブジェクトリストがロックされている場合は何もしません
$olistがmdbリストの場合も有効です。

参照:gdi $olist.incref

$olist.eraseobj

gdi $olist.eraseobj

オブジェクトリストに含まれるオブジェクトを一時的に非表示にします
(削除するのではありません)

$olist.exists

gdi $olist.exists $obj

return true

オブジェクトリストに$objが含まれているかを調べます
含まれていれば1を返します

$olist.extract

gdi $olist.extract $hlayer

return olist

オブジェクトリストから指定レイヤハンドルのオブジェクトを抽出します
抽出されたオブジェクトがオブジェクトリストで返ります
$olistからは抽出されたオブジェクトが除外されます

$olist.find

gdi $olist.find $obj

return index

オブジェクトリストに$objが含まれているかを調べます
含まれていればindexを返します

$olist.flashstop

gdi $olist.flashstop

オブジェクトリストのオブジェクトだけ点滅表示OFFします
参照
gdi $obj.flashstop
gdi $canvas.flashstop
gdi $olist.flash
gdi $obj.flash

$olist.flash

gdi $olist.flash [$times]

オブジェクトリストを点滅表示します
$timeには点滅回数を与えます
点滅は表示0.15秒、非表示0.1秒間隔

$olist.gdi

gdi $olist.gdi

$olist.incref

gdi $olist.incref

参照カウンターをアップします
アップ後の参照カウンタ値を返します
オブジェクトリストがロックされている場合は何もしません
$olistがmdbリストの場合も有効です。
参照:gdi $olist.delete

$olist.inobj

gdi $olist.InObj $obj

return olist

オブジェクトリストを調べ、渡されたオブジェクト(obj)の中に一部でも含まれる
オブジェクトを新しいオブジェクトリストで返します

$olist.inpolygon

gdi $olist.InPolygon $x1 $y1...

return olist

オブジェクトリストを調べ、座標値で指定された領域中に一部でも
含まれるオブジェクトを新しいオブジェクトリストで返します

$olist.insideobj

gdi $olist.InsideObj $obj

return olist

オブジェクトリストを調べ、渡されたオブジェクト(obj)の中に完全に含まれる
オブジェクトを新しいオブジェクトリストで返します

$olist.insidepolygon

gdi $olist.InsidePolygon $x1 $y1...

return olist

オブジェクトリストを調べ、座標値で指定された領域中に完全に含まれる
オブジェクトを新しいオブジェクトリストで返します

$olist.list

gdi $olist.list

オブジェクトリストに含まれる全オブジェクトをTclリストで返します
gdi foreachで処理するより、
foreach obj [gdi $olist.list]
と記述したほうが高速です

$olist.lock

gdi $olist.lock

オブジェクトリストをロックします
ロックされたオブジェクトリストは削除できません
削除するためにはgdi $olist.unlockを実行します
$olistがmdbリストの場合も有効です。
参照:gdi $olist.unlock

$olist.mergea

gdi $olist.mergeA $olist1 ...

return newlist

重複をチェックしないことを除いてgdi $olist.mergeと同じです

$olist.merge

gdi $olist.merge $olist1 ...

return newlist

オブジェクトリスト(olist)にオブジェクトリスト(olist1 ...)のオブジェクトをマージします
同じオブジェクトリストが返ります。ユニーク処理が行われます。
$olistがmdbリストの場合も有効です。ただしユニーク処理は行われません。
mdbリストでユニーク処理を伴うmergeは{mdb $olist.or}で行います

gdi lmerge $olist1 $olist2 ... コマンドを使うとマージされた結果が新しい
オブジェクトリストで返されます

オブジェクトを追加する場合はgdi $olist.appendを使います

$olist.nearline

gdi $olist.nearline $x $y $distance

return {obj x y}

指定した位置(x,y)から指定距離内(distance)にありかつ最短距離
のオブジェクトを検索し、オブジェクトハンドルと座標値のTclリストで返します
検索はオブジェクトの辺に降ろした垂線の長さで判定されます
返される座標は垂線との交点座標です(最寄りの座標)
指定範囲内にある頂点も検索されます

現バージョンでは円は検索しません
円弧、扇形の場合、リターンされる座標はおよその位置です

$olist.nearnode

gdi $olist.nearnode $x $y $distance

return olist

指定した位置(x,y)から指定距離内(distance)に頂点があるオブジェクト
(オブジェクトリストの中)を検索し、オブジェクトリストにその頂点番号とともに
格納して返します
頂点番号はgdi $olist.nodeコマンドで取り出すことができます

$olist.node

gdi $olist.node $index

return no

オブジェクトリストにindex番目に格納されているオブジェクトの頂点番号を取り出します
オブジェクトリストはgdi $olist.nearnodeコマンドで作成されたものに限ります
indexは0からです

$olist.num

gdi $olist.num

return num

オブジェクトリストに格納されているオブジェクトの個数を返します
$olistがmdbリストの場合も有効です。

$olist.obj

gdi $olist.obj $index

return obj

オブジェクトリストにindex番目に格納されているオブジェクトのハンドルを返します
indexは0からです
$olistがmdbリストの場合も有効です

$olist.paint

gdi $olist.paint {$vlay | -1}

return vlayer2

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

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

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

$olist.protection

gdi $olist.protection $protection

return num

オブジェクトリストに含まれるオブジェクトのプロテクトを変更します
$protection には0,1,2,3のいずれかを与えます
gdi $obj.protectionを参照

$olist.pushafter

gdi $olist.PushAfter $event

return num

Undoバッファに修正後のオブジェクトを登録します
登録されたオブジェクトの個数が返ります
eventにはこのオブジェクトがRedoにより再生されるときに実行する
Tclプロシージャをアーギュメント込みで指定します
ただしアーギュメントからオブジェクトは除外して与えます
修正前のオブジェクトを登録するのはgdi $olist.PushBeforeです
このコマンドとペアで使用されます

$olist.pushbefore

gdi $olist.PushBefore $event

return num

Undoバッファに修正前のオブジェクトを登録します
登録されたオブジェクトの個数が返ります
eventにはこのオブジェクトがUndoにより戻されるときに実行する
Tclプロシージャをアーギュメント込みで指定します
ただしアーギュメントからオブジェクトは除外して与えます
修正後のオブジェクトを登録するのはgdi $olist.PushAfterです
このコマンドとペアで使用されます

$olist.pushnew

gdi $olist.PushNew [$new_event [$del_event]]

return num

Undoバッファに新規作成オブジェクトを登録します
登録されたオブジェクトの個数が返ります

$olist.queryfield

gdi $olist.QueryField $index $val [$ope]

フィールド値での検索
opeを省略すると正規表現での検索(文字列検索)、
opeを与えると数値比較での検索を行います
ただし、opeに"not"を与えると正規表現での検索結果の偽を採用します

index 属性項目番号 0から
val 比較数値または正規表現文字列
  数値の場合(opeが指定された場合)、下記の比較演算子(ope)の
  右辺値を与えます
    (field_val ope val)
ope =
  >
  >=
  <
  <=
  !=
  not  正規表現での評価の偽を採用
  省略 正規表現で評価

$olist.queryid

gdi $olist.QueryID $id

return obj

オブジェクトリストからIDでオブジェクトを検索します
オブジェクトハンドルが返されます
発見できなかった場合には0が返ります

$olist.querylayer

gdi $olist.QueryLayer $hlay1 ... $hlayn

return olist

オブジェクトリストから指定されたレイヤハンドルに属するオブジェクトを抽出し
新しいオブジェクトリストに格納して返します

$olist.querynameall

gdi $olist.QueryNameAll $name

return olist

nameフィールド値の完全一致検索
検索結果はオブジェクトリストで返される

$olist.querynamefirst

gdi $olist.QueryNameFirst $name

return olist

nameフィールド値の先頭一致検索
検索結果はオブジェクトリストで返される

$olist.querynameglob

gdi $olist.QueryNameGlob $name

return olist

nameフィールド値のGlob形式検索
検索結果はオブジェクトリストで返される

$olist.querynameinclude

gdi $olist.QueryNameInclude $name

return olist

nameフィールド値の部分一致検索
検索結果はオブジェクトリストで返される

$olist.queryname

gdi $olist.QueryName $name [$ope]

return olist

nameフィールド値で検索する
検索結果はオブジェクトリストで返される

name : 比較数値または正規表現文字列
ope : 数値比較の場合はopeに比較演算子を与える
opeを省略するとnameは正規表現とみなされ正規表現による文字列比較が行われる
ただしopeに"not"を与えると正規表現評価の「偽」が「真」とみなされる

ope 数値比較演算子(左辺がオブジェクト値、右辺が比較数値)
"=" ">" ">=" "<" "<=" "!="

$olist.queryobj

gdi $olist.QueryObj $obj

return true

オブジェクトリスト(olist)にオブジェクト(obj)が含まれているかを調べます
含まれていれば1を、含まれていなければ0を返します
$olistがmdbリストの場合も有効です
gdi $olist.exists と同じです

$olist.queryxy

gdi $olist.queryXY $x $y [$id]

return {obj|olist}

オブジェクトリストに含まれるオブジェクトを始点座標とIDで検索し
合致した最初のオブジェクトを返します
IDが省略された場合は始点座標で検索しオブジェクト集合をオブジェクトリストで返します
参照
gdi $canvas.QueryXY

$olist.range

gdi $olist.range [family]

return {xmin ymin xmax ymax}

オブジェクトリストを包含する最小範囲(レンジ)座標
を座標リストで返します
$olistがmdbリストの場合も有効です。

"family"をアーギュメントに与えると子供全員の範囲を返します
olistに含まれている子供は無視されます(親だけ評価される)
このオプション機能はmdbリストには無効です

$olist.redraw

gdi $olist.redraw

オブジェクトリストを再描画します

$olist.removeobj

gdi $olist.removeobj

return num

オブジェクトリストに含まれるオブジェクトを削除します
削除した個数を返します
Undoが効かない削除です

$olist.reverse

gdi $olist.reverse

オブジェクトリスト内のオブジェクトの座標順を反転します

$olist.savemapxy

gdi $olist.SaveMapXY $fname [$maptype] [-family]

return success

オブジェクトリストのオブジェクトを保存します
座標値は内部XY座標値で格納されます
fnameにはファイル名、maptypeにはマップ種別文字列を与えます
マップ種別はユーザーが自由に命名できます(32文字以内)
-familyを与えるとリンクオブジェクトを検索してすべて保存します

$olist.savemap

gdi $olist.SaveMap $fname [$maptype] [-family]

return success

オブジェクトリストのオブジェクトを保存します
座標値は経緯度で格納されます
fnameにはファイル名、maptypeにはマップ種別文字列を与えます
マップ種別はユーザーが自由に命名できます(32文字以内)
-familyを与えるとリンクオブジェクトを検索してすべて保存します

$olist.savememxy

gdi $olist.SaveMemXY $mapname [$maptype] [-family]

return webmap

オブジェクトリストのオブジェクトをメモリに保存します
マップファイルのイメージをwebmapエンコードして返します
座標値は内部XY座標値で格納されます
maptypeにはマップ種別文字列を与えます
マップ種別はユーザーが自由に命名できます(32文字以内)
-familyを与えるとリンクオブジェクトを検索してすべて保存します

$olist.savemem

gdi $olist.SaveMem $mapname [$maptype] [-family]

return base64

オブジェクトリストのオブジェクトをメモリに保存します
マップファイルのイメージをwebmapエンコードして返します
座標値は経緯度で格納されます
maptypeにはマップ種別文字列を与えます
マップ種別はユーザーが自由に命名できます(32文字以内)
-familyを与えるとリンクオブジェクトを検索してすべて保存します

$olist.savetilexy

gdi $olist.SaveTileXY $fname [$xmin $ymin $xmax $ymax] [$maptype]

return success

指定範囲内のオブジェクトを内部座標のままタイルマップファイルに保存します。
olistに含まれるオブジェクトが対象になります
fnameは保存ファイル名です

xmin ymin xmax ymax で抽出矩形範囲を指定します
省略すると範囲抽出は行われません(olistの全オブジェクト)

maptype はマップタイプです。省略可能です

保存したオブジェクト数がかえります
保存オブジェクトが無かった場合はファイルも作成されません
矩形境界のオブジェクトはBREC_CLONEレコードとともに保存されます
矩形外のオブジェクトでも内部オブジェクトとリンクしていれば保存されます

$olist.savetile

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

return num

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

$olist.selectfile

gdi $olist.selectfile $filename

return num

指定したマップファイルからロードされたオブジェクトだけを残します
オブジェクト数が返ります

$olist.select

gdi $olist.select [root] [unlock]

return num

root : 親オブジェクトだけを残します
unlock : 編集可能なオブジェクトだけ残します
オブジェクト数が返ります

$olist.sort

gdi $olist.sort

オブジェクトリストをレイヤでソートします
オブジェクト数を返します
mdbオブジェクトリストにも有効です

$olist.subst

gdi $olist.subst {$obj|$olist2} ["flag"]

return num

オブジェクトobjをブジェクトリストolistから除外します
またはolist2のオブジェクトをolistから除外します
除外後のオブジェクト数が返ります
$olistがmdbリストの場合も有効です。ただしその場合には$obj,$olistもmdbオブジェクトでなければなりません

このコマンドを実行するとリストのオブジェクト数も減少しますのでgdi foreachループ処理の中で自分に含まれる
オブジェクトを除外したい場合には"flag"アーギュメントを与えて除外フラグを立てるだけにし、ループ処理後に
 gdi $olist.compress
を実行してください。
"flag"アーギュメントを与えた場合の戻り値は除外フラグを立てたオブジェクトの個数です

$olist.transform

gdi $olist.transform

アフィン変換
事前にgdi affineコマンドでパラメータを設定してからコールする

$olist.type

gdi $olist.type

return type

オブジェクトリストのタイプを返します
"gdi"か"mdb"が返ります

$olist.unlock

gdi $olist.unlock

オブジェクトリストのロックを解除します
オブジェクトリストが削除できるようになります
$olistがmdbリストの場合も有効です。
参照:gdi $olist.lock

$olist.unique

gdi $olist.unique

オブジェクトリストから重複するオブジェクトを除去します
オブジェクト数を返します

$olist.update

gdi $olist.update [set|clear]

return success

setを与えると現在の時刻をupdateプロパティ(編集時刻)にセットします

clearを与えると編集時刻をクリアします
その時同時にmrec(修正前レンジ)もクリアされます

$olist.where

gdi $olist.where $exp

return num

オブジェクトリストにコレクションされているデータオブジェクトをスキャンし、条件に適合しないオブジェクトをリストから除外します
$olistがmdbリストの場合も有効です
適合オブジェクトの数が返ります

$expにはクエリ式を与えます
クエリ式はTclのifコマンドの条件式と同じ機能、書式です(必ず { } で挟んで下さい)。
この条件式には、オブジェクトの属性値をインデックスで指定できます。
属性インデックスは番号の前に#を付けます。
インデックス番号は変数も使えます
条件式を省略するか空文字を与えると全てを抽出する指定になります。

使用例
  gdi $olist.where {#40>10.0 && #42=="ABC"}
  gdi $olist.where {#$len_field>$ten && #$type_field==$abc}

条件式の評価はifコマンドを用いていますが、条件式の評価の前に、前処理として条件式
を書き替えています。それは、#が頭に付いている項をインデックス指定項とみなし、それを
属性値に置き換える、というものです。インデックスは変数置換で与えることができますが
インデックスをコマンド置換では与えられませんので注意して下さい

ダメな例(コマンド置換でインデックスを指定)
  gdi $olist.where {#[getFieldIndex 区間距離] >10.0}

条件式にコマンド置換を記述できないということではありません

コマンド置換使用例
  gdi $olist.where {[regexp ^K #$no_field] && #$distance_field > 10.0}

フィールドインデックスに下記の負数を与えると属性以外の項目も検索条件に含めることができます

 インデックス  比較値
 -1  name値
 -2  ID
 -3  レイヤ名
 -4  長さ
 -5  面積
 -6  始点X座標値
 -7  始点Y座標値

$olist.xor

gdi $olist.xor $olist1 ...

return olist

複数のオブジェクトリストに重複していないオブジェクトのみを抽出し
その結果を新しいリストにセットします
$olistがmdbリストの場合も有効です。その場合mdbリストが返ります。