了解。
ここで一度区切るために、最新状態を反映した「継続メモ(最小構成の階層メッシュOS × DSL)」 をまとめておく。
次回すぐ再開できるように、構造・目的・未完タスク・DSL 設計の要点をすべて OS 的に整理してある。
🗂 継続メモ(Three.js × Flask × 階層メッシュOS × DSL)
■ 1. 現在の到達点(OS の最小構成)
卵型メッシュ(UV球)を対象に、以下の OS レイヤーがほぼ固まった:
● MeshOS(構造)
- MeshNode(実体メッシュ)
- LinkNode(シンボリックリンク / InstanceMesh)
- Subdivider(SubdivisionModifier)
- LODManager(選択部分のみ LOD)
● SelectionOS(選択)
- Raycaster → faceIndex
- BFS による連続面抽出
- SHAPE(circle, almond, sphere)による領域選択
- PROJECTED_ON による球面投影選択
● EditOS(編集)
- TransformControls(移動・回転・拡大)
- 頂点編集は後で追加
● EggMesh(最小メッシュ)
- SphereGeometry(1, 32, 32)
■ 2. Flask 側の構造(実行エンジン)
UI は Three.js、実行は Flask。
meshes/src/
├── controllers/
│ ├── dsl_api.py ← DSL の受け取り
│ ├── mesh_api.py ← MeshOS 操作
│ └── ai_api.py ← Gemini 連携
├── mesh_engine/
│ ├── parser/ ← DSL パーサ
│ ├── executor/ ← 型推論 + 実行
│ ├── meshos/ ← MeshNode / LinkNode
│ ├── selection/ ← BFS / SHAPE / PROJECTED_ON
│ └── transform/ ← MOVE / SCALE / ROTATE
Three.js は UI と表示に専念し、
Flask が構造操作の OS カーネルになる。
■ 3. DSL(SQL 風・厳密文法・型推論あり)
● 型一覧(推論あり)
- MESH
- FACE_GROUP
- VERTEX_GROUP
- SHAPE
- PATTERN
- INSTANCE
- TRANSFORM_TARGET
● 選択
SELECT FACES CONNECTED FROM face_id = 120 INTO groupA;
SELECT FACES INSIDE SHAPE almond1 INTO groupB;
SELECT FACES PROJECTED_ON sphere1 INTO groupC;
SELECT VERTICES WHERE DISTANCE_TO (0,0,0) < 0.5 INTO groupD;
● 生成
CREATE MESH egg USING SPHERE radius=1 segments=32;
CREATE MESH part1 FROM FACES groupA;
CREATE SHAPE almond1 USING ALMOND a=1.0 b=0.4 CENTER=(0,0,0);
CREATE SHAPE sphere1 USING SPHERE radius=1;
CREATE PATTERN r1 USING RING COUNT=10 RADIUS=1 ON PLANE=XY;
CREATE VERTEX_GROUP vg1 FROM PATTERN r1;
● 変形
MOVE groupA BY (0,1,0);
SCALE part1 BY (1.2,1.2,1.2);
ROTATE inst1 BY (0,45deg,0);
● インスタンス
CREATE INSTANCE inst1 FROM MESH part1 AT (0,0,0);
● 削除
DELETE FACES groupA;
DELETE MESH part1;
■ 4. Gemini 用プロンプト(推測・補完モード)
- DSL の仕様書を System Prompt として渡す
- Gemini は曖昧な自然言語を 推測して補完
- ただし DSL のみ返す
- 人間が目視確認してから Flask に送る
- 安全で OS 的なワークフローが成立
推測ルール:
- パラメータが曖昧 → 自然なデフォルト補完
- 形状が曖昧 → 文脈から最適な SHAPE を推測
- 位置が曖昧 → 対象の中心を推測
- 量が曖昧 → 小さめの自然値を補完
■ 5. 次にやるべきこと(再開ポイント)
★ 最優先(次回)
extractMeshFromFaces(egg, faces)
→ DSL の
CREATE MESH part1 FROM FACES groupA;
を実行するための中核。
これが完成すると:
- 選択
- 部分メッシュ生成
- LinkNode
- TransformControls
まで一連の OS が動く。
■ 6. 今後の拡張(中期)
- LinkNode の最適化(InstanceMesh の扱い)
- LOD の自動生成ルール
- SHAPE の種類追加(Bezier, Capsule, Spline)
- Flask 側での DSL エラー補完の強化
- Gemini の推測優先順位の調整
■ 7. 状態まとめ(今回の議論の成果)
- 階層メッシュOSの最小構成が固まった
- DSL の型システムが完成
- Gemini 用プロンプト(仕様書)が完成
- 推測・補完モードでの運用方針が決定
- Flask を OS カーネルとして扱う構造が確立
次回は extractMeshFromFaces の実装から再開できる状態になっている。
このメモを読めば、どの地点からでもすぐ復帰できるよ。