Краткое руководство по началу работы с SDK Altium Designer
SDK для Altium Designer позволяет создавать пользовательские расширения, которые интегрируются непосредственно в Altium Designer — добавляют команды, автоматизируют рабочие процессы и предоставляют доступ к данным проекта через управляемый API .NET.
В этом руководстве показано, как установить инструменты разработки, создать проект расширения, добавить команду и запустить ее в Altium Designer.
Предварительные требования
-
Регистрация в Altium Developer Center — требуется для получения доступа к SDK Altium Designer и его расширениям
-
IDE с поддержкой .NET (Visual Studio или VS Code с поддержкой C#)
Шаг 1: Установите расширение Altium Developer
Расширение Altium Developer добавляет шаблоны проектов и инструменты SDK непосредственно в Altium Designer.
-
В Altium Designer перейдите в Extensions and Updates → Available.
-
В разделе Software Extensions найдите Altium Developer.
-
Установите расширение, затем перезапустите Altium Designer, когда появится соответствующий запрос.
Шаг 2: Создайте новый проект расширения
-
В Altium Designer перейдите в File → New → Other → Extension.
-
Extension ID:
ShowNetsExtension -
Extension Kind:
Altium Designer Server -
Development Language:
C# -
IDE Version:
latest -
SDK Version:
latest
-
-
После создания расширения Altium Designer отобразит сведения о нем. Обратите внимание на Source Location — откройте файл
.csprojпо этому пути в вашей IDE.
Шаг 3: Добавьте свою первую команду
Откройте Source Code\Commands.cs и добавьте следующие методы в класс Commands :
/// <summary>
/// Определяет состояние enabled/visible для команды "Show Nets" в Altium Designer.
/// </summary>
/// <param name="argContext">Текущий контекст представления документа сервера.</param>
/// <param name="argParameters">Параметры команды (не используются).</param>
/// <param name="argEnabled">Установите true, если команда должна быть доступна.</param>
/// <param name="argChecked">Установите true, если команда должна отображаться как отмеченная (не используется).</param>
/// <param name="argVisible">Установите true, если команда должна быть видимой (не используется).</param>
/// <param name="argCaption">Заголовок команды (не используется).</param>
/// <param name="argImageFile">Файл изображения команды (не используется).</param>
public static void GetState_ShowNets(IServerDocumentView argContext, ref string argParameters, ref bool argEnabled,
ref bool argChecked, ref bool argVisible, ref string argCaption, ref string argImageFile)
{
// Получаем текущий активный проект из рабочей области Altium Designer.
var project = DXP.GlobalVars.DXPWorkSpace.DM_FocusedProject() as IProject;
// Если проект нужно скомпилировать (например, список соединений устарел), компилируем его.
if (project?.DM_NeedsCompile() == true)
project.DM_Compile();
// Включаем команду только в том случае, если активен корректный проект и это не проект "Free Documents".
argEnabled = project != null && !IsFreeDocumentsProject(project);
}
/// <summary>
/// Обработчик команды для отображения всех имен цепей в текущем схематическом документе или проекте.
/// </summary>
/// <param name="view">Текущее представление документа сервера.</param>
/// <param name="parameters">Параметры команды (не используются).</param>
public static void Command_ShowNets(IServerDocumentView view, ref string parameters)
{
// Получаем текущий активный проект из Altium Designer.
var project = DXP.GlobalVars.DXPWorkSpace.DM_FocusedProject() as IProject;
if (project == null || IsFreeDocumentsProject(project))
return;
string documentName;
// Получаем текущий активный документ (например, лист схемы).
var document = DXP.GlobalVars.DXPWorkSpace.DM_FocusedDocument() as IDocument;
if (document == null)
{
// Если активного документа нет, убеждаемся, что проект скомпилирован, и используем документ развернутого проекта.
if (project.DM_NeedsCompile()) project.DM_Compile();
document = project.DM_DocumentFlattened();
documentName = "Проект";
}
else
{
// Продолжаем только в том случае, если активный документ является схемой (DocKindSch).
if (document.DM_DocumentKind() != EDPConstant.DocKindSch) return;
documentName = document.DM_FileName();
}
// Перебираем все цепи в документе, получаем их полные имена и сортируем их по алфавиту.
var netNames = Enumerable.Range(0, document.DM_NetCount())
.Select(document.DM_Nets)
.Select(net => net.DM_FullNetName())
.OrderBy(name => name);
// Отображаем список имен цепей в информационном диалоговом окне внутри Altium Designer.
DXP.Utils.ShowInfo(string.Join(Environment.NewLine, netNames), $"Цепи [{documentName}]");
}
/// <summary>
/// Проверяет, является ли указанный проект специальным проектом "Free Documents" в Altium Designer.
/// </summary>
/// <param name="project">Проверяемый проект.</param>
/// <returns>True, если проект является проектом Free Documents; в противном случае — false.</returns>
private static bool IsFreeDocumentsProject(IProject project)
{
return project == DXP.GlobalVars.DXPWorkSpace.DM_FreeDocumentsProject();
}
Откройте Source Code\Main.cs и зарегистрируйте команду в классе PluginServerModule:
protected override void InitializeCommands()
{
((CommandLauncher)CommandLauncher).RegisterCommand("ShowNets", Commands.Command_ShowNets, Commands.GetState_ShowNets);
}
Соберите проект, чтобы установить расширение.
Шаг 4: Запустите свою команду в Altium Designer
-
Запустите Altium Designer.
-
Щелкните правой кнопкой мыши по любой панели инструментов и выберите Customize…
-
В разделе Commands нажмите New… и настройте следующее:
-
Process:
ShowNetsExtension:ShowNets -
Caption:
ShowNets
-
-
Перетащите новую команду на панель инструментов.
-
Нажмите команду — должно появиться диалоговое окно со списком цепей.
Следующие шаги
-
Изучите документацию Altium Designer SDK по интерфейсам для схем, PCB layout, компонентов и многого другого.
-
Ознакомьтесь с примерами расширений и демоверсиями в организации GitHub AltiumDeveloper.