diff --git a/journal/2026-10-23-stabilizer-positions.md b/journal/2026-10-23-stabilizer-positions.md new file mode 100644 index 0000000..536ae74 --- /dev/null +++ b/journal/2026-10-23-stabilizer-positions.md @@ -0,0 +1,85 @@ +# スタビライザー位置とswitchOffsetの裏取り(T-30 単位8) + +## 結論 + +- 6U以上の幅の中には、スタビライザー位置が何通りもあるものがある。6U・6.25U・7Uがそう。 + 6.5U と 8〜10U は、出典にある範囲では1通り。 +- switchOffset が要るのは2U未満のキーに限らない。6U offset・6.25U(Cherry G80のWindowsキー付き)・BAE(ANSI互換)では + スイッチがキーの中心から外れる。逆に、2U未満でよくあるステップドCaps Lockは、KLEの表し方のおかげで offset 0 になる。 +- ISO Enterは「(w,h)矩形の中心にスイッチ、2U間隔のスタビを縦向きに置く」とすれば、出典にある生成ツールの扱いと合う。 + 実物の寸法の出典はまだ見つけていない。 +- BAEは、スイッチとスタビの配置が型によって違う。決まった形はない。 + +座標はすべてキーのローカル座標で、(w,h)矩形の中心を原点にした値(U、1U = 19.05mm)。 +PHYの `switchOffset` と同じ基準になる。スタビは中心から±の位置に2つ置く。 + +## 候補表(Cherry MX系、横向き。縦長のキーは長辺の向きに読み替える) + +| 幅 | スタビ(中心から) | switchOffset.x | 使っているキーボード・出典 | +| --- | --- | --- | --- | +| 2〜2.75U | ±11.938mm(±0.6267U) | 0 | kad・kiswitch・ai03 で一致 | +| 3U | ±1U | 0 | DT(Deskthority wiki、以下同じ)、kad、kiswitch | +| 4U | ±1.5U | 0 | DT、kad(ai03 は3U以上をすべて±1Uにしている) | +| 4.5U | ±34.671mm(±1.82U) | 0 | DT、kad | +| 5.5U | ±2.25U | 0 | DT、kad | +| 6U offset | ±2.5U(芯々95mm) | +0.5U | DT: Cherry G80-1800/11900/11908/11800。kad、kiswitch `6uOffset` | +| 6U 中央A | ±2U | 0 | DT: Razer BlackWidow、TG3 BL-82 | +| 6U 中央B | ±2.5U(47.625mm) | 0 | kiswitch の 6U スタビ、kad の6U値。フォーラム: FC660C、Topre | +| 6.25U 標準 | ±50mm(±2.6247U) | 0 | DT: Filco、Ducky、Poker、Das 3 ほか。kad・kiswitch・ai03 で一致 | +| 6.25U G80 | ±50mm | +0.625U(11.9mm) | DT: Cherry G80-1000/3000(Windowsキー付き)、Das 2。キーキャップに中央のマウントがない | +| 6.25U 40mm | ±40mm(±2.1U) | 0 | DT: Leopold FC200、SteelSeries 6GV2/7G、Zowie Celeritas | +| 6.25U 42.5mm | ±42.5mm | 0 | DT: Leopold FC500、Keycool 87(2012年より前のモデル) | +| 6.5U | ±2.75U(52.38mm) | 0 | DT: Corsair K60〜K95、QuickFire TK、G710+。kad | +| 7U | ±3U | 0 | DT: Cherry G80-1000/1800/3000(Windowsキーなし)ほか。kad・kiswitch・ai03 で一致 | +| 8U / 9U / 9.75U / 10U | ±3.5U | 0 | DT(9U以上も8Uと同じ間隔)。kiswitch は8U〜10Uに同じフットプリントを使う | + +候補表から外したもの(実物の位置が出典から決まらない): + +- 6U CMStorm QuickFire Ultimate: 「43.5mm, 49mm」「芯々98mm」とだけ書かれていて、軸がどれだけずれているか読み取れない +- 7U Compaq MX-11800: 軸から見てスタビが左3U・右2.25U。キーキャップの中でどう対称になっているかは書かれていない。 + スタビがキーの中心に対して対称なら±2.625U、switchOffset +0.375U になり、6.25U と同じ100mmのワイヤーになるが、これは推測 +- 7U Propac: 「55mm apart」とあるだけ + +## 異形キー + +KLEのプリセット(`keys.json`)と、PHYの `size` の主矩形(w,h): + +| キー | KLE | スイッチ | スタビ | +| --- | --- | --- | --- | +| ISO Enter | w1.25 h2, w2 1.5 h2 1, x 0.25, x2 -0.25 | 主矩形の中心(0,0) | 縦向きに±0.6267U。kad は h>w なら自動で縦にする。ai03 は長辺を幅として扱うが、向きは利用者が `_rs` で回す | +| BAE (a) ANSI互換 | w1.5 h2, w2 2.25 h2 1, x 0.75, x2 -0.75, y2 1 | 下段2.25Uの中心 = (-0.375, +0.5) | (-0.375±0.6267, +0.5) の横向き。GMK CYL BAE: 「ANSIの2.25U Enterのスイッチとスタビの位置、1.5UのPipeキーの位置にマウントがある」 | +| BAE (b) 旧Cherry | 同上 | 不明 | 検索の要約には「上段1.5Uを中心にISO風のスタビ、補助のMXスイッチ」とあったが、原文は確認できていない | +| ステップドCaps Lock | w1.25 w2 1.75 l | 主矩形 = 高い側の1.25Uの中心。よくある軸の位置(左寄り)と一致し、offset 0 | なし | +| ステップドCaps Lock(軸が中央) | 同上 | 1.75Uの中心 = +0.25U | なし。数は少ない(Leopoldのセットにある) | +| Center-stepped | w1 w2 1.5, x 0.25, x2 -0.25 l | 主矩形の中心 | なし | + +KLEのステップドキーは、`w` が高い側、`w2` が全幅(kb.js の `stepped` の処理)。 +kad も主矩形の中心にスイッチを置く(`AltWidth > Width` のときは外形の計算だけを広げる)。 + +## switchOffset が0でないケース + +- 2U以上: 6U offset (+0.5U)、6.25U G80 (+0.625U)、BAE(a) (-0.375, +0.5)、おそらく7U Compaq +- 2U未満: 軸が中央にあるステップドCaps Lock (+0.25U) だけ。よくある左寄りの軸は0 +- 「2U未満のみ」という想定は当たらない + +## ツールどうしの食い違い(参考) + +- ai03 は6Uで、スイッチをKLEのキーの中心に置いたまま、スタビを+38.1/-57.15mmと左右非対称に置く。 + kad はスタビをキーの中心に対して±47.5mmで対称に置き、スイッチを+0.5Uずらす。DTの実測(マウントは左から0.5/3.5/5.5U)と合うのは kad +- ai03 は3U〜5.5Uをすべて±19.05mmにしている。DT・kad とは4U以上で合わない +- kad は2Uの値を11.9mmに丸めている。kiswitch・ai03 は11.938mm + +## 出典 + +- Deskthority wiki "Space bar dimensions"(`?action=raw` で原文を確認): +- swill/kad `key.go` の `GetCherryStabOffset`、`Draw`: +- perigoso/keyswitch-kicad-library `KiSwitch/switch.py` の `StabilizerCherryMX.LU_TABLE`、`KiSwitch/keycap.py`: + +- ai03-2725/another-keyboard-builder `plategen.py` の `generate_stabs`: +- KLE `keys.json`(異形キーのプリセット)、`kb.js` の `stepped`: +- GMK CYL BAE addon: +- ステップドCaps Lockの軸の位置(フォーラム): 、 + +- 6Uの中央軸とTopreの値(フォーラム): + +Alpsのスタビ(kad `GetAlpsStabOffset`: 1.75U 11.938、2〜2.75U 14.096、6.25U 41.859、6.5U 45.3mm。DT: 7U ±55mm)は、モックにスイッチの種別がないので扱っていない。 diff --git a/provisional/decisions.md b/provisional/decisions.md index 747344d..e634f2e 100644 --- a/provisional/decisions.md +++ b/provisional/decisions.md @@ -87,14 +87,37 @@ T-29 のコードを作り直さず、[phy-editor-feedback.md](phy-editor-feedba | 6 | キー追加の位置 | 選択中のキー(複数なら最後に選んだキー)の行の右端に追加する。何も選んでいなければ、同じコンテナの全キーの下に新しい行を作り、その左端に置く。クラスターを選んでいればその中に、バリアントグループを選んでいれば表示中のバリアントの中に、同じように新しい行を作る。行の判定は `domain/` に純粋関数として実装してテストし、のちにIDX Editorでも使う。規則は [idx-editor-feedback.md](idx-editor-feedback.md)「行と列の判定」 | `domain/rows.ts`、`usePhyCommands.ts` | | 7a | 長押しの切り出し | 長押しの処理を composable に切り出す。挙動は変えない | `usePhyCanvasPointer.ts` | | 7b | 長押しの2方式 | ループ方式(間隔を延ばし、円形インジケータと選択先のリストを付ける)と、長押しでリストを出して選ぶ方式を入れ、ツールバーで切り替えて比べる。間隔は、押してから600msで始まり1000msごとに進む。リスト方式は、押した位置から少し離してリストを出し、ポインタがリストに入ったら巡回を止め、離したときに指している行で確定する。リストに入らずに離せば、そのときの巡回先で確定する。ループ方式は長押しのあと動かすと選んだ先をドラッグし、リスト方式はドラッグしない | 7aの composable | -| 8 | スイッチ・スタビライザーの表示 | 既定は非表示にし、トグルで色違いの十字を出す。プロパティ欄に `switchOffset` の入力欄を置く | 1の層、`PhyProperties.vue` | +| 8 | スイッチ・スタビライザーの表示 | 既定は非表示にし、トグルで色違いの十字を出す。プロパティ欄に `switchOffset` の入力欄と、スタビ位置の候補の選択欄を置く(下の「単位8のスタビ候補」) | 1の層、`PhyProperties.vue` | 順番の理由: 1で作る層を5と8が使う。2〜5は小さく独立しているので先に片付ける。 -7・8は、着手前に下の点を決める必要がある。7は最も大きく、試して比べる部分なので、挙動を変えない切り出しを先に入れる。 +7は最も大きく、試して比べる部分なので、挙動を変えない切り出しを先に入れる。 -着手前に決めること: +#### 単位8のスタビ候補 -- 8: スタビライザーを付けるキー幅と、幅ごとの位置。これは事実なので、出典で裏取りしてから決める。推測で実装しない。 +スタビ位置はキーのサイズで候補を引き、キーごとに候補を複数選べる。何も選ばなくてもよい。 +選んだ候補はプロジェクトファイルの `ui` にキーIDごとに持ち、PHYには入れない(いずれPHYへ移す)。 +候補が1つのサイズは、その候補を選んだ状態で表示する。候補が複数のサイズは、何も選ばない状態から始める。 +候補を選んでも `switchOffset` は変えない。`switchOffset` は手で入れる。 + +候補は、キーの (w,h) 矩形の中心から±の位置に置く2点で表す(1U = 19.05mm)。縦長のキーは長辺の向きに置く。 +Cherry MX系の値を使う。出典は Deskthority wiki「Space bar dimensions」と、プレート・基板の生成ツール(kad、keyswitch-kicad-library)。 + +| 幅 | 候補 | +| --- | --- | +| 2〜2.75U | ±11.938mm | +| 3U | ±1U | +| 4U | ±1.5U | +| 4.5U | ±34.671mm | +| 5.5U | ±2.25U | +| 6U | ±2.5U(軸がずれた型。実物は `switchOffset.x` = +0.5U)、±2U | +| 6.25U | ±50mm(軸がずれた型もこの位置。実物は `switchOffset.x` = +0.625U)、±40mm、±42.5mm | +| 6.5U | ±2.75U | +| 7U | ±3U | +| 8U・9U・9.75U・10U | ±3.5U | + +6Uの±2.5Uは、軸が中央の型(Topre等)と軸がずれた型で同じ位置になるため、1つの候補にまとめる。 +ISO Enter・BAE等の異形キー(`w2`・`h2`・`x2`・`y2` のいずれかを持つキー)には、候補を出す仕組みだけを入れ、候補は置かない。 +上にない幅のキーは候補なし。 覆すときに影響する箇所: `mock/src/ui/phy/`、6の行判定の関数とそのテスト。