diff --git a/PHYレイヤー.md b/PHYレイヤー.md index dc4cead..d30b22a 100644 --- a/PHYレイヤー.md +++ b/PHYレイヤー.md @@ -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 キーキャップの見た目情報を持つ層 - 位置づけ: 本文「見た目の属性は保持する。どの層で持つかは決まっていない」の未解決部分 diff --git a/journal/2026-09-19-switch-offset.md b/journal/2026-09-19-switch-offset.md new file mode 100644 index 0000000..7048bab --- /dev/null +++ b/journal/2026-09-19-switch-offset.md @@ -0,0 +1,21 @@ +# スイッチ位置のオフセット (旧 PHY P-5) + +## 結論 + +スイッチ位置はキーごとのオフセットとしてPHYで持つ。基準はキャップの (w, h) 矩形の中心、既定値0、単位U、キーのローカル座標系。 + +## 案の比較 + +| 案 | 採否 | +|---|---| +| キャップ形状(l 等)からスイッチ位置を導出 | 不可。l でもずれないキーがある(昔のXFER) | +| キーごとにオフセットを持つ | 採用 | +| PHY以外の層(キーキャップ層など)で持つ | 不採用 | + +## 根拠 + +- Stepped Caps Lockなど、スイッチがキャップ中心からずれるキーがある(ユーザー提供の事実) +- ずれるかどうかはキャップ形状から決まらないので、キーごとに持つしかない +- スイッチ位置はPCB・プレートの配置を決める物理情報であり、PHYの責務。キーキャップの見た目情報が別層に移っても(P-6)、 + キャップ外形とスイッチの相対位置は配置そのものなのでPHYに残る +- ローカル座標系にしたのは、キーの回転に追従させるため