了解。
ここでは 「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 設計思想に合わせて調整するよ。