phy: プロファイルをファイル単位の器に置き、キーはIDで参照する

保存形式に PhyFile を書き、profiles を木の外に出した。同じ定義を複数のキーに
複製しないため、Key.profile は実体ではなくIDの参照にする。
ビジュアル表現は上面矩形の4辺インセット + R とし、非対称な上面を表せる形にした。
プロファイル内の距離はすべてmmに統一。

Journal: journal/2026-09-21-profile-container.md

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01246a5KFLmwcRXriZvX8fdJ
This commit is contained in:
2026-09-21 18:58:38 +09:00
co-authored by Claude Opus 5
parent a175ee3c53
commit 69d9c73fff
3 changed files with 100 additions and 8 deletions
+36 -5
View File
@@ -16,9 +16,16 @@ Stepped Caps Lockのようにスイッチがキャップ中心からずれるキ
### プロファイル設定
1ファイル内に複数のプロファイルを持たせることができる。
ユニットサイズ(1Uが何mmか、x軸・y軸それぞれ)を規定。
ビジュアル表現として、内側へのオフセット位置及びオフセット距離(mm or U単位)・R(U単位)を規定。
1ファイル内に複数のプロファイルを持たせることができる。プロファイルはノードではなくファイル単位に置き、
キーはIDで参照する。同じ定義を複数のキーに複製しないため、実体ではなく参照とする。
プロファイルが規定するのは次の2つ。
- ユニットサイズ: 1Uが何mmか。x軸・y軸それぞれ
- ビジュアル表現: キー上面の矩形を、外形の各辺(上下左右)から内側への距離と、角のRで表す
上面の距離を4辺それぞれ持つのは、上面が外形の中心からずれるプロファイルを表せるようにするため。
プロファイル内の距離はすべてmmで持つ。実寸を規定する定義なので、U単位の値を混ぜない。
### 座標と回転
@@ -188,8 +195,21 @@ Transform は回転と平行移動だけを持つ剛体変換であり、合成
各ノードは親から見た変換を持つ。キー・クラスター・部品ノード・バリアントノードを混在させた木構造として保持する。
各ノードはIDを持つ。木の中のノードを一意に指すために持ち、キーのIDは他レイヤーからの参照にも使う。
プロファイルは木の外に置き、ファイル単位の配列として持つ。
```ts
type Profile = {
id: string,
name: string,
unitSize: { x: number, y: number }, // 1Uのmm数
visualOffset?: { // キー上面。単位はmm
top: number, // 外形の各辺から内側への距離
right: number,
bottom: number,
left: number,
radius: number
}
}
type Transform = {
x: number, // 親座標系での位置
y: number,
@@ -207,7 +227,7 @@ type Key = {
id: string,
transform: Transform,
size: Size,
profile: Profile,
profile: string, // Profile.id を参照
decal?: boolean,
ghost?: boolean,
labels?: string[], // 参考情報
@@ -239,7 +259,18 @@ type Variant = {
name: string,
children: Node[] // 空でもよい
}
const root: Node[] = []
type PhyFile = {
version: string,
metadata: {
name?: string,
author?: string,
description?: string,
created?: string,
modified?: string
},
profiles: Profile[], // 1つ以上
root: Node[]
}
```
## 連携用出力形式