phy: 複数のバリアントで成立するキーはVariantごとに複製して置く

隣り合うキャップが同じフットプリントを食い合う基板(MACRO1)があり、選択を独立な
VariantGroupに必ず分解できるわけではない。分解を強いると、キャップが重なる組み合わせを
作れてしまう。複製してもELCは接続先を、IDXは番号を共有できるので他レイヤーは壊れない。
どのキーノードが同じ物理キーかはBeyond KLEが判定せず、設計者の情報として扱う。

前のコミットで「独立したVariantGroupに分けて表す」と書いたが、MACRO1は下段を含めると
分解できない。あわせて訂正する。

Journal: journal/2026-09-21-variant-shared-key.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 21:34:10 +09:00
co-authored by Claude Opus 5
parent 8e7d21534d
commit 6d0eba9346
2 changed files with 46 additions and 38 deletions
+6 -10
View File
@@ -149,8 +149,8 @@ PHYは全バリアントのキーを同時に持つ。基板上のフットプ
- 部品ノードもVariantの配下に置ける。1Uキーとロータリーエンコーダーの選択がこれにあたる
- Variantの中に別のVariantGroupを置ける。あるバリアントを選んだときだけ現れる選択肢を表す
- 選択箇所が複数ある場合はVariantGroupを複数置く。同じ親の下に並べてよい
- 複数の選択肢に共通して存在するキーは、選択を独立したVariantGroupに分けて表す。
ANSI/ISOとBackspaceの分割のように、1つの選択肢リストに畳まれている基板があるため
- 選択が互いに独立なら、VariantGroupを分けて選択肢の数を減らしてよい。
ANSI/ISOとBackspaceの分割のように、独立な2つの選択が1つの選択肢リストに畳まれている基板がある
VariantGroupはクラスターと同じ変換を持つ。Variantは変換を持たない。
バリアントは同じ場所を占める代替物であり、選択によって配下の絶対配置が動く構造を作らないため。
@@ -159,6 +159,10 @@ VariantGroupはクラスターと同じ変換を持つ。Variantは変換を持
サイズや形が変わるキーは、同じキーを書き換えるのではなく、別のキーノードとして各Variantに置く。
ANSI EnterとISO Enterは別のIDを持つ2つのキーであり、同じ場所に重なる。
同じ位置・同じサイズのキーが複数のバリアントで成立する場合も同じで、Variantごとに別のキーノードを置く。
隣り合うキャップが同じフットプリントを食い合う基板があり、選択を分解できるとは限らないため。
どのキーノードが同じ物理キーを指すかはBeyond KLEが判定しない。設計者が知っている情報として扱う。
VariantGroupは既定のバリアントを1つ持つ。KLE JSONのように単一の配置を要求する出力は、
VariantGroupごとにバリアントを1つ選んでから階層を畳んで生成する。既定値はそのときの初期選択になる。
編集中にどのバリアントを表示しているかはエディタの状態であり、PHYには保存しない。
@@ -400,14 +404,6 @@ Beyond KLEはスイッチの品種を持たないため、対応づける先が
- 現状の認識: キーのローカル原点(左上角)・キー中心・境界矩形の角と中心が候補。相対グリッドとは別の機構になる
- 格上げ条件: 原点移動を実装し、吸着なしで足りるか、足りない場合どの候補が要るかを確認する
### P-15 提供されない組み合わせを禁じる必要があるか
- 位置づけ: 未解決の問い。本文「レイアウトバリアント」は複数のVariantGroupの組み合わせに制限を持たない
- 現状の認識: 選択肢をまたいで共通のキーを持つ基板は実在し、独立した選択に分けてVariantGroupを2つ置けば
キーを複製せずに表せる。ただし2つの選択の積のうち一部しか提供しない基板(MACRO1)があり、
今の木では提供されない組み合わせも選べてしまう
- 格上げ条件: 組み合わせの禁止を表現する必要があるかをユーザーが決める
### P-16 KLE本家が拒否するJSONを取り込むか
- 位置づけ: 未解決の問い。本文「KLE JSONの取り込み」が扱えていない