> For the complete documentation index, see [llms.txt](https://mp4.gitbook.io/standard/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mp4.gitbook.io/standard/knowledge/bim/dev/razrabotka-plaginov/razmeshenie.md).

# Размещение

{% hint style="info" %}
Перед размещением плагина на ленте для публичного использования необходимо провести тестирование согласно [следующей инструкции](/standard/knowledge/bim/dev/razrabotka-plaginov/testirovanie.md).
{% endhint %}

### Подготовка плагина

1. Для корректного запуска плагина во вкладке необходимо изменить главный класс его вызова и вместо реализации интерфейса IExternalCommand формировать метод, принимающий обязательный аргумент ExternalCommandData.&#x20;

```csharp
// Стандартный запуск (используется для теста)
[Transaction(TransactionMode.Manual)]
public class Main : IExternalCommand
{
    public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
    {
        // код плагина
    }
}
```

```csharp
// Запуск через корпоративные вкладки плагинов
public class Main
{
    public Result Start(ExternalCommandData commandData)
    {
        // код плагина
    }
}
```

2. Создание иконки плагина на ленте происходит с учетом [правил оформления](/standard/knowledge/bim/dev/razrabotka-plaginov/ikonki.md) в Figma.
3. Добавление информации о плагине в [базу данных BIM](/standard/knowledge/bim/dev/baza-dannykh-bim.md), а именно имени, описания, вкладки и пути, с последующим присвоением ему уникального идентификатора плагина (ID).&#x20;

{% hint style="success" %}
Добавление информации в базу данных BIM необходимо для размещения и контроля доступа.
{% endhint %}

### Формирование кнопки

1. Зайти в решение вкладки, загрузив его с [GitHub](/standard/knowledge/bim/dev/github.md);
2. Разместить dll плагина в одноименной папке по пути M:\BIM\05\_Плагины\BIM\_Loader\Tabs\\<Имя вкладки>\Plugins\\<Имя решения>
3. Добавить в решение вкладки в качестве ссылки dll размещаемого плагина и отключить для нее функцию "Копировать локально" в свойствах;
4. Прописать метод запуска плагина с реализацией интерфейса IExternalCommand в классе "Command.cs", например:

```csharp
using NMS = NewManagerSheets;

[Transaction(TransactionMode.Manual)]
[RegenerationAttribute(RegenerationOption.Manual)]
public class NewManagerSheets : IExternalCommand
{
    public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
    {
        new NMS.Main().Start(commandData);
        return Result.Succeeded;
    }
}
```

5. Обработать в классе "App.cs" с помощью switch case доступ пользователя к плагину с помощью указания его идентификатора (ID) в базе данных;
6. Сформировать кнопку и назначить обязательные свойства размещаемой кнопки, например:

```csharp
PushButtonData buttonNewManagerSheets = new PushButtonData("Менеджер листов", "Менеджер\nлистов", thisAssemblyPath, "Tab.NewManagerSheets");
buttonNewManagerSheets.ToolTip = "Плагин для пакетной печати листов в PDF и экспорта в DWG.";
buttonNewManagerSheets.LargeImage = ConvertToBitmapImage.ToBitmapImage(MKS_TAB.Properties.Resources.ManagerSheets);
buttonNewManagerSheets.SetContextualHelp(new ContextualHelp(ContextualHelpType.Url, "https://mp4.gitbook.io/standard/knowledge/plugins/shared/menedzher-listov"));
// Добавляем на панель и управляем доступностью
PushButton NewManagerSheets = specListPanel.AddItem(buttonNewManagerSheets) as PushButton;
NewManagerSheets.Enabled = availibility;
```

* ToolTip – краткое описание функционала, отображающееся при наведении и удержании курсора на кнопке.
* Image/LargeImage – свойство для хранения иконки (маленькой/большой) назначается в зависимости от размера кнопки. Для больших кнопок рекомендуется назначать оба свойства для случая размещения иконки в панели быстрого доступа.
* ContextualHelp - указывает ссылку для перехода при нажатии кнопки F1 при удержании курсора на кнопке.

{% hint style="info" %}
Для сложных плагинов, требующих для понимания работы более подробных разъяснений, чем краткая подсказка ToolTip, требуется формирование инструкции в информационном пространстве данного раздела с указанием ссылки на данную инструкцию в свойстве кнопки "ContextualHelp".
{% endhint %}

7. Переместить собранный dll вкладки все данные сборки из папки "debug" на диск М по пути M:\BIM\05\_Плагины\BIM\_Loader\Tabs\\<Имя вкладки>\Data
8. Сформировать commit и отправить изменения в удаленный репозиторий GitHub;
9. Перезапустить все сеансы Revit и проверить отображение и внешний вид новой кнопки.
