コンテンツにスキップ

セットアップと要件

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+ で選択テキストを実行します

パッケージ構造

linkcadlinkcad.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, geom
from linkcad.v1.db import Drawing, Cell, Layer
from linkcad.v1.geom import Point, Vector

トップレベルに名前はありません。from linkcad import Drawing は動作せず、from linkcad.v1 import Drawing も同様です。

これは手抜かりではなく意図的なものです。モジュールの内容どうしが衝突します。FillRuledbeditlibgraph でそれぞれ別の列挙型であり、HolesModeeditlibgraph で異なり、CellContextFormatInfo はそれぞれ無関係な 2 つの型を指します。フラットな名前空間ではどれか 1 つを選ぶほかなく、その選択はインポート順で決まってしまいます——誰にも予測できない規則です。

モジュールの一覧は書き下すのではなくパッケージディレクトリから発見されるため、遅れをとることがありません。これに置き換えられた手書きの一覧は 12 個のクラスを挙げるだけで、ArcEllipseDonutNurbsTextRefShapeObjectProperty、すべての列挙型、そして 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.typedPEP 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 subprocess
subprocess.check_call(["pip", "install", "numpy"])