Существует два способа создания программных модулей для Altium Designer:
После установки расширения в меню File появится дополнительный раздел (рис.1), с помощью которого можно создать собственный Extension и зарегистрировать его.
Для написания программы с помощью SDK необходимо использовать любое доступное средство для разработки под конкретный язык, например Borland Delphi при использовании языка Delphi или Visual Studio для языка C#. В каждом случае при создании собственной программы необходимо использовать SDK под конкретный язык.
Версий SDK на данный момент существует 5 версий:
SDK 1.0 - для Altium Designer 14.2 + и выше;
SDK 2.0 - для Altium Designer 15+ и выше;
SDK 3.0 - для Altium Designer 16+ и выше;
SDK 3.1 - для Altium Designer 17+ и выше;
SDK 4.0 - для Altium Designer 18 и выше.
Используя SDK и методы конкретной версии необходимо учитывать, что ваша программа может не работать на старых версиях Altium Designer, при использовании того функционала, который отсутствует в конкретной версии Altium Designer.
Используя меню Extension, необходимо подключить созданный проект на любом доступном языке, задать имя будущего плагина, назначить иконку и другие параметры. Подробнее о формировании Extension можно ознакомиться на сайте Altium [1].Итогом создания прикладной программы с помощью SDK является библиотека dll, которая будет встроена в Altium Designer как обычный Extension и будет загружаться в систему при каждом запуске. Запуск программы будет зависеть от реализации проекта – это может быть кнопка в панели инструментов, отдельная панель или масштабный модуль, затрагивающий множество функциональных возможностей Altium Designer. Использование SDK – метод, требующий хороших навыков программирования и умения разбираться в сторонних библиотеках для извлечения и использования нужных методов для реализации необходимых прикладных задач. Менее трудоемким процессом создания прикладных программ является использование API.
Использование Altium Designer API
API – интерфейс для создания скриптов средствами самого Altium Designer, в отличии от SDK при этом не требуется сторонних компиляторов для формирования dll библиотеки, не требуется создания Extension и подключения его. Для запуска и исполнения скрипта необходимо в меню File \ Run Script указать нужный проект с созданной программой и указать исполняемый файл с кодом программы.
Для создания прикладной программы (скрипта) с помощью API в Altium Designer необходимо создать проект PrjScr через меню File. Затем в данный проект необходимо вставить Script Form и после этого можно приступать к созданию программы. Используя API, сам код и интерфейс скрипта разрабатывается средствами встроенного интерфейса (рис.2). В нижней части рабочей области есть кнопки переключения между визуальной частью скрипта (Form) и исполняемым кодом (Code).
При использовании API есть описание всех необходимых интерфейсов Altium в документации на сайте [2]. Для некоторых приемов в документации приведены примеры использования.Весь предоставленный программный интерфейс разделен на несколько разделов:- System API (работа с файлами)- Integrated Library API (работа с библиотеками)- FPGA API (работа с FPGA моделями)- PCB API (работа с PCB редактором)- Schematic API (работа со схемотехническим редактором)
- Workspace Manager API (работа с проектами)
В каждом из разделов есть свой набор интерфейсов со своими методами.
Для создания графического интерфейса скрипта используется панель Tool Palette, в которой есть стандартные визуальные WindowsForms примитивы для отображения в окне программы. Все вставленные объекты в форму в редакторе кода можно обрабатывать и по различным действиям на объекты производить определенный набор необходимых действий. После завершения написания скрипта команду его запуска можно внедрить во вновь созданную строчку меню или кнопку в панели инструментов, для этого в меню Edit Command редактирования кнопки необходимо вставить:
Process : ScriptingSystem:RunScript
Parameters : ProjectName=[имя проекта]|ProcName=[файл кода].pas>[имя метода]
Примеры реализации скрипта
В качестве примера приводим код скрипта на языке Delphi с использованием API и на языке c# с использованием SDK. Программа выполняет поиск переходных отверстий на плате, координаты которых не кратны текущей координатной сетке и накладывает на такие отверстия маску, тем самым скрывая все остальные примитивы плат. Результат выполнения скрипта представлен на рис.3.
Следующий пример создан на языке Delphi, используя API и можно повторить, создав следующий файл viagrid.pas, внеся в него следующий код и вызвал через меню File – Run Script:function viagrid;varBoard : IPCB_Board;Iter : IPCB_BoardIterator;Via : IPCB_Via;grid, x, y : double;beginBoard := PCBServer.GetCurrentPCBBoard;
If Board = Nil then exit;
ResetParameters;
AddStringParameter('Scope','All');
RunProcess('PCB:DeSelect');
Iter := Board.BoardIterator_Create;
Iter.AddFilter_ObjectSet(MkSet(eViaObject));
Iter.AddFilter_AllLayers;
Via := Iter.FirstPCBObject;
While (Via <> nil) do begin
x := roundto(coordtomms(Via.x-Board.BoardOutline.BoundingRectangle.Left),-3);
y := roundto(coordtomms(Via.y-Board.BoardOutline.BoundingRectangle.Bottom),-3);
grid := roundto(coordtomms(Board.ComponentGridSize),-3);
if ((frac(x / grid) <> 0) or (frac(y / grid) <> 0))
then Via.Selected := True;
Via := Iter.NextPCBObject;
end;
Board.BoardIterator_Destroy(Iter);
Client.PostMessage('PCB:RunQuery','Apply=True|Expr=IsSelected|Mask=True',
Length('Apply=True|Expr=IsSelected|Mask=True'), Client.CurrentView);
end;
Пример реализации той же программы на языке c# с использованием SDK:
public void Command_Viagrid(IServerDocumentView view, ref string parameters)
{
IPCB_ServerInterface pcbServer = PCB.GlobalVars.PCBServer;
if (pcbServer == null) return;
IPCB_Board pcbBoard = pcbServer.GetCurrentPCBBoard();
if (pcbBoard == null) return;
DXP.Utils.RunCommand("PCB:DeSelect", "Scope=All");
var boundingRect = pcbBoard.GetState_BoardOutline().BoundingRectangle();
var gridSize = (int)pcbBoard.GetState_ComponentGridSize();
var delta = EDP.Utils.MMsToCoord(0.001);
IPCB_BoardIterator iterator = pcbBoard.BoardIterator_Create();
iterator.AddFilter_ObjectSet(new PCB.TObjectSet(PCB.TObjectId.eViaObject));
iterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet);
iterator.AddFilter_Area(boundingRect.Left, boundingRect.Bottom, boundingRect.Right, boundingRect.Top);
IPCB_Primitive pcbObject = iterator.FirstPCBObject();
while (pcbObject != null)
{
if (pcbObject is IPCB_Via via
&& (via.GetState_XLocation() % gridSize > delta
|| via.GetState_XLocation() % gridSize > delta))
via.SetState_Selected(true);
pcbObject = iterator.NextPCBObject();
}
pcbBoard.BoardIterator_Destroy(ref iterator);
DXP.Utils.RunCommand("PCB:RunQuery",
"Apply=True|Expr=IsSelected|Mask=True|Select=True");
}
Оба данных примера доступны для общего пользования в публичном репозитории по адресу https://github.com/glavkondev.
Заключение
Открытые средства для разработки прикладных программ для Altium Desinger позволяют решить любые возникающие у пользователей подзадачи. В руках программистов данные средства могут значительно увеличить эффективность работы с системой проектирования для рядовых пользователей. Скрипты и плагины могут быть различной сложности от обычного вывода справочной информации до сложных интеграционных систем, позволяющих обеспечить связь Altium Designer с другими внедренными на предприятии системами.
За всю историю развития Altium Designer инженерами-энтузиастами были написано множество прикладных программ и скриптов, решающих конкретные узконаправленные задачи. Множество из них находится в открытом доступе [3], их можно установить, модифицировать и использовать для решения любых возникающих задач.
Реализованные проекты
Компания Главкон испольуя API и SDK, реализовала следующие проекты:
Board Assistant - программный комплекс, разработан с целью автоматизировать процесс проектирования, а именно выпуск конструкторской и схемотхенической документации по ЕСКД.