了解。
ここでは 「SQL 風の厳密な文法」 を前提に、
選択 DSL の抽象化レベルごとに “例つきで” 明確に示す。
あなたの OS 設計(階層メッシュOS)に合わせて、
Mesh / Face / Vertex を SQL 的に操作できる言語として整理する。
🧩 MeshOS DSL(SQL 風・厳密文法)
以下はすべて Gemini が返すべき構文として定義している。
H2: 1. 選択 DSL の抽象化レベル(例つき)
選択は 5 段階の抽象化で整理できる。
すべて SQL 風の厳密文法で書く。
H3: ① 局所選択(faceIndex / vertexIndex 指定)
最も低レベル。Three.js の faceIndex を直接指定。
文法
SELECT FACES WHERE face_id = 120 INTO groupA;
SELECT VERTICES WHERE vertex_id IN (10,11,12) INTO groupB;
使いどころ
- Raycaster で faceIndex が取れる
- BFS の起点になる
H3: ② 連続面選択(BFS)
あなたの OS の基盤。
「連続面」を SQL 風に書く。
文法
SELECT FACES CONNECTED FROM face_id = 120 INTO groupA;
例
クリックした面から連続する面を全部選択。
H3: ③ 幾何学的選択(距離・角度・法線)
Three.js の属性(position, normal)を使う抽象化。
文法例
SELECT VERTICES WHERE DISTANCE_TO (0,0,0) < 0.5 INTO groupB;
SELECT FACES WHERE NORMAL_DOT (0,1,0) > 0.8 INTO groupC;
SELECT FACES WHERE AREA > 0.01 INTO groupD;
例
- 半径 0.5 以内の頂点
- 法線が上向きの面
- 面積が一定以上
H3: ④ 形状による選択(INSIDE SHAPE)
あなたが言っていた「アーモンド形状」「円」「内接形状」など。
文法
SELECT FACES INSIDE SHAPE almond1 INTO groupA;
SELECT VERTICES INSIDE SHAPE circle1 INTO groupB;
例(アーモンド形状を定義してから選択)
CREATE SHAPE almond1 USING ALMOND a=1.0 b=0.4 CENTER=(0,0,0) AXIS=Y;
SELECT FACES INSIDE SHAPE almond1 INTO groupA;
H3: ⑤ 投影・貼付け選択(PROJECTED_ON)
「球面に貼り付けるように湾曲させて」のような操作の前段階。
文法
SELECT FACES PROJECTED_ON sphere1 INTO groupA;
例
CREATE SHAPE sphere1 USING SPHERE radius=1;
SELECT FACES PROJECTED_ON sphere1 INTO groupA;
H2: 2. 生成(DDL)例
SQL 風の厳密文法で、構造を作る。
H3: ① 基本形状
CREATE MESH egg USING SPHERE radius=1 segments=32;
CREATE MESH disk USING DISK radius=2 segments=64;
H3: ② 頂点・面の直接生成
CREATE VERTEX v1 AT (0,1,0);
CREATE VERTEX v2 AT (1,0,0);
CREATE VERTEX v3 AT (0,0,1);
CREATE FACE f1 USING (v1, v2, v3);
H3: ③ パターン生成(円・同心円)
CREATE VERTEX RING r1 COUNT=10 RADIUS=1 ON PLANE=XY;
CREATE VERTEX RING r2 COUNT=10 RADIUS=2 ON PLANE=XY;
CREATE VERTEX RING r3 COUNT=10 RADIUS=3 ON PLANE=XY;
CREATE DISK FROM RINGS (r1, r2, r3);
H2: 3. 操作(DML)例
H3: ① 変形(Transform)
MOVE groupA BY (0,1,0);
SCALE groupA BY (1.2,1.2,1.2);
ROTATE groupA BY (0,45deg,0);
H3: ② 部分メッシュ生成
CREATE MESH part1 FROM FACES groupA;
H3: ③ シンボリックリンク(LinkNode)
LINK part1 AS instance1 AT (0,0,0);
H3: ④ 削除
DELETE FACES groupA;
DELETE MESH part1;
H2: 4. Gemini が自然言語から生成する例
入力(自然言語)
頂点を10個円形に配置して、同心円3つの円盤を作って。
Gemini 出力(SQL 風 DSL)
CREATE VERTEX RING r1 COUNT=10 RADIUS=1 ON PLANE=XY;
CREATE VERTEX RING r2 COUNT=10 RADIUS=2 ON PLANE=XY;
CREATE VERTEX RING r3 COUNT=10 RADIUS=3 ON PLANE=XY;
CREATE DISK FROM RINGS (r1, r2, r3);
入力(自然言語)
選択中の面の中に内接するアーモンド形状を作って。
Gemini 出力
CREATE SHAPE almond1 USING ALMOND a=1.0 b=0.4 FIT_INSIDE groupA;
SELECT FACES INSIDE SHAPE almond1 INTO groupB;
入力(自然言語)
前回のアーモンド形状を球面に貼り付けるように湾曲させて。
Gemini 出力
CREATE SHAPE sphere1 USING SPHERE radius=1;
SELECT FACES PROJECTED_ON sphere1 FROM groupB INTO groupC;
H2: あなたへの確認
ここまでで SQL 風 DSL の抽象化レベル をすべて例つきで示した。
次に決めるべきは:
■ DSL の「型システム」を導入するか?
- MESH
- FACE_GROUP
- VERTEX_GROUP
- SHAPE
- TRANSFORM_TARGET
など。
■ 実行エンジンを Flask 側に置くか、Three.js 側に置くか?
- Flask が DSL をパースして JSON に変換
- Three.js が JSON を受けて MeshOS を操作
どちらの方向で進めたいか、あなたの OS 設計思想に合わせて調整するよ。