拡張機能開発入門

 
関連ドキュメント

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# のプログラミングスキルを身に付けておくことを推奨します。

本ドキュメントでは、DXP プラットフォームにプラグインするサーバーモジュール (DLL) を指して Extension という用語を使用しますが、同じ文脈で Server が使われることもよくあります。この文脈では、ソフトウェアの「拡張」と「サーバー」は同等であり、システムのクライアント/サーバー・アーキテクチャに焦点が置かれている点で技術的にも適切です。機能面では、サーバー Extensions を Altium Designer に追加(プラグイン)できます。

Altium Designer プラットフォーム

Altium Designer では、いくつかの主要なソフトウェア技術が使用されています。クライアント/サーバー・アーキテクチャ技術、Altium Designer Objects、そしてオブジェクト指向技術です。

Altium Designer システムはハイブリッドなインターフェースモデルを提供し、Dynamic Link Library (DLL) モジュールの機能をユーザーとクライアント実行システムの両方に公開します。ソフトウェア拡張の基本的な DLL 機能は、関連付けられたインストール済みサーバーファイル (*.ins) を介して、実行時に Altium Designer 実行ファイルへバインドされます。ソフトウェア拡張は Altium Designer SDK を使用して構築されます。

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 はアドオン拡張です。

出力ジェネレータ

出力ジェネレータは、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 のメニュー項目、ツールバーボタン、ショートカットキーにリンクされたプロセスランチャーとして実装されます。サーバーには固有の名前があるため、異なるサーバー同士で同じプロセス名を持てますが、Altium Designer 内では異なるコマンドになります。たとえば PCB:Zoom コマンドと SCH:Zoom コマンドです。

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 向けにはさまざまなソフトウェア拡張を開発できますが、一般的には次のように分類できます。

  • アドオン
  • ドキュメントエディタ
  • 出力ジェネレータ

Add-on:アドオンは比較的シンプルな拡張サーバーで、自身のドキュメントを管理せず、API を介して PCB サーバーや Schematic サーバーなどのメインサーバーのサービスを利用します。

Document editors:ドキュメントエディタは、自身のドキュメントを提供・管理できる完全な拡張です。サーバー開発時に使用できるシェルファイル一式が提供されています。

Output Generators:出力ジェネレータは自己完結型のソフトウェア拡張で、BOM やネットリスト出力など、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)です。ボタンやアイコンファイルも含めることができます。

インストール可能な拡張サーバーは、物理的には少なくとも 4 つのファイルで構成されます。サーバー自体の機能を表す DLL ファイル、プロセスランチャーとサーバーのユーザーインターフェース構造を含むリソースファイル、サーバー設定とプロセス名を含むインストールファイル、そしてこの拡張のパネルとツールバーの配置を表す TLT ファイルです。

要するに、拡張サーバーの構成ファイルにより、Altium Designer の起動時に、拡張のシステム機能と構成を Altium Designer が判断できるようになります。

Altium Designer の Preferences ダイアログへのマッピング

プラグイン拡張サーバーでは、制御リソースを Altium Designer の Preferences ダイアログ(DXP » Preferences)内のローカルページにマッピングできます。

マッピングを適用するには、サーバーモジュールから通知ハンドラとオプションページを登録し、コントロールの状態を保持するグローバルな Preferences コンテナを定義し、コントロールの状態を更新する通知ハンドラを定義する必要があります。

拡張サーバーからマッピングが確立されると、たとえばサーバーのパネル上のチェックボックスコントロールがユーザーによって無効化された場合、Preferences ダイアログ上の同じコントロールも自動的にオフになります。内部的には、パネル上のコントロールをクリックすると Altium Designer 内で通知がブロードキャストされ、それをサーバーが受け取って関連するコントロールが更新されます。

AI-LocalizedAI で翻訳
問題が見つかった場合、文字/画像を選択し、Ctrl + Enter キーを押してフィードバックをお送りください。
Content