Алексей, добрый день.
Все очень просто.
Файл манифеста предназначен для описания вашего расширения. Именно из файла манифеста Revit узнает о вашей надстройке.
При старте Revit происходит поиск файла c расширением addin в соответствующих папках, читает из них информацию и загружает вашу надстройку.
В надстройке вы можете создать два типа класса:
- Класс, реализующий интерфейс IExternalApplication
- Класс, реализующий интерфейс IExtefnalCommand
Таких классов в одной надстройке может быть несколько. Но чтобы Revit знал об их существовании, их нужно описать в файле манифеста.
Типичный файл манифеста выглядит примерно так:
<?xml version="1.0" encoding="utf-8"?>
<RevitAddIns>
<AddIn Type="Command">
<Text>Command RevitTemp</Text>
<Description>Some description for RevitTemp</Description>
<Assembly>RevitTemp.dll</Assembly>
<FullClassName>RevitTemp.Command</FullClassName>
<ClientId>69529763-1ebd-4139-938b-bc0318a656b0</ClientId>
<VendorId>TBC_</VendorId>
<VendorDescription>The Building Coder, http://thebuildingcoder.typepad.com</VendorDescription>
</AddIn>
<AddIn Type="Application">
<Name>Application RevitTemp</Name>
<Assembly>RevitTemp.dll</Assembly>
<FullClassName>RevitTemp.App</FullClassName>
<ClientId>0b1c0fcb-e87e-4ce4-9355-c6187223ad41</ClientId>
<VendorId>TBC_</VendorId>
<VendorDescription>The Building Coder, http://thebuildingcoder.typepad.com</VendorDescription>
</AddIn>
</RevitAddIns>
В типе
Application, необходимо указать название класса, реализующего интерфейс
IExternalApplication. Этот интерфейс содержит 2 метода:
OnStartup и
OnShutdown.
Метод
OnStartup выполняется при запуске Revit. Или если быть точнее, после того как Revit прочитал информацию из файла манифеста и создал экземпляр класса, описанного в манифесте.
В типе
Command описываются ваши команды. Т.е. классы, реализующие интерфейс
IExternalCommand. Описанные в манифесте команды Revit добавляет на вкладку
Надстройки - Внешние команды в интерфейсе. Метод
Execute будет выполнен, когда вы выберите соответсвующую команду в интерфейсе.
Важно помнить, что экземпляр класса
IExternalApplication будет создан при загрузке Revit. И если по каким то причинам не удалось создать экземпляр этого класса (чаще всего по причине неверного описания в манифесте), то Revit предупредит об этом сразу при загрузке. Экземпляр класса команды создается только непосредественно в момент вызова команды. И если команда описана неверно, то вы увидите предупреждение при попытке вызова команды.
Надстройка не обязательно должна содержать оба типа. Более того, если вам не нужно проделывать каких-либо действий при загрузке Revit, то лучше убрать описание
Application из манифеста, так как это ускорит загрузку Revit.
Команду же можно запустить не только из вкладки
Надстройки - Внешние команды, но и при помощи кнопки на ленте. В этом случае создаете описываете только
Applciation и создаете кнопку для вызова команды в методе
OnStartup.