了解。
ここまでの議論をすべて 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?