パネルアセンブリチュートリアル
この高度なチュートリアルでは、Option.table() 型を使用してパネルレイアウトを指定する対話型グリッドを作成する、実世界向けツールの構築方法を示します。
目標
複数のセルをパネルグリッドに配置し、間隔と繰り返しを設定できる “Panelizer” ツールを作成します。
完全なプラグイン
from linkcad.plugin import tool, Tool, Option, TableColumnfrom linkcad.db import Drawing, Cell, Transactionfrom linkcad.geom import Point
@tool( name="Panelize", menu="Tools/Drawing", tooltip="Arrange cells into a panel layout", requires_drawing=True,)class Panelizer(Tool): panel_name = Option.string( "Panel cell name", default="PANEL", tooltip="Name for the generated panel cell", )
entries = Option.table( "Panel Layout", columns=[ TableColumn( key="cell_name", label="Cell", col_type="cell_choice", ), TableColumn( key="offset_x", label="Offset X (µm)", col_type="real", default=0.0, decimals=3, ), TableColumn( key="offset_y", label="Offset Y (µm)", col_type="real", default=0.0, decimals=3, ), TableColumn( key="repeat_x", label="Repeat X", col_type="integer", default=1, min_value=1, max_value=1000, ), TableColumn( key="repeat_y", label="Repeat Y", col_type="integer", default=1, min_value=1, max_value=1000, ), TableColumn( key="pitch_x", label="Pitch X (µm)", col_type="real", default=1000.0, decimals=3, ), TableColumn( key="pitch_y", label="Pitch Y (µm)", col_type="real", default=1000.0, decimals=3, ), ], )
flatten_result = Option.boolean( "Flatten result", default=False, tooltip="Flatten the panel cell after assembly", )
def run(self, drawing) -> None: dwg = Drawing.current()
with Transaction(dwg) as txn: panel = Cell.create(dwg, self.panel_name)
for row in self.entries: cell_name = row["cell_name"] if not cell_name: continue
cell = dwg.find_cell(cell_name) if cell is None: print(f"Warning: cell '{cell_name}' not found, skipping") continue
ox = int(row["offset_x"] * 1000) # µm to nm oy = int(row["offset_y"] * 1000) rx = int(row.get("repeat_x", 1)) ry = int(row.get("repeat_y", 1)) px = int(row["pitch_x"] * 1000) py = int(row["pitch_y"] * 1000)
for ix in range(rx): for iy in range(ry): x = ox + ix * px y = oy + iy * py panel.add_ref(cell, Point(x, y))
# auto-commits on successful exit
print(f"Created panel '{self.panel_name}' with " f"{len(self.entries)} cell group(s)")テーブルオプションの仕組み
Option.table() は、ツールダイアログ内に編集可能なグリッドを作成します。
- 列は
TableColumnオブジェクトで定義されます - 行はユーザーがボタンで追加/削除します
- 値は
list[dict]で、各辞書が列キーを値に対応付けます - 列タイプには
string、integer、real、choice、cell_choiceがあります
TableColumn プロパティ
| プロパティ | 説明 |
|---|---|
key | この列の値の辞書キー |
label | 列見出しテキスト |
col_type | string、integer、real、choice、cell_choice |
default | 新しい行のデフォルト値 |
choices | choice 列のオプション |
decimals | real 列の小数桁数 |
min_value | 数値列の最小値 |
max_value | 数値列の最大値 |
cell_choice 列タイプ
cell_choice 列は、現在の図面にあるすべてのセル名で埋められたドロップダウンとして表示されます。ユーザーにセルを選択させる推奨方法です。
主要パターン
テーブル行へのアクセス
for row in self.entries: cell_name = row["cell_name"] offset_x = row["offset_x"]データベーストランザクションの使用
図面の変更は常にトランザクションで囲みます。
with Transaction(dwg) as txn: # ... modify drawing ... # auto-commits on successful exit; auto-rolls-back on exception単位変換
図面データベースは内部的にナノメートルを使用します。ユーザー向け単位から変換します。
x_nm = int(x_um * 1000) # µm → nm