Altium C✛✛ SDK
本ドキュメントは、Altium Designer SDK の C++ 実装を使用して Extension サーバーを開発し、その成果物を Altium Designer にインストールするまでの手順を解説するガイドです。SDK の概要については、Altium SDK の概要 ドキュメントを参照してください。
Altium Designer のソフトウェア統合プラットフォーム(DXP ソフトウェア技術プラットフォーム、または略して DXP プラットフォームとも呼ばれます)は、クライアント/サーバー・アーキテクチャに基づいています。DXP プラットフォームにより、ソフトウェア拡張「プラグイン」が相互に連携し、単一の設計アプリケーションとして動作できるようになり、統合されたカスタマイズ可能なユーザーインターフェースが提供されます。この統合プラットフォームは、Altium Designer の既存機能を拡張または強化するモジュールを開発するための、あらかじめ用意された環境を開発者に提供します。
Altium Designer SDK は、Altium Designer 向けのソフトウェア拡張を開発できるようにするソースユニット一式とソースコード例を提供します。Altium Designer には、PCB エディタや Integrated Library サーバーなどの専門機能を提供する、組み込みのソフトウェア拡張が多数あります。さらに、PCB API などの Application Programming Interface(API)を備えた Altium Designer サーバーの機能を強化/拡張するために、別の拡張機能を開発することもできます。
本ドキュメントでは、Altium SDK を使用して Altium Designer 用のソフトウェア拡張サーバーを開発する際の原理と手法を扱い、主に次の 3 部で構成されています。
- Altium Designer のクライアント/サーバー・アーキテクチャとソフトウェア技術の概要
- サンプルプロジェクトのビルドと実行
- プロジェクトの拡張サーバーを Altium Designer にインストールする
プロセスランチャー、メニュー項目、ツールバーを実装して、サンプルプロジェクトを Altium Designer から利用できるように拡張する方法については、Altium Designer への拡張機能の統合 を参照してください。
また本ドキュメントは、
Altium Designer のクライアント/サーバー・アーキテクチャ
Altium Designer は、プラグインのサーバーアプリケーションをホストするクライアントモジュールとして DXP プラットフォームで構成されています。プラグインサーバー(拡張機能)は基本的に、特定のサービスや機能を提供するために必要なアルゴリズムとデータ構造を備え、Altium Designer にインストールされる動的リンクライブラリ(DLL)モジュールです。Altium Designer のクライアント/サーバー・アーキテクチャでは、サーバーモジュール(または単にサーバー)とも呼ばれます。
PCB エディタおよび Schematic エディタはサーバーの例です。これらのサーバーは、ユーザーとシステム間の通信のために Altium Designer のインターフェース要素を利用します。
概念的には、Altium Designer アプリケーション内にブリッジがあり、クライアント側は DXP プラットフォームモジュールで構成されます。ブリッジの反対側のサーバー側は、Workspace Manager システムモジュール、Schematic Editor モジュール、PCB エディタ、追加の拡張サーバーなどで構成されます。WorkSpace Manager モジュールはシステムサーバーであり、たとえば PCB Editor の Hole Size Editor は、PCB Editor の Application Programming Interface を使用して PCB ドキュメント上の PCB オブジェクトを扱えるようにする、アドオンの拡張サーバーです。
Altium Designer のサービス
Altium Designer では、サーバーモジュールは Altium Designer 環境内で専門サービスを提供し、コマンドを介してシステムの Graphical User Interface(GUI)に接続します。
コマンドは、ソフトウェアが一連のタスクを実行するものと考えることができます。このタスクは、モニター上の画面を再描画するような単純なものから、部品表(BOM)レポートを生成するような複雑なものまであります。コマンドは Altium Designer の GUI の基本単位です。コマンドはパッケージ化されたプロセスランチャーであり、Altium Designer 内のリソース項目にリンクされています。たとえば PCB の PCB:Zoom
プロセスランチャーは Altium Designer 内のリソース項目にリンクされ、キー、ツールバーボタン、またはメニュー項目に割り当てることができます。コマンドを起動すると、プロセスランチャーが呼び出されます。基本的に、各サーバーは独自のプロセス一覧を持ちます。これらのプロセスはパラメータとともにプロセスランチャーとしてパッケージ化され、Altium Designer の GUI 内のコマンドにリンクされます。GUI を通じてコマンドが呼び出されるたびに、プロセスランチャーは適切なサーバーへルーティングされます。サーバーはそのプロセスランチャーを、パラメータ付きのプロセス文字列として解釈します。
サーバーが Altium Designer で機能するには、API がリンクされていることに加え、サーバーインストールファイル(拡張子 INS)などの設定ファイルが付属している必要があります。API はサーバーが Altium Designer 環境内で相互作用するために必要なプロトコルを提供し、サーバーインストールファイルはサーバーで利用可能なプロセスの一覧を提供します。
Altium Designer SDK
Altium Designer SDK には API のソースファイルが含まれており、これらをコンパイルしてバンドルすることで、作成したサーバーを Altium Designer 上で動作させることができます。SDK は Altium DXP Developer 拡張の一部としてインストールされ、C:\ProgramData\Altium\Altium Designer {xxx}\Extensions\Altium Developer\SDK
SDK 全般として、特定の機能が必要な場合は、対応するクラスをサーバーコードプロジェクトの EPDUtil.h\SDK\CPP\Source Code
Altium Designer のオブジェクトインターフェース
Altium Designer の設計オブジェクトを表すオブジェクトインターフェースには、メソッドとプロパティが列挙されています(インターフェースによってはメソッドのみが列挙される場合があります)。
- メソッドは、そのインターフェースから呼び出される手続きまたは関数です。オブジェクトインターフェースのメソッドは、そのオブジェクトインターフェースが実行できるアクションです。
- オブジェクトインターフェースのプロパティは変数のようなもので、プロパティの値を取得または設定します。ただし一部のプロパティは読み取り専用で、値を返すことしかできず設定できません。オブジェクトインターフェースのプロパティは、インターフェースが表すオブジェクトに含まれるデータを表します。
たとえば PCB API の SetState_Height()GetState_height()EPD.PCB.Interfaces
オブジェクトモデル階層
Altium Designer のインターフェース用語では、親オブジェクトインターフェースは子オブジェクトインターフェースを持つことができ、さらに子オブジェクトインターフェースが親として振る舞い、子オブジェクトインターフェースを持つこともできます。これによりオブジェクトモデル階層が形成されます。たとえば EDP SDK(EDP.PCB.Interfaces
シートシンボル、コンポーネント、バスなどの設計オブジェクトは、ドキュメントオブジェクト(
- IWorkspace
- IProject
- IDocument
- ISheetSymbol
- IComponent
- IBus
Altium Designer 内のオブジェクトと、Altium Designer SDK の各種 API がサポートするオブジェクトインターフェースとの間には関係があります。
- プロジェクトおよび対応するドキュメントは、Workspace Manager(IWorkspace)によって管理されます。
- Altium Designer で開いているプロジェクトは、IProject オブジェクトインターフェースで表されます。
- このプロジェクトのドキュメントは、IDocument インターフェースで表されます。
PCB ドキュメントおよび PCB 設計オブジェクトは、PCB Editor とその PCB オブジェクトモデルによって管理されます。開いている PCB ドキュメントは
Altium Designer API
Altium Designer SDK には、DXP Platform API と複数のソフトウェア製品 API があります。
- Client API
- Integrated Library API
- WorkSpace Manager API
- Schematic API
- PCB API
以下の図は、Altium Designer アプリケーション内のオブジェクトと、Altium Designer SDK がサポートするオブジェクトインターフェースとの関係を示したものです。ここでは Altium Designer の PCB および Workspace のオブジェクトインターフェースを示しており、プロジェクトと対応するドキュメントは Workspace Manager によって管理されます。Altium Designer で開いているプロジェクトは
Altium Designer における PCB および Workspace のオブジェクトインターフェース。
さらに、PCB ドキュメントには PCB API からアクセスされる PCB オブジェクトがあります。開いている PCB ドキュメントも
PCB API は、サーバープロジェクトで使用するための PCB インターフェースを提供し、プログラマが PCB ドキュメントから PCB オブジェクトおよびその属性を変更できるようにします。例として、EDP.PCB.Interfaces
PCBServer Functions
たとえば Altium Designer で PCB 設計オブジェクトを扱う必要がある場合、出発点は EDP.PCB.ClassesEDP.PCB.Interfaces
-
PCB インターフェースを使用するには、
PCBServer 関数を呼び出してIPCB_ServerInterface オブジェクトを取得する必要があります。IPCB_ServerInterface インターフェースは、他の PCB オブジェクトインターフェースへのゲートウェイです。 -
IPCB_Board インターフェースは、Altium Designer 内の既存の PCB ドキュメントを指します。
SDK example project
SDK を使って Altium Designer 向けの独自ソフトウェア拡張を開発する際の良い出発点は、SDK に付属するサンプルプロジェクトのいずれかを調べ、ビルドしてみることです。
このセクションでは、PCB API を使用して Altium Designer で開かれている PCB 設計ドキュメントとやり取りし、ドキュメント上のパッドオブジェクト数をカウントするサンプルサーバーのビルド手順を案内します。この拡張サーバーは、パッド数をダイアログまたは Altium Designer 内のテキストドキュメントに表示します。
SDK は
コンパイル済みの拡張プロジェクトを Altium Designer にインストールして完全に設定すると、PCB メニューに 3 つの新しいメニュー項目が追加され、さらに新しいフローティングツールバーに 2 つの新しいボタンが追加されます。サンプルをビルドして実行するには、
Setting up the project
ここでは、SDK の Addon サンプルプロジェクトを、Altium Designer 拡張の開発および実装のガイドとして使用します。サンプルは \SDK\CPP\Examples\AddOn Complete
Add-on サンプルの統合構造を読み込むには:
-
Altium Designer で Extension Publishing Document(
)を見つけて開き(Addon.EPDFile » Open )、ファイルフィルタをExtension Publisher files (*.EPD) に設定して、サンプルの フォルダへ移動します。\VS2010 -
DXP Developer インターフェースで、読み込んだ拡張を Altium Designer にインストールします(Install Extension コマンドリンク)。これにより、Altium Designer( )内に対応する拡張フォルダも作成され、プロジェクトの DLL ファイルの配置先になります。\Extensions\AddOn -
Visual Studio でプロジェクトコードを開きます(
DXP Developer インターフェース内のOpen Project コマンドリンク)
Altium Designer 拡張の編集、管理、公開の詳細については Altium DXP Developer を参照してください。
Altium Designer と連携するサーバー DLL をビルドするには、Visual Studio がプロジェクトをコンパイルするために Altium Designer SDK API ファイルを見つけられる必要があります。これらは SDK インストールの \CPP\Source Code
サンプルプロジェクトが、コンパイルされた DLL を Altium Designer の Extensions フォルダ(C:\ProgramData\Altium\Altium Designer {GUID}\Extensions\Addon
必要に応じて、Visual Studio のプロジェクトプロパティを使用して C++ SDK ソースファイルをインクルードし、ビルド出力を正しい extensions フォルダへ向けてください。
ただし他の C++ プロジェクトと同様に、上記のように Altium Designer で拡張を開いてインストールしなくても、プロジェクトを Visual Studio で直接開いて参照情報として確認することは可能です。
Visual Studio 2012
C++ サンプルプロジェクトファイルは Visual Studio 2010 向けに設定されていますが、必要に応じてプロジェクト依存関係として SDK の代替ライブラリファイルを読み込むことで、Visual Studio 2012 でも問題なくコンパイルできます。
Visual Studio 2012 では、プロジェクトを初めて読み込む際に、Visual C++ 2012 のコンパイラとライブラリを使用するようプロジェクトを更新する提案が(ポップアップダイアログで)表示されます。その時点で
その後、更新された Visual Studio のコンパイラとライブラリに合わせて SDK ライブラリファイルを変更できます。プロジェクトの EDP_d.libEPD_2012_d.lib\CPP\Source Code
Visual Studio 2012 の場合、必要に応じて SDK ライブラリを 2012 版に変更してください。
Project and source code files
動的ライブラリリンク(DLL)モジュールとしての拡張サーバーは、Altium Designer API ファイル(ユニット)から構成されます。以下の表で説明するプロジェクトに必須のファイルは、SDK の C++ サンプルプロジェクトのフォルダ構造内に保存されています。
Add-on project files |
Description |
|---|---|
|
DXP Developer 用の AddOn 拡張プロジェクトの Extension Publishing Document。拡張の公開設定やファイルパスなどを指定します。 |
|
C++ プロジェクトファイル。 |
ソースおよび設定ファイルは、サンプルプロジェクトの Installation Source Code
Add-on source files |
Description |
|---|---|
|
サーバーのインストール/コマンドファイル。 |
|
このサーバープロジェクトのリソースファイル。 |
|
サーバープロジェクトのコマンドユニット。このユニットでコマンド(プロセス)も定義します。これは DXP プラットフォームと拡張サーバーの間のインターフェースです。 |
|
このユニットはサーバーの生成と破棄を担当します。コマンドを格納するコマンドテーブルはここで管理されます。 |
|
プロジェクトのレポートダイアログを構成するフォームユニット。 |
その他のファイル: |
プロジェクトフォルダには、プロジェクトを拡張するための追加ファイルが含まれます。追加のソースユニットに加え、表示フォームやアイコンファイルなどが含まれます。 |
サーバー Extension DLL はライブラリモジュールであるため、サーバーの機能の一部を Altium Designer に公開する
このケースでは、サーバープロジェクトの main.cpp
モジュール定義(.def
LIBRARY AddOn.dll EXPORTS PluginFactory
以下のコードスニペットは、Add-on サンプルの Main.cppmain.cppEDPClasses\SDK\Source Code
...snippet1... class CAddOn : public CServerModule { protected: IServerDocument * NewDocumentInstance(const wstring AKind, const wstring AFileName); public: void InitializeCommands(); CAddOn(IClient * const AClient, const wstring AName); }; ...snippet2... HRESULT _stdcall PluginFactory(IClient * const AClient, IDispatch * * pAServerMoudle) { CAddOn * pAddOn = new CAddOn(AClient, L"AddOn"); pAddOn->Initialize(); pAddOn->QueryInterface(IID_IDispatch, (void **)pAServerMoudle); return S_OK; }
まとめると、main.cpp
Server Processes and Server Configuration Files
Server Process は、サーバーが提供する内部コマンドで、Altium Designer のメニュー、ツールバー、ショートカットキーにリンクするプロセスランチャーの要素として使用されます。つまり、各メニュー項目、ツールバーボタン、ホットキーの背後にはプロセスランチャーがあり、これはサーバープロセスをラップし、パラメータ一式と、キャプション文字列などの表示情報を保持します。
メニュー項目を選択したり、ホットキーを押したり、ツールバーボタンをクリックしたりすると、Altium Designer システムは、サーバープロセス識別子文字列とそのパラメータ(存在する場合)を適切なサーバーに渡すことでコマンド(パッケージ化されたプロセスランチャー)を起動し、サーバー側がアクティブなドキュメントに対してそのアクションを実行します。したがって、サーバープロセスは、Altium Designer のメニュー項目、ツールバーボタン、ショートカットキーにリンクされるサーバープロセスランチャーとして実装され、これらはコマンドと呼ばれます。サーバープロセスは、サーバープロジェクトの Commands.cpp
サーバーモジュールとしての拡張機能には一連のサーバープロセスがあり、それらのサーバープロセス識別子は ASCII のインストールファイル(拡張子が INS)に保存されます。繰り返しになりますが、これらのサーバープロセスは、3 種類のユーザーインターフェース要素(リソース)にリンクできるプロセスランチャーとしてラップされています。メニュー項目の構造など、ユーザーインターフェース要素のレイアウトはリソースファイル(拡張子が RCS)で定義されます。 モジュール本体は、Altium Designer SDK の適切な要素を含む動的リンクライブラリ(拡張子 DLL)です。
実際には、一般的なサーバーは 3 つのファイルを持ちます。Add-on の例では、addon.dlladdon.rcsaddon.ins
拡張機能が Altium Designer にインストールされると、コンパイル済みの拡張サーバー(.DLL)、インストールファイル(.INS)、リソースファイル(.RCS)が、Altium Designer の extensions フォルダー内の対応するプロジェクトフォルダーに配置されます。また、Altium Designer のシステム拡張レジストリ(ExtensionsRegistry.xml
Altium Designer の起動時に、サーバーのインストールファイルが読み込まれ、サーバーとそのプロセスの一覧が内部コマンドテーブルに格納されます。 コマンドが実行されると(例:ツールバーボタンのクリック)、Altium Designer はそのボタンがどこにリンクされているかを確認し、サーバー名とコマンド名を用いて、コマンド(プロセスランチャー)を適切なサーバーへルーティングします。サーバーは、ルーティングされたコマンドがサーバーモジュールでサポートされるコマンドテーブルと一致する場合、そのコマンドを実行します。
void Command_CountPads(IServerDocumentView * const View, std::wstring * Parameters) { // Check the parameters passed in std::wstring S; GetState_Parameter(*Parameters, L"DISPLAY", &S); // If Display = True then post results on a text document otherwise post on a dialog. if (UpperCase(S) == L"TRUE") CountPadObjects(true); else CountPadObjects(false); } void Command_RunAPCBProcess(IServerDocumentView * const View, std::wstring * Parameters) { // Check if PCB document exists. If not stop the server. IPCB_ServerInterfacePtr _PCBServer(PCBServer(), false); if (_PCBServer == NULL) return; std::wstring param = L""; RunCommand(L"PCB:BoardInformation", param); }
上記のコードセクションでは、サーバープロセス(内部コマンド)が宣言および実装されています。
-
すべてのコマンドシグネチャには
IServerDocumentView 、Parameters 、View 、wstring の各パラメータがあります。View パラメータは Altium Designer で開かれているサーバードキュメントを表し、Parameters パラメータは Altium Designer 内でサーバーがサポートするコマンドから渡されるパラメータを表します。 -
ユニット内のmain.cppInitializeCommands プロシージャは、 ユニット内のコマンドプロシージャシグネチャ(この場合は CountPads と RunAPCBProcess)と一致している必要があります。commands.cpp -
INS 拡張子のインストールファイルも、
ユニットで定義されたコマンドと一致している必要があります。また、commands.cpp ユニットで定義されたサーバーモジュール名は、インストールファイル内のmain.cppEditorName 文字列(EditorName = 'AddOn'.
の行を含む)と一致している必要があります。インストール構成ファイルの作成および変更の詳細については、Server configuration files ドキュメントを参照してください。
まとめ
- ソフトウェア拡張機能は、Altium Designer でコマンドとして実装される一連のサーバープロセスによってサポートされます。
- Altium Designer のユーザーインターフェース(UI)内のコマンドは、内部サーバーのプロセステーブルにあるプロセスランチャーにリンクされています。
- プロセスランチャーは、名前、プロセス、ビットマップファイル名、キャプション文字列などで構成されます。各プロセスランチャーは、サーバー名とサーバープロセス名をコロンで区切った一意のプロセス識別子で識別されます(例:PCB:BoardInformation)。
- サーバープロセスの一覧は、サーバーインストールファイル(拡張子 INS)で定義されます。
- グラフィカルユーザーインターフェースのレイアウトは、サーバーリソースファイル(拡張子 RCS)で定義されます。
Altium Designer における拡張機能
C++ 開発ツールでサーバープロジェクトを読み込んだ状態で、C:\ProgramData\Altium\Altium Designer {GUID}\Extensions\AddOn
サーバーインストールファイル
一般に、Altium Designer で任意の拡張 DLL を有効化するための基本構成ファイルはサーバーインストールファイルです。これは、拡張プロジェクトの commands.cppmain.cpp
ClientInsFile 1.0 Server EditorName = 'AddOn' EditorExePath = 'AddOn.DLL' EditorDescription = 'Demonstration AddOn module' Version = 'Version 6.3.0.6689' Date = '29-Dec-2012' HelpAboutInfo = 'This software is protected by copyright and international treaties.' Copyright = 'Copyright © Altium Limited 2013' Updates = 'ADVPCB' End Command Name = 'CountPads' LongSummary = 'Find how many pads on a PCB document' End
サーバープロセスを登録する
Altium Designer Extension は、
Addon 拡張機能をテストするには、Altium Designer を起動し、複数のパッドオブジェクトを含む PCB ドキュメントを読み込みます。
Altium Designer でプロセスを実行する
Altium Designer で手動でプロセスを開始するには、
Altium Designer の DXP System メニューからプロセスを実行する
開いた
Altium Designer GUI との統合
Run Process 機能を使って Altium Designer から Add-on 拡張プロジェクトを単に呼び出すという概念を超えて、Altium Designer 内に統合された機能として動作するように拡張することができます。
これは、追加のサーバー構成ファイルを導入し、既存ファイルを変更して、適切なプロセスランチャー、メニュー項目、ツールバーを実装することで行います。実質的には、この処理により新しいリソースが Altium Designer にリンクされます。より具体的には、Add-on のサンプルプロジェクトの場合、PCB Editor 自体にリンクされます。
AddOn 拡張プロジェクトの例には、Altium Designer のメニューに拡張機能のコマンドを統合するために必要なリソースファイル(AddOn.rcs)が含まれています。拡張機能をインストールし、Altium Designer で PCB ファイルを読み込むと、メインメニューに 2 つの AddOn コマンドボタンが表示され、さらに
PCB エディタにサーバーのプロセスランチャーを追加する方法、フローティングツールバーを追加する方法、サーバー内から PCB コマンドを実行する方法の詳細については、以下を参照してください。
追加情報
Altium Designer SDK を使用した拡張サーバーの開発とデプロイの全体像については、An Overview of the Altium SDK を参照してください。
他のソフトウェア拡張機能の例を確認するには、Altium Designer SDK のインストールに含まれる \SDK\CPP\Examples



