ADN Open CIS
Сообщество программистов Autodesk в СНГ

10/11/2014

Пример использования Автозагрузки для запуска команды в AutoCAD

Инициализация AutoCAD UI из вашего метода .NET Initialize() не рекомендуется. Причина в том, что ваш .NET DLL может быть загружен при старте AutoCAD, и в этот момент определенным подсистемы AutoCAD (например, Лента, Палитры, COM и т.д.) еще не полностью инициализированы и обращение к ним может быть безуспешным.

Обычное решение для этого случая – создание обработчика события для создания документов внутри метода Initialize() и уже в этом обработчике создать другой обработчик, который бы отслеживал вход в состояние Quiescent, в котором уже можно выполнять инициализацию.

Если использовать Автозагрузчик (Autoloader), всё это можно обработать автоматически, просто используя атрибут Commands::Command.StartupCommand для того, чтобы определить какая команда будет запущена при загрузке. Т.е.:

Код - XML: [Выделить]
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <ApplicationPackage SchemaVersion="1.0" AutodeskProduct="AutoCAD" Name="MyTestApp" Description="FentyCAD demo app" AppVersion="1.0.0" FriendlyVersion="1.0.0" ProductType="Application" SupportedLocales="Enu" AppNameSpace="appstore.exchange.autodesk.com" Author="Fenton Webb" ProductCode="{17FFEEB3-D653-491D-97D3-40FC069FB967}" UpgradeCode="{1F07C18D-E5D9-4775-9A80-3E240CB4D1C3}">
  3.   <RuntimeRequirements OS="Win32|Win64" Platform="AutoCAD|AutoCAD*" SeriesMin="R19.0" SeriesMax="R19.1" />
  4.   <CompanyDetails Name="FentyCAD" Url="www.FentyCAD.com" Email="info@FentyCAD.com" />
  5.   <Components Description="Any CPU DLLs">
  6.     <RuntimeRequirements OS="Win32|Win64" Platform="AutoCAD|AutoCAD*" SeriesMin="R19.0" SeriesMax="R19.1" />
  7.     <ComponentEntry AppName="FentiCADMain" Version="1.0.0" ModuleName="./Contents/Windows/MyApp.dll" AppDescription="Main App .NET DLL" LoadOnCommandInvocation="True">
  8.       <Commands GroupName="FentyCAD_MAIN">
  9.         <CommandLocal="_FCStartup" Global="FCStartup" Description="Команда использумая для инициализации моего приложения" StartupCommand="True" />
  10.       </Commands>
  11.     </ComponentEntry>
  12.   </Components>
  13. </ApplicationPackage>

 

Источник: http://adndevblog.typepad.com/autocad/2013/04/autoloader-example-for-invoking-a-startup-command-in-autocad.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=1068

Опубликовано 10.11.2014