状態スナップショット
getState() は、いまのシーンの要約を 1 つのオブジェクトで返します。 AI コンソールはこれをシステムプロンプトに丸ごと入れるので、 モデルが「いま何が読み込まれていて、どこを見ていて、何を選んでいるか」を知った状態で判断できます。
js
oniyanma.getState()読み取りしかしないので、読み取り専用サーフェスでもそのまま使えます。
フィールド
表示
| フィールド | 型 | 内容 |
|---|---|---|
backend | string | 描画エンジン(webgl / webgpu) |
colorMode | string | カラーモード(rgb / intensity / elevation / classification) |
navMode | string | ナビモード(orbit / walk) |
レイヤ
| フィールド | 型 | 内容 |
|---|---|---|
sources | { id, name, url?, visible, pointCount }[] | 読み込み済みの点群ソース |
surfaces | { id, name, visible }[] | 参照サーフェス(TIN) |
id は removeSource / setSourceVisible / setSurfaceVisible に渡すものです。
選択と編集
| フィールド | 型 | 内容 |
|---|---|---|
hasSelection | boolean | 選択があるか |
selectionCount | number | 選択点数(resident 基準) |
editCount | number | 非破壊編集の件数 |
editsByActor | { human, ai, api, unknown } | 発行者別の件数。unknown は actor を記録していない古い保存由来 |
canUndo / canRedo | boolean | 自分の編集について、戻せる / やり直せるか |
canUndo がユーザーごとである点に注意してください。 協働中に他人の編集だけがある状態では false になります。→ 非破壊編集
座標
| フィールド | 型 | 内容 |
|---|---|---|
alignedBounds | [minX,minY,minZ,maxX,maxY,maxZ] | null | 整列フレームの全体 AABB。未読込は null |
cameraReal | [x, y, z] | カメラ位置(実座標 m) |
frame | { offset: [x,y,z], alignYaw } | null | 座標フレーム。scene = Rz(-alignYaw)·(real - offset)。未読込は null |
crs | { epsg?, name?, verticalDatum } | null | 座標参照系。判定できなければ null |
verticalDatum は 'orthometric'(標高)/ 'ellipsoidal'(楕円体高)/ 'unknown'。 CRS は記録するだけで再投影しません。→ 座標系
alignedBounds は整列フレーム、cameraReal は実座標です。混ぜないでください。
所見
| フィールド | 型 | 内容 |
|---|---|---|
findings | { types, total, published } | 所見の型の数 / 所見の全件数(下書き含む) / 発注者に見える件数 |
件数だけで、中身は入りません。スナップショットは毎リクエストのシステムプロンプトに載るので、 所見が増えるほど膨らむ形にしないためです。中身は listFindings で取ります。
所見ストアを持たないビルドでは、このキー自体が省略されます (=「所見機能が無い」と読めます)。→ 所見を起票する
例
json
{
"backend": "webgpu",
"colorMode": "elevation",
"navMode": "orbit",
"sources": [
{ "id": 1, "name": "kasado.copc.laz", "url": "https://data.oniyanma.jp/kasado.copc.laz",
"visible": true, "pointCount": 95169313 }
],
"surfaces": [],
"hasSelection": true,
"selectionCount": 128340,
"editCount": 12,
"editsByActor": { "human": 9, "ai": 3, "api": 0, "unknown": 0 },
"canUndo": true,
"canRedo": false,
"alignedBounds": [-142.3, -88.1, -12.4, 142.3, 88.1, 31.7],
"cameraReal": [-52341.2, 18904.7, 42.1],
"frame": { "offset": [-52400.0, 18850.0, 20.0], "alignYaw": 0 },
"crs": { "epsg": 6669, "verticalDatum": "orthometric" },
"findings": { "types": 1, "total": 4, "published": 2 }
}個別に問い合わせる
getState() は要約なので、詳細が要るときは query* を使ってください。
| 欲しいもの | コマンド |
|---|---|
| レイヤごとの常駐点数と範囲 | queryLayers |
| 選択の AABB | querySelection |
| 標高分布 | queryElevation |
| 分類ヒストグラム | queryClasses |
| CRS と座標フレーム | queryCrs |