PHY: スイッチ位置をキーごとのオフセットとして持つ(P-5解消)

キャップ形状からはスイッチ位置が決まらない(Stepped Caps Lockはずれ、XFERはずれない)ため、
(w, h) 矩形の中心からのオフセットをキーのローカル座標系で持つ。既定値0。

Journal: journal/2026-09-19-switch-offset.md

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-19 11:15:03 +09:00
co-authored by Claude Opus 5
parent 13df64f6ff
commit f6ca7434bc
2 changed files with 27 additions and 9 deletions
+6 -9
View File
@@ -9,7 +9,9 @@ PHYレイヤーは、キースイッチやキーキャップ、その他周辺
### キースイッチ/キーキャップの配置
各キーはスイッチ・キャップの情報を統合された状態で持ち、キャップの位置・サイズからスイッチ座標を特定する。
各キーはスイッチ・キャップの情報を統合された状態で持つ。
スイッチ位置は、キャップの (w, h) 矩形の中心からのオフセットとしてキーごとに持つ(既定値0、単位U、キーのローカル座標系)。
Stepped Caps Lockのようにスイッチがキャップ中心からずれるキーがあり、キャップ形状だけではスイッチ位置が決まらないため。
以下、単に「キー」と呼ぶ場合、キーキャップの位置・サイズを表すオブジェクトをさすこととする。
### プロファイル設定
@@ -76,7 +78,7 @@ ISO Enterのように長方形でないキーは、サイズに2つ目の矩形(
各ノードは親から見た変換を持つ。キーとクラスターを混在させた木構造として保持する。
`phase1-json-schema.md` のPHYスキーマは、この節の Key 型(x2〜h2, decal, ghost, labels)にまだ追従していない。
`phase1-json-schema.md` のPHYスキーマは、この節の Key 型(x2〜h2, decal, ghost, labels, switchOffset)にまだ追従していない。
```ts
type Transform = {
@@ -98,7 +100,8 @@ type Key = {
profile: Profile,
decal?: boolean,
ghost?: boolean,
labels?: string[] // 参考情報
labels?: string[], // 参考情報
switchOffset?: { x: number, y: number } // (w, h) 矩形の中心から。省略時は0
}
type Cluster = {
transform: Transform,
@@ -202,12 +205,6 @@ KLEの rx, ry, r はキーの絶対配置 (x, y, rotation) に変換して取り
- 現状の認識: 採用しない可能性が高い。ただし代わりに欲しい機能があり、それを思い出すきっかけとして残している
- 格上げ条件: 代わりの機能を定義し、この推定を採るか捨てるかをユーザーが決める
### P-5 キャップ形状とスイッチ位置の関係
- 位置づけ: 本文「キャップの位置・サイズからスイッチ座標を特定する」と食い違う事実がある
- 現状の認識: Stepped Caps Lockのように、スイッチ位置がキャップ中心からずれるキーがある。一方でステップキー(KLEの l)なら必ずずれるわけではない(昔のXFERなど)。キャップ形状だけではスイッチ位置が決まらない
- 格上げ条件: キャップに対するスイッチ位置の表し方(オフセットを持つか等)を決め、本文と Key 型を改める
### P-6 キーキャップの見た目情報を持つ層
- 位置づけ: 本文「見た目の属性は保持する。どの層で持つかは決まっていない」の未解決部分
+21
View File
@@ -0,0 +1,21 @@
# スイッチ位置のオフセット (旧 PHY P-5)
## 結論
スイッチ位置はキーごとのオフセットとしてPHYで持つ。基準はキャップの (w, h) 矩形の中心、既定値0、単位U、キーのローカル座標系。
## 案の比較
| 案 | 採否 |
|---|---|
| キャップ形状(l 等)からスイッチ位置を導出 | 不可。l でもずれないキーがある(昔のXFER) |
| キーごとにオフセットを持つ | 採用 |
| PHY以外の層(キーキャップ層など)で持つ | 不採用 |
## 根拠
- Stepped Caps Lockなど、スイッチがキャップ中心からずれるキーがある(ユーザー提供の事実)
- ずれるかどうかはキャップ形状から決まらないので、キーごとに持つしかない
- スイッチ位置はPCB・プレートの配置を決める物理情報であり、PHYの責務。キーキャップの見た目情報が別層に移っても(P-6)、
キャップ外形とスイッチの相対位置は配置そのものなのでPHYに残る
- ローカル座標系にしたのは、キーの回転に追従させるため