コンテンツにスキップ

linkcad.env

スクリプトとプラグインのためのオプションとログ機能です。

from linkcad.v1.env import (
get_option_boolean, set_option_boolean,
get_option_int, set_option_int,
get_option_real, set_option_real,
get_option_string, set_option_string,
get_option_path, set_option_path,
test_option, record_option,
register_option_int, register_option_boolean,
register_option_real, register_option_string,
init_options, save_options,
program_version, program_version_number,
EventLog, IEventLog, IEventLogReader, Severity,
)

オプション

LinkCAD は永続的な形式オプションとツールオプションを文字列キー(例: "GdsiiInFlattenAll")で保存します。以下の関数を使うと、オプションダイアログを開かずにスクリプトからこれらの値を読み書きできます。

Python プラグインが Option.* で宣言したオプションは、プラグイン単位に区切られた生成キー PyPlugin.<クラス>.<属性> を使います。AsciiWriterflatten 属性なら PyPlugin.AsciiWriter.flatten として保存されます。予約されたルート PyPlugin はプラグインオプションをアプリケーション自身の名前空間から隔離し、クラス部分は flatten という同名のオプションを持つ 2 つのプラグインを区別します。これらも同じ関数で読み書きします。

読み書き

関数説明
get_option_boolean(name, default=False, *, record=False)ブールオプションを読み取ります
set_option_boolean(name, value)ブールオプションを書き込みます
get_option_int(name, default=0, *, record=False)整数オプションを読み取ります
set_option_int(name, value)整数オプションを書き込みます
get_option_real(name, default=0.0, *, record=False)浮動小数点オプションを読み取ります
set_option_real(name, value)浮動小数点オプションを書き込みます
get_option_string(name, default="", *, record=False)文字列オプションを読み取ります
set_option_string(name, value)文字列オプションを書き込みます
get_option_path(name, default="", *, record=False)パスオプションを文字列として読み取ります
set_option_path(name, value)文字列からパスオプションを書き込みます
test_option(name)そのオプションが登録済みで読み取り可能かどうか
record_option(name)オプションへのアクセスを記録します

どのゲッターも、オプションが登録されていなければ default を返します。未知のキーでも型のゼロ値ではなく渡した値が返ります。

from linkcad.v1.env import get_option_int
iterations = get_option_int("MyToolIterations", 10) # 10 if never registered

record は 5 つのゲッターすべてでキーワード専用です。したがって 2 番目の位置引数は、bool を含むどの型でも「既定値」を意味します——get_option_boolean(name, True) は読んだとおりの意味になります。

Option.* で宣言したプラグインオプションは run()read()write() の呼び出し前に自動的に登録されるため、self.<属性> から読めば現在の値が得られます。

登録と永続化

プラグイン基底クラスは自身のオプションを登録するため、ほとんどのスクリプトでこれらは不要です。独自のオプションキーを定義するコード向けです。

関数説明
register_option_int(name, default_value, short_name="", persistent=True)整数オプションを宣言します
register_option_boolean(name, default_value, short_name="", persistent=True)ブールオプションを宣言します
register_option_real(name, default_value, short_name="", persistent=True)実数オプションを宣言します
register_option_string(name, default_value, short_name="", persistent=True)文字列オプションを宣言します
init_options(enable_persistence=True)オプションシステムを初期化します
save_options()オプションを永続ストレージへ書き出します

バージョン

関数説明
program_version(short_form=False)LinkCAD のバージョン(文字列)
program_version_number()LinkCAD のバージョン(数値)
from linkcad.v1.env import get_option_boolean, set_option_boolean
# Check whether GDSII import flattens hierarchy
flatten = get_option_boolean("GdsiiInFlattenAll", False)
print(f"GDSII flatten: {flatten}")
# Temporarily override
set_option_boolean("GdsiiInFlattenAll", True)

ログ

EventLog

アプリケーションのイベントログです。ここに書き込まれたメッセージは LinkCAD のログパネルに表示されます。

from linkcad.v1.env import EventLog, Severity
log = EventLog()
log.log(Severity.Info, "Processing complete")
log.log(Severity.Warning, "Layer 'TEMP' will be deleted")
log.log(Severity.Error, "Could not open file")
if log.highest_severity == Severity.Error:
log.mark_fatal()
print(log.entry_count, log.fatal)

1 つの階層をなす 3 つのインターフェイスがあります。IEventLog は書き込み側、IEventLogReader は読み取りを加えたもの、EventLog は自分で構築できる具象ログです。Conversion.export_logConversionController.export_logIEventLog を、import_logIEventLogReader を返します。

プロパティ / メソッド定義元説明
EventLog()EventLogイベントログを作成します
log.log(severity, message)IEventLog指定した重大度でメッセージを書き込みます
log.log_with_title(severity, title, description)IEventLogタイトル付きメッセージを書き込みます
log.log_success(message)IEventLog成功メッセージの簡易メソッド
log.log_info(message)IEventLog情報メッセージの簡易メソッド
log.log_warning(message)IEventLog警告メッセージの簡易メソッド
log.log_error(message)IEventLogエラーメッセージの簡易メソッド
log.fatalIEventLogログが致命的と印付けられていれば True
log.mark_fatal()IEventLogログを致命的と印付けます。取り消せません
log.entry_countIEventLogReaderログ内のエントリ数
log.highest_severityIEventLogReaderログ内の最も高い重大度
log.log_at_line(severity, message, line)EventLog行番号付きでメッセージを書き込みます
log.log_at_name(severity, message, name)EventLog名前付きの位置情報とともに書き込みます
log.clear_log()EventLogすべてのエントリを削除します

mark_fatal()fatal = True にならず動詞のままなのは、これが一方通行の遷移だからです。戻る手段はありません。

Severity

ログメッセージの重大度レベルです。

説明
Severity.Success成功メッセージ
Severity.Info情報メッセージ
Severity.Informational情報メッセージ。Severity.Info と同じ
Severity.Warning致命的ではない警告
Severity.Error回復可能なエラー