САПёР на полях САПР
Оказывается, мысль о том, что можно сделать игру под САПР, приходит не нам одним. Думаю, всем, кто разрабатывает приложения на .NET под AutoCAD, знаком блог Кина Волмсли (Kean Walmsley) «Through the Interface». В одном из постов автор пишет об игре «Сапер», она же «Minesweeper», сделанной для AutoCAD.
Волмсли не предлагает файлов для скачивания, поэтому придется «скопипастить» код двух VB-файлов и сформировать проект самостоятельно. Комментарии к статье позволяют в подробностях разобраться с тем, как работает игра, но для нас это сейчас не главное. Наша цель – запустить «Сапера» под nanoCAD.
Для этого нам нужно сделать три вещи:
- добавить в References библиотеки .NET nanoCAD: hostdbmgd.dll, hostmgd.dll;
- заменить в блоке Imports Autodesk.AutoCAD на Teigha или HostMgd (см. ниже);
- заменить полные имена классов AutoCAD (там, где они встречаются) на полные имена классов nanoCAD.
Первое. Добавление библиотек hostdbmgd.dll, hostmgd.dll необходимо, так как в них содержатся все классы для работы с .NET API nanoCAD. Без них мы ничего не сможем. Это понятно.
Второе. В AutoCAD все классы содержатся в пространстве имен Autodesk.AutoCAD. В nanoCAD пространств имен два: классы базы данных (то есть чертежа и его содержимого) находятся в пространстве Teigha, а классы, связанные с приложением, с описанием документа, с командной строкой, – в пространстве имен HostMgd. У меня получилось так:
Imports Teigha.Geometry
Imports Teigha.DatabaseServices
Imports
HostMgd.ApplicationServices
Imports HostMgd.EditorInput
В результате мы получим скомпилированную .NET-сборку. Ее можно загрузить в nanoCAD и запустить игру командой «MINESWEEPER».
Когда я адаптировал код «Сапера» под nanoCAD, оказалось крайне удобным и почти необходимым компилировать мой проект под обе платформы сразу. Сделал две конфигурации: конфигурацию AutoCAD и конфигурацию nanoCAD.
Настраиваем обе конфигурации: указываем пути к acad.exe и ncad.exe, задаем директории, куда должны собираться библиотеки. В конфигурации nanoCAD задаем константу NCAD.
Подключения пространств имен обрамляются препроцессорными директивами #IF THEN … #END IF. Для связывания полных имен классов используем алиасы:
#If NCAD Then
Imports HostMgd.ApplicationServices
Imports Teigha.DatabaseServices
Imports Teigha.Geometry
Imports HostMgd.EditorInput
Imports System
Imports Platform = HostMgd
Imports PlatformDb = Teigha
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.EditorInput
Imports System
Imports Platform = Autodesk.AutoCAD
Imports PlatformDb = Autodesk.AutoCAD
Теперь можно собирать один и тот же код под обе конфигурации. Профит!
Об авторе:
Андрей Грачевский, независимый экспертE-mail: Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.
Источник.