zudo-panel-designer docs
GitHub リポジトリ

検索したい単語を入力

いつでも検索バーを開ける

PanelConfig フォーマット

PanelConfig は、エディタがパネルの注文成果物としてダウンロードする、バージョン付きの JSON エンベロープです。serializePanelConfig() によって生成され、 parsePanelConfig() によって読み込まれます。どちらも @zpd/core からエクスポートされています (ソース: packages/core/src/serialize.ts)。

エンベロープの形

{
  "version": 1,
  "app": "zpd",
  "panel": { "hp": 12, "widthMm": 60.6, "heightMm": 128.5 },
  "palette": ["black", "gold", "white"],
  "layers": []
}
FieldType備考
version1PANEL_CONFIG_VERSION。下記の バージョニング を参照。
app"zpd"生成元のアプリを識別する固定のリテラル。
panel.hpnumberEurorack HP でのパネル幅。ライブドキュメント(doc.panelHp)から取得。
panel.widthMmnumberpanelWidthMm() を介して hp から導出される——参考用の出力であり、インポート時には再び信頼されない(下記参照)。
panel.heightMmnumberPANEL_HEIGHT_MM、固定の 3U Eurorack パネル高さ(128.5mm)。
palettestring[]固定の 3 色の名前を、インデックス順に並べたもの: ["black", "gold", "white"]
layersLayer[]ドキュメントのレイヤースタック(下から上へ)。レイヤーのフィールド を参照。

Note

panel.widthMmpanel.heightMmpalette は、人間や注文システムの読み手のための派生的・参考用の出力です——これらは、人や下流の製造ツールが hp から寸法を再計算しなくてもファイルを読めるように存在します。読み込み時には、parsePanelConfig は手編集された値を信頼せず、hp からこれらを再計算します。panel.hplayers が正式なソースデータです。

レイヤーのフィールド

5 つのレイヤータイプはすべて、共通のベース構造に加えてタイプ固有のフィールドを持ちます。

すべてのレイヤーに共通

FieldType備考
idstring安定したレイヤー id。インポート時に欠落している場合は mintId('layer') で生成される。
namestring表示名。欠落している場合は "" がデフォルト。
hiddenboolean(任意)レイヤーが一度も非表示にされていない間は省略される。表示状態が一度でも切り替えられると、このフィールドは明示的に書き込まれる——偶数回切り替えた後の false も含めて——トグル操作は既にある値を反転させるため。
type'shape' | 'pattern' | 'path' | 'text' | 'image'以下のフィールドを判別する。

shape

FieldType備考
shape'rect' | 'ellipse'
x, y, width, heightnumberミリメートル、ドキュメント空間。
rotationnumber(任意)bbox の中心を軸にした時計回りの度数。未設定のときは省略される。
color0 | 1 | 2ColorIndex を参照。

pattern

FieldType備考
patternTypestring自由形式の識別子(例: "dot-grid")。認識できなくてもそのまま保持される——core は、それを検証するパターンレジストリに依存していない。
paramsRecord<string, number>パターン固有の数値パラメータ(例: pitchradius)。
color0 | 1 | 2

path

FieldType備考
pointsPathPoint[]プライマリのサブパス——ペンツールが編集するもの。PathPoint を参照。
extraSubpathsPathPoint[][](任意)追加の閉じたサブパス。例えば画像トレースで生成される穴や島。存在・非存在(空配列であっても)はラウンドトリップのために正確に保持される。
closedboolean
fill0 | 1 | 2 | nullnull は塗りなしを意味する。
stroke0 | 1 | 2 | nullnull は線なしを意味する。
strokeWidthnumberミリメートル。

PathPoint

FieldType備考
x, ynumberアンカー点、ミリメートル。
hin{ x: number, y: number }(任意)絶対座標のベジェ handle-in。
hout{ x: number, y: number }(任意)絶対座標のベジェ handle-out。

text

FieldType備考
contentstring改行を含んでもよい。
fontFamilystring
sizeMmnumberミリメートル単位のフォントサイズ(キャンバスのフォント px は、ドキュメント空間では mm に等しい)。
x, ynumberバウンディングボックスの左上、ミリメートル。
rotationnumber(任意)時計回りの度数。未設定のときは省略される。
color0 | 1 | 2

image

FieldType備考
srcstringデータ URL。設計時の参照のみ——ラスターは製造できず、最終的なパネルはそこからトレースされたベクターレイヤーを使う。
x, y, width, heightnumberミリメートル。

ColorIndex + パレット

すべてのレイヤーの color(および path レイヤーの fillstroke)は ColorIndex012 のいずれか)です。このインデックスは、 packages/core/src/palette.ts で一度だけ定義される固定の 3 色パネル仕上げに対応します。

IndexName意味
0blackソルダーマスク
1gold露出銅(ENIG メッキ)
2whiteシルクスクリーン

エンベロープ内の palette 配列(["black", "gold", "white"])は、これらの名前を インデックス順に並べたものです——JSON の読み手が、インデックスと名前の対応を暗記していなくても 済むように存在します。パレットは固定であり、ドキュメントごとにユーザーが設定できるものではありません。

バージョニング

PANEL_CONFIG_VERSION は現在 1 で、PanelConfig の TypeScript 型は version: 1 に 固定されています——これまでのところフォーマットの世代は 1 つだけです。このフィールドは、 将来フォーマットが変わったときに、それを知らせる場所を確保しておくために存在します。 後のパーサーは、古いファイルを扱うために version で分岐したり、認識できないバージョンの ファイルを拒否・マイグレーションしたりできます。現時点では、parsePanelConfig は入力の version フィールドを実際には読み込みも検証もしません——パーサーがエンベロープの形に対して 厳格ではなく、あえて寛容に設計されている理由については、防御的パース を参照してください。