了解。
ここまでの議論をすべて OS 的に統合し、Meshes SQL Flask アプリのフォルダ構成+ファイル名案を含む「継続メモ(最新版)」としてまとめるよ。
あなたが次回どこからでも即復帰できるように、
DB カーネル / DSL / AST / Executor / API / Three.js 更新ループ
まで一貫した OS として整理してある。
🗂 継続メモ(Meshes SQL × Flask × Three.js × 階層メッシュOS)
= DB が唯一の真実の MeshOS の完全構造メモ
■ 1. 全体アーキテクチャ(OS の 3 層構造)
● UI(Three.js)
- DB の内容を描画するだけ
- 編集は一切しない(ステートレス)
/mesh/get,/instance/list,/group/getを周期的に pull- DSL を Flask に送るだけ
● Kernel(Flask)
- DSL → AST(パーサ)
- AST → DML(Executor)
- combo=i / combo_sub=j を自動付与
- DB に対して編集操作を実行
/dsl/executeで「差分更新イベント」を返す
● DB(MySQL)
- Mesh / Vertex / Face / Instance / FaceGroup
- DB が唯一の真実(Single Source of Truth)
■ 2. MeshDB(最小スキーマ)
meshes
id, combo, combo_sub, name, parent_id, created_at, updated_at
vertices
id, combo, combo_sub, mesh_id, x, y, z
faces
id, combo, combo_sub, mesh_id, v1_id, v2_id, v3_id
instances(LinkNode)
id, combo, combo_sub, mesh_id,
tx,ty,tz, rx,ry,rz, sx,sy,sz,
updated_at
face_groups / face_group_items
face_groups: id, combo, combo_sub, name, updated_at
face_group_items: group_id, face_id
■ 3. DSL → AST(命令セット)
AST ノード一覧(最小構成)
- CreateMeshPrimitive
- CreateMeshFromFaces
- CreateShape
- CreatePattern
- CreateVertexGroupFromPattern
- SelectFaces
- SelectVertices
- Transform(MOVE / SCALE / ROTATE)
- CreateInstance
- Delete
■ 4. AST → Executor(DB DML)
各 AST ノードに対応する Executor:
| AST.type | Executor |
|---|---|
| CreateMeshPrimitive | create_mesh_primitive() |
| CreateMeshFromFaces | create_mesh_from_faces() |
| SelectFaces | select_faces() |
| SelectVertices | select_vertices() |
| Transform | transform() |
| CreateInstance | create_instance() |
| Delete | delete_object() |
すべて combo=i / combo_sub=j を自動付与。
■ 5. Flask API(I/O 層)
ここが Three.js と DB をつなぐ唯一のゲートウェイ。
📁 フォルダ構成(最新版・最適化済み)
meshes/
├── app.py
├── config.py
├── requirements.txt
│
├── controllers/
│ ├── api_dsl.py # /dsl/execute
│ ├── api_mesh.py # /mesh/get, /mesh/list
│ ├── api_instance.py # /instance/list
│ ├── api_group.py # /group/get
│ └── __init__.py
│
├── mesh_engine/
│ ├── parser/
│ │ ├── dsl_parser.py # DSL → AST
│ │ └── tokenizer.py # 必要なら
│ │
│ ├── executor/
│ │ ├── executor.py # AST → DML
│ │ ├── exec_create.py
│ │ ├── exec_select.py
│ │ ├── exec_transform.py
│ │ ├── exec_instance.py
│ │ └── exec_delete.py
│ │
│ ├── db/
│ │ ├── mesh_dml.py # SQL 実行(DB カーネル)
│ │ └── connection.py
│ │
│ ├── selection/
│ │ ├── bfs.py
│ │ ├── shape.py
│ │ └── pattern.py
│ │
│ ├── meshos/
│ │ ├── mesh_ops.py # Python 側の形状生成
│ │ └── instance_ops.py
│ │
│ └── transform/
│ ├── move.py
│ ├── scale.py
│ └── rotate.py
│
├── static/
│ ├── js/
│ │ ├── app.js
│ │ ├── mesh_loader.js
│ │ ├── instance_loader.js
│ │ ├── selection_highlight.js
│ │ └── update_loop.js # Three.js 更新ループ
│ └── css/
│ └── style.css
│
└── templates/
├── base.html
├── editor.html
└── viewer.html
■ 6. Flask API のエンドポイント(最小構成)
/dsl/execute
DSL → AST → DML → updated_at 更新 → reload 情報返却
/mesh/get
頂点・面を返す
/mesh/list
combo=i, combo_sub=j のメッシュ一覧
/instance/list
LinkNode の transform を返す
/group/get
face_group の face_id 一覧を返す
■ 7. Three.js 更新ループ(ステートレス同期)
updateLoop()
reloadMeshes()
reloadInstances()
reloadSelections()
requestAnimationFrame(updateLoop)
差分更新(推奨)
- DSL 実行後の
reload情報 - DB の updated_at
■ 8. 次のステップ(あなたへの提案)
ここまで来たら、次は:
★ A. 差分更新プロトコルの正式化
(reload 情報の仕様書)
★ B. SHAPE / PATTERN の実装
(almond / ring / grid / sphere projection)
★ C. LOD / Subdivision の DB 設計
(中期タスク)
この継続メモを読めば どの地点からでも即復帰できる OS 設計書になっている。
次はどこを深める?
差分更新? SHAPE? LOD?