セットアップと要件
Python バージョン
LinkCAD 11 には、組み込み Python 3.12 インタープリターが同梱されています。別途 Python をインストールする必要はありません。
プラグインの場所
Python プラグインファイル(.py)を次のいずれかのディレクトリに配置します。
- ユーザープラグイン:
%APPDATA%\LinkCAD\plugins\ - システムプラグイン:
<LinkCAD install dir>\plugins\
LinkCAD は起動時にこれらのディレクトリをスキャンし、見つかったプラグインを登録します。
コンソールへのアクセス
メニューから対話型 Python コンソールを開きます。
- View → Python Console (Ctrl+Shift+P)
このコンソールから、linkcad パッケージと現在読み込まれている図面に完全にアクセスできます。
コンソールとスクリプトエディターはどちらも drawing というグローバル変数を定義します。これは常に LinkCAD で現在開いている図面を指し、何も読み込まれていない場合は None になります。この図面はアプリケーションが所有しているため、読み書きは可能ですが destroy() を呼び出してはいけません。
if drawing is not None: print(drawing.name, len(drawing.cells), "cells")自分で作成した図面は必ず解放する必要があります。解放しないとインタープリター終了時にクラッシュします。コンテキストマネージャーとして使用してください。
from linkcad.v1.db import Drawing
with Drawing("scratch") as dwg: ...スクリプトエディター
LinkCAD には組み込みのスクリプトエディターがあります。
- View → Python Script Editor (Ctrl+Shift+E)
- F5 で現在のスクリプトを実行します
- Ctrl+↵ で選択テキストを実行します
パッケージ構造
linkcad と linkcad.v1 が公開するのは、API のモジュールだけです。
| モジュール | 目的 |
|---|---|
linkcad.v1.plugin | プラグインフレームワーク——デコレーター、オプション、基底クラス |
linkcad.v1.db | 図面データベース——セル、レイヤー、形状、トランザクション |
linkcad.v1.geom | ジオメトリプリミティブ——点、ベクトル、変換、範囲 |
linkcad.v1.edit | ジオメトリタスク——マージ、フラット化、グリッドにスナップ、結合、展開 |
linkcad.v1.env | オプションとログ——永続設定、イベントログ |
linkcad.v1.conv | ファイル形式変換——図面の読み込みと保存 |
linkcad.v1.libgraph | ブール演算ジオメトリ——和、積、差 |
linkcad.v1.controller | 上位レベルの変換ワークフローコントローラー |
名前はそれを定義するモジュールの中にあります。まずモジュールを取り、その中の名前はその次です。
from linkcad import db, geom # or: from linkcad.v1 import db, geomfrom linkcad.v1.db import Drawing, Cell, Layerfrom linkcad.v1.geom import Point, Vectorトップレベルに名前はありません。from linkcad import Drawing は動作せず、from linkcad.v1 import Drawing も同様です。
これは手抜かりではなく意図的なものです。モジュールの内容どうしが衝突します。FillRule は db、edit、libgraph でそれぞれ別の列挙型であり、HolesMode は edit と libgraph で異なり、CellContext と FormatInfo はそれぞれ無関係な 2 つの型を指します。フラットな名前空間ではどれか 1 つを選ぶほかなく、その選択はインポート順で決まってしまいます——誰にも予測できない規則です。
モジュールの一覧は書き下すのではなくパッケージディレクトリから発見されるため、遅れをとることがありません。これに置き換えられた手書きの一覧は 12 個のクラスを挙げるだけで、Arc、Ellipse、Donut、Nurbs、Text、Ref、Shape、Object、Property、すべての列挙型、そして linkcad.geom 全体を落としていました。
API のバージョン管理
linkcad.v1.* サブモジュールを使用してください。各サブモジュールは対応するトップレベルモジュールの公開名前空間全体をミラーしているため、オブジェクトは同一です。v1 を使うことでスクリプトが安定 API に固定され、LinkCAD の Python API が進化しても動作し続けます。
import linkcad
print(linkcad.API_VERSION) # "v1"print(linkcad.__version__) # e.g. "11.0.27" — read from the loaded LinkCAD build__version__ はパッケージ内のリテラルではありません。linkcad.env.program_version() から得られるため、常に実際に読み込まれているバイナリのバージョンになります。
エディターのサポート
パッケージは型スタブを同梱し、py.typed(PEP 561)で印付けられています。エディターや型チェッカーは、こちらで何も設定しなくても linkcad.* を理解します。
cell.やdrawing.の補完が、実際のメンバー一覧で効きます- シグネチャーヘルプ——
cell.add_polygon(layer, vertices)は両方の引数とその型を示します cell.shapes()をメソッドとして呼んだ場合、Layerを渡すべき箇所にstrを渡した場合、drawing.cell(name)が返しうるNoneを扱っていない場合に赤い下線が出ます
スタブはコミットされるのではなくビルド時に構築済みモジュールから生成されるため、記述対象のバインディングとずれることがありません。エディターが LinkCAD 同梱のインタープリターを指すようにするか、その site-packages ディレクトリをプロジェクトのパスに追加すれば、以上はすべて追加設定なしで機能します。
追加パッケージのインストール
LinkCAD Python 環境で pip を使用して追加の Python パッケージをインストールできます。
import subprocesssubprocess.check_call(["pip", "install", "numpy"])