拡張機能開発入門
Altium Designer は、すべてのソフトウェア拡張モジュールに共通するサービスを提供します。たとえば新しいドキュメントの作成は、作成したいドキュメントの種類に関係なく同じ方法で行われます。Altium Designer はオープンなソフトウェア・アーキテクチャを実現しており、将来のソフトウェア拡張だけでなく、Altium Designer 環境に自分のソフトウェアツールを持ち込みたいあらゆる開発者による拡張もサポートできるように設計されています。
設計環境は、設計タスクを中心に据え、ソフトウェアツールは設計を開発するために必要なサービスを提供するだけ、という考え方に基づいた高度に統合されたツールセットとして意図的に開発されています。この概念は Microsoft Office™ 製品にも見られます。Word や Excel といったアプリケーション内で作業することから、プレゼンテーション、ワークブック、テキストドキュメントといった「ドキュメント」を中心に作業することへと、焦点が移っています。
Altium Designer のオープンアーキテクチャにより、サードパーティ開発者は自社アプリケーションを環境に統合でき、回路図エディタ、PCB エディタ、その他のエディタに対して完全な Application Programming Interface (API) アクセスが可能になります。Altium Designer の拡張機能はソフトウェアのクライアント/サーバー・アーキテクチャモデルに基づいており、すべてのサーバー拡張は単一の、完全にカスタマイズ可能なユーザー環境で動作します。このクライアント/サーバーモデルは、タスクを対話的な「クライアント」プロセスと分散的な「サーバー」プロセスに分割します。
Altium Designer のプラットフォームでは、異なるサーバーモジュールを機能拡張としてインストールできます。PCB Editor と Schematic Editor は、共通の DXP プラットフォーム上で専門的な機能を提供する既存のサーバーです。
オブジェクト指向プログラミングの原則に精通し、Windows API およびシステムレベルのプログラミングスキルを備えている必要があります。Altium Designer 用のソフトウェア拡張の構築に着手する前に、Object Pascal (Delphi) または C++/C# のプログラミングスキルを身に付けておくことを推奨します。
Altium Designer SDK の概要については Altium SDK の概要 を参照してください。
Altium Designer プラットフォーム
Altium Designer では、いくつかの主要なソフトウェア技術が使用されています。クライアント/サーバー・アーキテクチャ技術、Altium Designer Objects、そしてオブジェクト指向技術です。
Altium Designer システムはハイブリッドなインターフェースモデルを提供し、Dynamic Link Library (DLL) モジュールの機能をユーザーとクライアント実行システムの両方に公開します。ソフトウェア拡張の基本的な DLL 機能は、関連付けられたインストール済みサーバーファイル (*.ins
Altium Designer:1 つのクライアントモジュール (EXE) と複数の拡張サーバー
クライアント実行ファイル(実質的に DXP プラットフォーム)は、Altium Designer システム内でロードされた DLL 拡張と連携するスタンドアロンの実行システムです。クライアントモジュールはユーザーインターフェースを制御し、タスク(コマンドを送信)を適切なサーバー拡張へ委譲します。これらの拡張(DLL ファイル)は、Altium Designer でユーザーが呼び出したコマンドに基づき、特定の機能を提供することだけに専念します。Altium Designer システムは、ロードされたサーバー拡張のパッケージ済みプロセスランチャーを使用することで、統一されたグラフィカルユーザーインターフェース (GUI) を維持します。
一般的な拡張タイプ
Altium Designer には、さまざまな種類のソフトウェア拡張(サーバー DLL)をインストールできます。典型的な拡張タイプとしては、ドキュメントエディタ、インポータ、エクスポータ、ネットリスター、出力ジェネレータ、またはエディタ拡張などがあります。
前述のとおり、Altium Designer アプリケーションは DXP 技術のソフトウェアプラットフォームに基づいており、環境内の実行ファイルは 1 つだけで、ほぼ DLL のみを使用します。これはクライアント/サーバーモデルと並行する考え方です。 また、拡張自体が別の実行ファイルを起動して特定のタスクを実行し、その結果を返すこともできます。
ドキュメントエディタ
ドキュメントエディタは、Altium Designer 内で特定のドキュメントタイプを編集できるようにします。たとえば既存の PCB または Schematic Editor は、PCB または回路図ドキュメントの作成、編集、検証に使用されます。
ドキュメントエディタは、Altium Designer で扱う特定の種類のドキュメントを処理します。たとえば PCB エディタは PCB ドキュメントを、Schematic エディタは回路図ドキュメントのみを扱います。ドキュメントエディタは複数のドキュメント種別をサポートすることもできます。 Altium Designer 内にユーザーインターフェースを持つエディタ拡張は、独自の GUI リソースを持ちます。このリソース群(種類はホットキー、メニュー項目、ツールバーボタン)は、タスクを呼び出すための特定コマンドを起動する 1 つ以上のプロセスランチャーで構成されます。
アドオン
アドオンは、Application Programming Interface (API) を使用してメインエディタに接続し、Altium Designer 内でエディタのドキュメントを操作します。たとえば、エディタの PCB API を使用して PCB エディタ機能を拡張するアドオンを開発できます。PCB エディタの Hole Size Editor はアドオン拡張です。
Getting started: Building a Delphi extension ドキュメントでは、Delphi を使用して PCB エディタ向けのアドオン拡張を開発する方法の詳細を説明しています。
出力ジェネレータ
出力ジェネレータは、Altium Designer でプロジェクトの出力を生成できるようにします。各設計プロジェクトには、次のカテゴリにおけるさまざまな出力ジェネレータを管理する複数の Outjob ドキュメントを含めることができます:Assembly Outputs、Documentation Outputs、Fabrication Outputs、Netlist Outputs、Report Outputs。
ネットリスターや部品表(Bill of Materials)レポーターなど、さまざまな種類の出力ジェネレータを開発できます。Altium Designer は、さまざまな出力ジェネレータに対して統一されたインターフェースを提供しており、追加するだけで自動的に使用できます。
Altium Designer のサービス
ソフトウェア拡張は Altium Designer アプリケーション内でサービスを提供します。DXP プラットフォーム(Altium Designer のクライアントモジュール)はタスクをコマンドとして解釈し、それらのコマンドを適切なサーバーへ委譲します。コマンドは、ソフトウェアが一連のタスクを実行するものと考えることができます。
ドキュメントに作用するサーバープロセスとしてのコマンド
このアプローチにより、Altium Designer システムはプロセス中心の環境となります。つまり、GUI を通じてユーザーが呼び出したコマンドは自動的に適切なサーバーへディスパッチされます。対象サーバーは、現在フォーカスされている設計ドキュメントに対して必要な機能を有効化することで応答します。
たとえばユーザーが Schematic メニューをクリックしてワイヤを配置すると、システムはこの操作を「Sch: PlaceWire」コマンドとして解釈し、そのコマンドを Schematic エディタへ委譲します。Schematic エディタは、コマンド(サーバープロセス文字列)を実行することで応答します。これはクライアント/サーバーの協調動作であり、ユーザーが要求した一連の責務を果たしています。
Altium Designer にインストールされるドキュメントエディタなどの拡張サーバーの機能は、そのサーバーのプロセスおよび公開された関数によって公開されます。
コマンド、プロセスランチャー、プロセス
最も単純に言えば、拡張サーバーは一連のプロセスによって支えられており、これらのプロセスは Altium Designer とサーバーを結ぶリンクとして機能します。各サーバーには固有のプロセス一覧があり、これらはパラメータとともにプロセスランチャーとしてパッケージ化され、Altium Designer のグラフィカルユーザーインターフェース内のコマンドにリンクされます。別の見方をすると、メニュー項目を選択したり、ホットキーを押したり、ツールバーボタンをクリックしたりすると、Altium Designer システムはプロセス識別子と(あれば)そのパラメータを適切な拡張サーバーへ渡してコマンド(パッケージ化されたプロセスランチャー)を起動し、サーバーがアクティブなドキュメントに対してそのアクションを実行します。
コマンド
コマンドは、ソフトウェアが一連のタスクを実行するものと考えることができます。このタスクは、モニター上の画面を再描画するような単純なものから、部品表(Bill of Materials)レポートを生成するような複雑なものまであります。コマンドは Altium Designer の GUI の基本単位です。
コマンドは、ツールチップおよびビットマップ画像情報を含むパッケージ化されたプロセスランチャーです。Altium Designer でコマンドを実行するたびに、コマンド文字列がサーバーへ送信され、その後、特定サーバーのコマンドテーブルが参照されて、このコマンドに対するアクションが実行されます。
プロセスランチャー
プロセスランチャーは Altium Designer 内でアクションを引き起こします。これには name:process
プロセス
プロセスは、拡張サーバーが提供する内部コマンドであり、Altium Designer のメニュー、ツールバー、ショートカットキーにリンクするプロセスランチャーの要素として使用されます。つまり、各メニュー項目、ツールバーボタン、ホットキーの背後にはプロセスランチャーがあり、プロセスランチャー自体は、プロセス、パラメータ一式、キャプション文字列などの表示情報をまとめたラッパーです。
その結果、コマンドと呼ばれるサーバーのプロセスは、Altium Designer のメニュー項目、ツールバーボタン、ショートカットキーにリンクされたプロセスランチャーとして実装されます。サーバーには固有の名前があるため、異なるサーバー同士で同じプロセス名を持てますが、Altium Designer 内では異なるコマンドになります。たとえば
DLL としての拡張
一般に、DLL としてのソフトウェア拡張は、Altium Designer から呼び出せるルーチン、データ構造、インターフェースの集合です。SDK のソースユニットと同様に、DLL には共有可能なコードやリソースが含まれます。
Altium Designer のソフトウェアアーキテクチャでは、利用可能なサービスを拡張するために、追加の拡張サーバーをいつでも追加できます。つまり、すべての拡張は同じ Altium SDK を使用し、同じインターフェースとルーチンを実装します。また、ドキュメントエディタのような拡張サーバーの機能を公開して、他のサーバーがアクセスできるようにすることも可能です。さらに、異なる拡張サーバー間の相互作用と統合を強化するために、回路図(Schematic)エディタと PCB エディタには Application Programming Interface(API)が用意されています。
API を使用すると、PCB および Schematic のプロセスやデータベースオブジェクトを、他のサーバーから直接利用できます。たとえば Router 拡張は、ドキュメントエディタを必要としません。API 呼び出しを通じて PCB エディタで開いている設計を配線できるからです。API により、Schematic エディタと PCB エディタのあらゆる機能とパワーを、開発者であるあなたが直接利用でき、Schematic や PCB エディタをさらに強化するソフトウェア拡張を構築できます。
拡張サーバーの構築
拡張サーバーを構築するには、適切なプログラミングツールキット(Embarcadero Delphi または C++/C# 用の Microsoft Visual Studio)、Altium Designer SDK とその API ソースユニット、そして当然ながら Altium Designer が必要です。Altium Designer 向けにはさまざまなソフトウェア拡張を開発できますが、一般的には次のように分類できます。
- アドオン
- ドキュメントエディタ
- 出力ジェネレータ
Altium SDK とプログラミング IDE をインストールしたら、ソフトウェア拡張の開発プロセスは、サンプルプロジェクトを実際に進める、または作り上げていくことで理解するのが最適です。これには、Delphi/C++/C# とプロジェクトファイルのセットアップ、プロジェクト構成ファイルとソースコードへのアクセスまたは作成、アプリケーションのコンパイルとデバッグ、生成された拡張パッケージの Altium Designer への実装などが含まれます。
アドオン拡張サーバーの構築に関する詳細は、次を参照してください。
Altium Designer への拡張サーバーのデプロイ
拡張サーバーは、DLL として開発・コンパイルした後、Altium Designer とのインターフェース方法を指定するための構成ファイル一式も必要です。
ドキュメントエディタ拡張には、想定どおり一連のコマンドがあります。これらのコマンド識別子はインストールファイル(*.INS)に格納され、特定のユーザーインターフェース要素(リソースとも呼ばれます)にリンクするプロセスランチャーと、ユーザーインターフェース要素のレイアウトはリソースファイル(*.RCS)で定義されます。サーバーのパネルやツールバーの配置は、ツールバー レイアウトファイル(*.TLT)で定義されます。
ソフトウェア拡張をビルドした後は、 Altium DXP Developer を介してインストールできます。これにより新しい拡張が Altium Designer に登録され、そのプロセスが使用可能になります。通常、拡張ファイルは DLL、インストールファイル(.INS)、リソースファイル(.RCS)、および任意でツールバー レイアウトファイル(.TLT)です。ボタンやアイコンファイルも含めることができます。
要するに、拡張サーバーの構成ファイルにより、Altium Designer の起動時に、拡張のシステム機能と構成を Altium Designer が判断できるようになります。
構成ファイルの開発とソフトウェア拡張のデプロイに関する詳細は、 Server configuration files ドキュメントを参照してください。
Altium Designer の Preferences ダイアログへのマッピング
プラグイン拡張サーバーでは、制御リソースを Altium Designer の
マッピングを適用するには、サーバーモジュールから通知ハンドラとオプションページを登録し、コントロールの状態を保持するグローバルな Preferences コンテナを定義し、コントロールの状態を更新する通知ハンドラを定義する必要があります。
拡張サーバーからマッピングが確立されると、たとえばサーバーのパネル上のチェックボックスコントロールがユーザーによって無効化された場合、
Delphi を使用して PCB エディタ向けの拡張サーバーを構築する手順ガイドについては、Getting started: Building a Delphi extension ドキュメントを参照してください。

