Kimetron Isle
(キメトロン・アイル) — World-Coordinate Canvas
ワールド座標キャンバスエンジン。
位置は装飾ではなく、データ。
座標に、意味を。
Plesfeda も Sethera Piece も、React Flow の上に作りました。 その実戦で分かったのは、React Flow が面倒を見てくれるのは 「描画・ドラッグ・選択・ビューポート」までだということ—— レイアウトもドメインの意味づけも、全部こちら側で書いていました。 つまり、キャンバスライブラリへの結合部分は薄い。代替は作れます。
ただし「React Flow のクローン」を作る意味はありません。 見渡すと、既存のキャンバス・図形ライブラリはすべて スクリーン座標・ピクセル単位・Y下向きです。 CAD の世界では座標それ自体が設計データなのに、 それを第一級に扱うエンジンが存在しない—— この空白地帯が、Kimetron Isle の立ち位置です。
ワールド座標モデル
オブジェクトの位置・寸法はスクリーンピクセルではなく、 実寸の world 座標で保持されます。ズームは「倍率」ではなく「縮尺」。
- 実寸単位 mm / m / inch / px を第一級の単位に。1 unit = 1mm の世界定義で、図面の読み取りと実測が一致する
- 原点選択 左下原点・Y上向き(CAD/数学作法)と左上原点・Y下向き(スクリーン作法)の両方をサポート
-
スナップ内蔵
グリッド・頂点・辺中点・中心へのスナップをエンジンが提供。ドライバは
snapExtraで独自スナップを注入できる -
衝突・占有
solidオブジェクト同士は重なれず、辺の突き合わせは合法。canOverlapでドライバがペア例外を宣言し、collisionMode(none / flag / reject)で挙動を選ぶ -
回転と多角形
オブジェクト回転は OBB(回転矩形)の SAT 判定にまで貫通。
kind:'polygon'は凹形状も正しく hit・衝突する -
プログラム移動 API
objectsIn(範囲クエリ)・canPlace・tryMove— ジェスチャを介さない AI 移動も同じ衝突ポリシーを通る - undo / シリアライズ immutable なモデル操作とドキュメント単位の undo/redo、JSON シリアライズを内蔵
三層構造と「薄いドメイン層」
@kimetron/core(DOM に依存しない vanilla TS のモデル・幾何・
選択・ドラッグ・ヒットテスト)、@kimetron/dom(SVG/CSS
レンダラとポインタ入力)、@kimetron/react(薄いアダプタ)の
三層です。セマンティクスはユーザー側——Kimetron が意味づけるのは
幾何とインタラクションまで。「ドアは壁に乗れる」「岩は動かせない」
「ユニット同士は重なれない」といったルールは、すべてドライバの
ポリシーとして書きます。
この線引きの実証が、リポジトリ内のドライバ群です。
- plan — 建造物の見取り図 10mm グリッドで厚さ×長さの壁を「|-」接合。ルーラー・寸法線・壁芯・建築面積の導出(敷地/建築/壁芯/内法)はすべてドライバ側の薄い層で実装
-
game — 建物を徘徊する2ユニット
30cm 角のユニットが
tryMoveで徘徊。solid な壁と岩(ロック済み凹多角形)は通れず、開口部だけが出口。ユニット同士は重なれず、隣接すれば効果リンクが出る - plesfeda / sethera spike 稼働中の2つの自作アプリを載せ替えた移植実証。エッジの意味づけ・形状 kind・ロック・用紙枠・HUD がそのまま収まることを確認済み
名前の由来
Kimetron は、シュメール語の ki (場・地——an=天と対になる語)と、ギリシャ語の metron(尺度・測定)の融合語です。 「測る場」が字面に内蔵されています。
Isle は浮島。幾何学的に硬い Kimetron に、 柔らかい自然語を組み合わせる強弱の対比が狙いです。 aisle(通路)との同音で、技術用語すぎない響きにしています。
プレイグラウンドは公開中
GitHub Pages で公開中。ブラウザだけで動き、データはブラウザ内に 留まります——外部への送信は一切ありません。 demo / plan / game / plesfeda / sethera の各ドライバを切り替えて試せます。
正直な現状
v1.0.0 は「API 安定宣言」です——v0.6.0 以降、追加のみで 破壊的変更はありません。ただし機能には余地が残っています。
- 寸法線の追従・名前付きレイヤ・ブロック参照 CAD 用途としてまだ構造的ギャップがあり、1.x の拡張領域です
- Svelte/Vue アダプタは未実装 「構造上可能」までが v1.0 の約束。需要を見て実装します
- 協調編集・クラウド保存はスコープ外 ローカルファースト。データは JSON と localStorage に留まります