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 への拡張機能の統合 を参照してください。

また本ドキュメントは、Microsoft Visual Studio™ 開発ツールおよび .NET Framework Library の使用に習熟しており、クラスやアセンブリの使用など C++ のプログラミング手法を理解していることを前提としています。

SDK で開発されたソフトウェアモジュールは、本ドキュメントでは一般に Extension または Server と呼びます。ただし、ソフトウェア拡張は、その機能や Altium Designer との統合方法に応じて、複数の形態で実装できます。

ソフトウェア拡張は、設計エディタのアドオン、設計ファイルのエディタ、出力ジェネレータ、ワークスペース拡張などとして動作できます。いずれも Altium Designer のクライアント/サーバー・アーキテクチャにおけるサーバーとして動作し、その機能を「拡張」するため、「拡張(extension)」と呼ばれます。以下のサンプルプロジェクトで開発するソフトウェア拡張は、PCB Editor のアドオンとして動作します。

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 の View » Area メニュー項目は、PCB:Zoom プロセスランチャーを持つ PCB コマンドです。

プロセスランチャーは 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 フォルダ内にあります。ここで xxx は、現在の Altium Designer インストールに対する GUID 参照です。

SDK 全般として、特定の機能が必要な場合は、対応するクラスをサーバーコードプロジェクトの #include 句として追加する必要があります。たとえば MessageRouter_SendCommandToModule 手続きを使用するには、SDK の EPDUtil ソースヘッダー(EPDUtil.h)を include 句に追加する必要があります。そうしないと Visual Studio コンパイラはプロジェクトのビルドに失敗し、Output ウィンドウに致命的なリンクエラーメッセージを報告します。変数およびオブジェクトの宣言/インターフェースを確認するには、\SDK\CPP\Source Code フォルダ内のファイルを参照してください。

Altium Designer のオブジェクトインターフェース

Altium Designer の設計オブジェクトを表すオブジェクトインターフェースには、メソッドとプロパティが列挙されています(インターフェースによってはメソッドのみが列挙される場合があります)。

  • メソッドは、そのインターフェースから呼び出される手続きまたは関数です。オブジェクトインターフェースのメソッドは、そのオブジェクトインターフェースが実行できるアクションです。
  • オブジェクトインターフェースのプロパティは変数のようなもので、プロパティの値を取得または設定します。ただし一部のプロパティは読み取り専用で、値を返すことしかできず設定できません。オブジェクトインターフェースのプロパティは、インターフェースが表すオブジェクトに含まれるデータを表します。

たとえば PCB API の IPCB_Component インターフェースには Height プロパティと、それに関連する 2 つのメソッド(SetState_Height()GetState_height())があります。IPCB_Component の宣言は Altium Designer SDK の PCB API に由来し、EPD.PCB.Interfaces ソースユニットのメンバーです。

オブジェクトモデル階層

Altium Designer のインターフェース用語では、親オブジェクトインターフェースは子オブジェクトインターフェースを持つことができ、さらに子オブジェクトインターフェースが親として振る舞い、子オブジェクトインターフェースを持つこともできます。これによりオブジェクトモデル階層が形成されます。たとえば EDP SDK(EDP.PCB.Interfaces source)では、IWorkspace オブジェクトインターフェースが Altium Designer の Workspace manager を表す最上位インターフェースです。プロジェクトは Workspace Manager の一部であるため、IProject インターフェースは親である IWorkspace インターフェースの子インターフェースです。

シートシンボル、コンポーネント、バスなどの設計オブジェクトは、ドキュメントオブジェクト(IDocument インターフェースで表される)の子オブジェクトです。これは以下の単純な階層例で示されます。

  • 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 ドキュメントは IPCB_Board インターフェースで表され、設計オブジェクト(たとえばパッドオブジェクトやトラックオブジェクト)は IPCB_Pad および IPCB_Track インターフェースで表されます。

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 で開いているプロジェクトは IProject オブジェクトインターフェースで表され、このプロジェクトのドキュメントは IDocument インターフェースで表されます。

Altium Designer における PCB および Workspace のオブジェクトインターフェース。

さらに、PCB ドキュメントには PCB API からアクセスされる PCB オブジェクトがあります。開いている PCB ドキュメントも IPCB_Board インターフェースで表され、設計オブジェクト(たとえばパッドオブジェクトやトラックオブジェクト)はそれぞれ IPCB_Pad および IPCB_Track インターフェースで表されます。

PCB API は、サーバープロジェクトで使用するための PCB インターフェースを提供し、プログラマが PCB ドキュメントから PCB オブジェクトおよびその属性を変更できるようにします。例として、 IPCB_Pad 構造体は EDP.PCB.Interfaces ソース内にあり、これは多くの SDK サンプルプロジェクトで読み込まれる多数のクラス依存関係の 1 つです。

PCBServer Functions

たとえば Altium Designer で PCB 設計オブジェクトを扱う必要がある場合、出発点は PCBServer 関数(EDP.PCB.Classes ソースユニット参照)を呼び出すことです。返される IPCB_ServerInterface インターフェース(EDP.PCB.Interfaces ソース)を使うと、IPCB_ServerInterface インターフェースで公開されている、派生した他のすべての PCB インターフェースを取り出せます。たとえば現在の PCB ドキュメントにアクセスするには、プログラムコードで IPCB_ServerInterface インターフェースオブジェクトの GetCurrentPCBBoard メソッドを呼び出します。

  • 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 内のテキストドキュメントに表示します。

新しい拡張プロジェクトを開始する(または既存のものを編集する)推奨方法は、Altium Designer で新規または既存の Extension Publishing Document(EPD)を開くことです。ここでは DXP Developer インターフェースが、Altium Designer 拡張の作成、編集、インストール、公開の中心点として機能します。

SDK は Altium DXP Developer 拡張とともにインストールされ、C++ SDK は C:\ProgramData\Altium\Altium Designer {xxx}\Extensions\Altium Developer\SDK\CPP フォルダにあります。

コンパイル済みの拡張プロジェクトを Altium Designer にインストールして完全に設定すると、PCB メニューに 3 つの新しいメニュー項目が追加され、さらに新しいフローティングツールバーに 2 つの新しいボタンが追加されます。サンプルをビルドして実行するには、Microsoft Visual Studio 開発ツール(2010 以上)のコピーが必要です。

Visual Studio Express エディションは、より高機能な Visual Studio 開発スイートに対する低コストの代替手段です。

Setting up the project

 

ここでは、SDK の Addon サンプルプロジェクトを、Altium Designer 拡張の開発および実装のガイドとして使用します。サンプルは \SDK\CPP\Examples\AddOn Complete フォルダ(SDK のインストール先に依存)にあります。このフォルダには、他にもいくつかのファイルが含まれますが、少なくとも下の table further below に示すファイルが含まれているはずです。

Add-on サンプルの統合構造を読み込むには:

  1. Altium Designer で Extension Publishing Document(Addon.EPD)を見つけて開き(File » Open)、ファイルフィルタを Extension Publisher files (*.EPD) に設定して、サンプルの \VS2010 フォルダへ移動します。
  2. DXP Developer インターフェースで、読み込んだ拡張を Altium Designer にインストールします(Install Extension コマンドリンク)。これにより、Altium Designer(\Extensions\AddOn)内に対応する拡張フォルダも作成され、プロジェクトの DLL ファイルの配置先になります。
  3. Visual Studio でプロジェクトコードを開きます(DXP Developer インターフェース内の Open Project コマンドリンク)

Altium Designer 拡張の編集、管理、公開の詳細については Altium DXP Developer を参照してください。

Visual Studio のプロジェクトファイルを再保存すると、SDK インストール自体に含まれるサンプルソースファイルが上書きされる点に注意してください。インストール済みのサンプルを参照用としてそのまま残したい場合は、Add-on プロジェクトとソースファイルを別の場所(例: C:\Users\Public\Documents\Altium\AD14\Extensions。ここには新しい DXP Developer 拡張プロジェクトが追加されます)にコピーしてください。

Altium Designer と連携するサーバー DLL をビルドするには、Visual Studio がプロジェクトをコンパイルするために Altium Designer SDK API ファイルを見つけられる必要があります。これらは SDK インストールの \CPP\Source Code フォルダにあります。API ソースパスやコンパイラ出力パスを Visual Studio で定義する必要がある場合は、プロジェクトの Property Pages ダイアログ(Project » Properties)を開き、適切な設定を変更してください。

サンプルプロジェクトが、コンパイルされた DLL を Altium Designer の Extensions フォルダ(Configuration Properties | General)内の対応フォルダ(この場合は C:\ProgramData\Altium\Altium Designer {GUID}\Extensions\Addon)へ書き込むように設定されていることを確認してください。SDK の C++ ソースファイルへのパスは、Properties ダイアログの Configuration Properties | VC++ Directories セクションで確認できます。

必要に応じて、Visual Studio のプロジェクトプロパティを使用して C++ SDK ソースファイルをインクルードし、ビルド出力を正しい extensions フォルダへ向けてください。

DXP Developer(上記 step 2)を通じて拡張をインストールするプロセスでは、Altium Designer のインストールのフォルダ構造に合わせて Visual Studio のプロジェクトファイルが事前設定されます。これにより、正しいソースコードおよび出力ファイルのパスがあらかじめ確立され、Visual Studio でプロジェクトプロパティを手動設定する必要がなくなります。

ただし他の C++ プロジェクトと同様に、上記のように Altium Designer で拡張を開いてインストールしなくても、プロジェクトを Visual Studio で直接開いて参照情報として確認することは可能です。

Visual Studio 2012

C++ サンプルプロジェクトファイルは Visual Studio 2010 向けに設定されていますが、必要に応じてプロジェクト依存関係として SDK の代替ライブラリファイルを読み込むことで、Visual Studio 2012 でも問題なくコンパイルできます。

Visual Studio 2012 では、プロジェクトを初めて読み込む際に、Visual C++ 2012 のコンパイラとライブラリを使用するようプロジェクトを更新する提案が(ポップアップダイアログで)表示されます。その時点で Don't Update オプションを選択した場合でも、後から PROJECT » Update VC++ projects... メニューコマンドで更新できます。

その後、更新された Visual Studio のコンパイラとライブラリに合わせて SDK ライブラリファイルを変更できます。プロジェクトの Properties Pages ダイアログで Configuration Properties | Linker | Input に移動し、Additional Dependencies の項目を EDP_d.lib から EPD_2012_d.lib に変更します。これは \CPP\Source Code フォルダ内の、2012 でコンパイルされた代替ライブラリファイルです。

Visual Studio 2012 の場合、必要に応じて SDK ライブラリを 2012 版に変更してください。

Project and source code files

動的ライブラリリンク(DLL)モジュールとしての拡張サーバーは、Altium Designer API ファイル(ユニット)から構成されます。以下の表で説明するプロジェクトに必須のファイルは、SDK の C++ サンプルプロジェクトのフォルダ構造内に保存されています。

Add-on project files

Description

AddOn.EPD

DXP Developer 用の AddOn 拡張プロジェクトの Extension Publishing Document。拡張の公開設定やファイルパスなどを指定します。

AddOn.vcxproj

C++ プロジェクトファイル。

ソースおよび設定ファイルは、サンプルプロジェクトの Installation および Source Code フォルダに保存されています:

Add-on source files

Description

AddOn.Ins

サーバーのインストール/コマンドファイル。

AddOn.rcs

このサーバープロジェクトのリソースファイル。

Commands.cpp

サーバープロジェクトのコマンドユニット。このユニットでコマンド(プロセス)も定義します。これは DXP プラットフォームと拡張サーバーの間のインターフェースです。

Main.cpp

このユニットはサーバーの生成と破棄を担当します。コマンドを格納するコマンドテーブルはここで管理されます。

ReportForm.cpp

プロジェクトのレポートダイアログを構成するフォームユニット。

その他のファイル:

プロジェクトフォルダには、プロジェクトを拡張するための追加ファイルが含まれます。追加のソースユニットに加え、表示フォームやアイコンファイルなどが含まれます。

サーバー Extension DLL はライブラリモジュールであるため、サーバーの機能の一部を Altium Designer に公開する Exports ディレクティブがあります(以下の Add-on サンプルプロジェクトのリスト参照)。

このケースでは、サーバープロジェクトの PlugInFactory ルーチンがインスタンス化されると、DXP プラットフォームに公開されます。このルーチンは main.cpp ユニットで定義されています。DXP プラットフォームを表す IClient オブジェクトインターフェースを受け取り、同じルーチンが、Altium Designer を終了するまでメモリ上に保持される単一のユニークなサーバーモジュールを作成します。

モジュール定義(.def)ファイルは、DLL がエクスポートする PlugInFactory 関数を記述するために使用されます。

AddOn.def

LIBRARY  AddOn.dll
 
EXPORTS
    PluginFactory

以下のコードスニペットは、Add-on サンプルの Main.cpp ユニットを参照しています。このユニットでは、PluginFactory 呼び出しからサーバーモジュールがインスタンス化され、Altium Designer 内でのインターフェース処理が行われます(snippet1 参照)。main.cpp ユニットは CServerModule オブジェクトを定義しており、これは拡張サーバーを表すメインオブジェクトです(snippet2)。EDPClasses ソースユニット内の CServerModule クラスのメソッドとフィールドは、\SDK\Source Code フォルダのものです。

Main.cpp snippets

...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 ユニットはサーバーモジュール/拡張の作成を扱い、サーバープロセステーブル(コマンドテーブル)を設定します。その PluginFactory プロシージャはサーバー名を Altium Designer に渡します。

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.dll、リソースファイル addon.rcs、インストールファイル addon.ins です。

拡張機能が Altium Designer にインストールされると、コンパイル済みの拡張サーバー(.DLL)、インストールファイル(.INS)、リソースファイル(.RCS)が、Altium Designer の extensions フォルダー内の対応するプロジェクトフォルダーに配置されます。また、Altium Designer のシステム拡張レジストリ(ExtensionsRegistry.xml)にもエントリが追加されます。 その後、Altium Designer はこの新しいサーバーとそのプロセス(内部コマンド)を自動的に有効化し、すぐに使用できる状態になります。

Altium Designer の起動時に、サーバーのインストールファイルが読み込まれ、サーバーとそのプロセスの一覧が内部コマンドテーブルに格納されます。 コマンドが実行されると(例:ツールバーボタンのクリック)、Altium Designer はそのボタンがどこにリンクされているかを確認し、サーバー名とコマンド名を用いて、コマンド(プロセスランチャー)を適切なサーバーへルーティングします。サーバーは、ルーティングされたコマンドがサーバーモジュールでサポートされるコマンドテーブルと一致する場合、そのコマンドを実行します。

Commands.cpp snippets

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);
}

上記のコードセクションでは、サーバープロセス(内部コマンド)が宣言および実装されています。

  • すべてのコマンドシグネチャには IServerDocumentViewParametersViewwstring の各パラメータがあります。View パラメータは Altium Designer で開かれているサーバードキュメントを表し、 Parameters パラメータは Altium Designer 内でサーバーがサポートするコマンドから渡されるパラメータを表します。
  • main.cpp ユニット内の InitializeCommands プロシージャは、commands.cpp ユニット内のコマンドプロシージャシグネチャ(この場合は CountPads と RunAPCBProcess)と一致している必要があります。
  • INS 拡張子のインストールファイルも、commands.cpp ユニットで定義されたコマンドと一致している必要があります。また、main.cpp ユニットで定義されたサーバーモジュール名は、インストールファイル内の EditorName 文字列(EditorName = 'AddOn'.

まとめ

  • ソフトウェア拡張機能は、Altium Designer でコマンドとして実装される一連のサーバープロセスによってサポートされます。
  • Altium Designer のユーザーインターフェース(UI)内のコマンドは、内部サーバーのプロセステーブルにあるプロセスランチャーにリンクされています。
  • プロセスランチャーは、名前、プロセス、ビットマップファイル名、キャプション文字列などで構成されます。各プロセスランチャーは、サーバー名とサーバープロセス名をコロンで区切った一意のプロセス識別子で識別されます(例:PCB:BoardInformation)。
  • サーバープロセスの一覧は、サーバーインストールファイル(拡張子 INS)で定義されます。
  • グラフィカルユーザーインターフェースのレイアウトは、サーバーリソースファイル(拡張子 RCS)で定義されます。

Altium Designer における拡張機能

C++ 開発ツールでサーバープロジェクトを読み込んだ状態で、Project » Build Addon メニューから Build コマンドを実行すると、適切な Altium Designer 拡張フォルダーに動的リンクライブラリ(DLL)ファイルが生成されます。前述の Project Setup セクションで述べたとおり、AddOn 拡張機能の例では、DXP Developer インターフェースで初回インストール処理により作成された C:\ProgramData\Altium\Altium Designer {GUID}\Extensions\AddOn フォルダーがこれに該当します。

サーバーインストールファイル

一般に、Altium Designer で任意の拡張 DLL を有効化するための基本構成ファイルはサーバーインストールファイルです。これは、拡張プロジェクトの commands.cpp および main.cpp ユニットで宣言・定義されたサーバープロセスを反映している必要があります。Command Name 句には、他のユニットで定義されたコマンド(例:AddOn プロジェクトの場合は CountPads)を含める必要があります。以下に示すとおりです。

Installation file: AddOn.ins

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 は、Altium DXP Developer インターフェースを介してインストールおよび登録できます。これにより、対応する Extension Publishing Document(EPD)が読み込まれるか作成されます。Developer インターフェースで Addon のサンプルプロジェクトを登録すると、Altium Designer はこの新しい拡張機能を自動的に取り込みます。これで、そのプロセス(内部コマンド)を Altium Designer で使用できるようになります。

Addon 拡張機能をテストするには、Altium Designer を起動し、複数のパッドオブジェクトを含む PCB ドキュメントを読み込みます。

Altium Designer でプロセスを実行する

Altium Designer で手動でプロセスを開始するには、DXP System menu から Run Process コマンドを実行します。

Altium Designer の DXP System メニューからプロセスを実行する

開いた Run Process ダイアログで、Browse ボタンを使用して一覧から Add-on 拡張機能(AddOn:CountPads)を選択し、OK をクリックしてから、さらに OK をクリックしてサーバープロセスを実行します。Add-on 拡張機能は PCB ドキュメントの存在を確認し、そのドキュメント上のパッド数をカウントします。見つかったパッドオブジェクト数は表示されるか、テキストドキュメントに書き出されます。

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 コマンドボタンが表示され、さらに View menu の下に Addon Menu エントリが追加されていることに注意してください。

PCB エディタにサーバーのプロセスランチャーを追加する方法、フローティングツールバーを追加する方法、サーバー内から PCB コマンドを実行する方法の詳細については、以下を参照してください。

追加情報

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