вторник, 26 января 2010 г.

Разработка модуля нормоконтроля (часть 2)

В этой части приводится общая обзорная информация по теме.


Во первых нужно будет подключить к проекту следующие библиотеки:
  1. Библиотека "AutoCAD/ObjectDBX Common 17.0 Type Library" (на вкладке COM окна добавления ссылок). Установить свойство Copy Local = False.
  2. Библиотека "Microsoft XML, v6.0" (на вкладке COM окна добавления ссылок). Установить свойство Copy Local = False.
  3. В каталоге "ObjectARX 2009\inc-win32" находится файл AcStMgr.tlb. Для этого файла нужно создать управляемую оболочку, которую затем следует подключить к проекту. Для того, чтобы создать управляемую оболочку, нужно открыть командную строку Visual Studio 2008, перейти в каталог, содержащий файл AcStMgr.tlb и выполнить команду "tlbimp acstmgr.tlb" (без кавычек). В результате работы команды, в этом же каталоге будет создан файл AcStMgr.dll.  Еслу у вас вместо MS VS 2008 установлен MS VS 2010, то применительно к AutoCAD 2009 придётся поступить иначе: скачайте отсюда
    Windows SDK и установите его. Затем перейдите в каталог %ProgramFiles%\Microsoft SDKs\Windows\v6.1\Bin и выполните команду, обозначенную выше, указав полный путь к tlb-файлу. Результирующий файл AcStMgr.dll будет создан в том же каталоге - %ProgramFiles%\Microsoft SDKs\Windows\v6.1\Bin. Переместите его в ваш каталог ObjectARX (в моём случае это C:\ObjectARX 2009\inc-win32).
  4. На полученный файл AcStMgr.dll следует добавить ссылку в вашем проекте (на вкладке COM окна добавления ссылок) и установить свойство Copy Local = True.
Создаваемый класс должен реализовывать интерфейс IAcStPlugin2 из пространства AcStMgr, определённого в файле AcStMgr.dll, полученном нами ранее. Помимо этого, класс следует объявлять с уровнем доступности public и определить для него атрибут ProgId.
Далее пишем программный код, реализовывая указанный выше интерфейс...
После того, как код написан, необходимо  выполнить ряд дополнительных действий:
  1. В файле AssemblyInfo.cs нужно установить видимость проекта для COM-объектов равным True (по умолчанию установлено False): [assembly: ComVisible(true)]. Это же самое действие можно сделать через свойства проекта, на вкладке "Application" нажав на кнопку "Assembly Information..." и  установив галочку в поле "Make assembly Com-Visible".
  2. После того, как проект будет написан и откомпилирован, полученную библиотеку (Имя файла нашей библиотеки.dll) необходимо  в окне консоли (cmd.exe) выполнить команду "regasm /codebase <Имя файла нашей библиотеки>.dll" (без кавычек). 
  3. Далее следует создать reg-файл со следующим содержимым:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\Drawing Check\Plugins2\<Значение атрибута ProgId  созданного нами класса>]
@="<Имя нашего dll-файла>"

Теперь нужно запустить созданный выше reg-файл, произведя тем самым необходимые изменения в реестре.
После этого в AutoCAD (в диалоговом окне "Configure Standard", на вкладке "Plag-ins") должна появиться запись для созданного и зарегистрированного нами в реестре модуля  нормоконтроля (помимо уже имеющихся четырёх, входящих в стандартную поставку AutoCAD).

1 комментарий:

Андрей комментирует...

Добрый день. Как я вижу, вы очень грамотный специалист в области программирования под Автокад.
Можно ли вам заказать написание настраиваемого модуля нормоконтроля.
Последовательно проверяет все слои на допустимость нахождения размещенных на них объектов (линия водопровода не должна быть на слое канализации, но блок заглушки может быть и в газопроводе, и водопроводе и т.д.);
Каждую линию на соответствие цвету, весу, масштабу;
Текст на соответствие заданному размеру или размерам (пример: на слоях Здания, Строения текст стиля Р131 должен быть высотой 1,2, а Вм 431 может быть от 0,8 до 1, но при этом там не должно быть стиля текста D431).
Все эти условия уже соблюдены в файле DWS, нужен модуль Нормоконтроля с более гибкими настройками.
Для связи: ak.artphoto собака gmail.com