Назначение типов AddIn в файле манифейста

Автор Тема: Назначение типов AddIn в файле манифейста  (Прочитано 5349 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Алексей СтатныхАвтор темы

  • ADN OPEN
  • Сообщений: 1
  • Карма: 0
  • Skype: statnyh_as
Доброго время суток. Вопрос у меня есть. Создаю  расширение для Revit 2014. Подскажите чем отличается тип манифеста команда и приложение и в какой момент времени выполняется у приложения OnStartup. Вопрос такой возник в результате того что я подключаю dll к ревит и выполняется только код который в  файле команды
« Последнее редактирование: 25-02-2014, 08:27:10 от Виктор Чекалин »

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Алексей, добрый день.
Все очень просто.

Файл манифеста предназначен для описания вашего расширения. Именно из файла манифеста Revit узнает о вашей надстройке.

При старте Revit происходит поиск файла c расширением addin в соответствующих папках, читает из них информацию и загружает вашу надстройку.

В надстройке вы можете создать два типа класса:
  • Класс, реализующий интерфейс IExternalApplication
  • Класс, реализующий интерфейс IExtefnalCommand

Таких классов в одной надстройке может быть несколько. Но чтобы Revit знал об их существовании, их нужно описать в файле манифеста.

Типичный файл манифеста выглядит примерно так:
Код - XML [Выбрать]
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RevitAddIns>
  3.   <AddIn Type="Command">
  4.     <Text>Command RevitTemp</Text>
  5.     <Description>Some description for RevitTemp</Description>
  6.     <Assembly>RevitTemp.dll</Assembly>
  7.     <FullClassName>RevitTemp.Command</FullClassName>
  8.     <ClientId>69529763-1ebd-4139-938b-bc0318a656b0</ClientId>
  9.     <VendorId>TBC_</VendorId>
  10.     <VendorDescription>The Building Coder, http://thebuildingcoder.typepad.com</VendorDescription>
  11.   </AddIn>
  12.   <AddIn Type="Application">
  13.     <Name>Application RevitTemp</Name>
  14.     <Assembly>RevitTemp.dll</Assembly>
  15.     <FullClassName>RevitTemp.App</FullClassName>
  16.     <ClientId>0b1c0fcb-e87e-4ce4-9355-c6187223ad41</ClientId>
  17.     <VendorId>TBC_</VendorId>
  18.     <VendorDescription>The Building Coder, http://thebuildingcoder.typepad.com</VendorDescription>
  19.   </AddIn>
  20. </RevitAddIns>

В типе Application, необходимо указать название класса, реализующего интерфейс IExternalApplication. Этот интерфейс содержит 2 метода: OnStartup и OnShutdown.
Метод OnStartup выполняется при запуске Revit. Или если быть точнее, после того как Revit прочитал информацию из файла манифеста и создал экземпляр класса, описанного в манифесте.

В типе Command описываются ваши команды. Т.е. классы, реализующие интерфейс IExternalCommand. Описанные в манифесте команды Revit добавляет на вкладку Надстройки - Внешние команды в интерфейсе. Метод Execute будет выполнен, когда вы выберите соответсвующую команду в интерфейсе.

Важно помнить, что экземпляр класса IExternalApplication будет создан при загрузке Revit. И если по каким то причинам не удалось создать экземпляр этого класса (чаще всего по причине неверного описания в манифесте), то Revit предупредит об этом сразу при загрузке. Экземпляр класса команды создается только непосредественно в момент вызова команды. И если команда описана неверно, то вы увидите предупреждение при попытке вызова команды.

Надстройка не обязательно должна содержать оба типа. Более того, если вам не нужно проделывать каких-либо действий при загрузке Revit, то лучше убрать описание Application из манифеста, так как это ускорит загрузку Revit.
Команду же можно запустить не только из вкладки Надстройки - Внешние команды, но и при помощи кнопки на ленте. В этом случае создаете описываете только Applciation и создаете кнопку для вызова команды в методе OnStartup.