САПёР на полях САПР

    Мы уже писали о том, что приложение, написанное для nanoCAD, можно запустить в AutoCAD. Но гораздо интереснее наоборот: использовать в nanoCAD код, который был разработан для AutoCAD. Как всегда, я решил делать это играючи.

    Оказывается, мысль о том, что можно сделать игру под САПР, приходит не нам одним. Например, в блоге Кина Волмсли (Kean Walmsley), ведущего евангелиста AutoCAD .NET API, есть статья об игре «Сапер». Вот именно этого сапера мы и будем пускать под nanoCAD. Подробности смотрите под катом.
    TitleImage

    Думаю, всем, кто разрабатывает приложения на .NET под AutoCAD, знаком блог Кина Волмсли (Kean Walmsley) «Through the Interface». В одном из постов автор пишет об игре «Сапер», она же «Minesweeper», сделанной для AutoCAD.
    В статье нет файлов для скачивания, поэтому придется «скопипастить» код двух VB-файлов и сформировать проект самостоятельно. Статья сопровождается множеством комментариев, позволяющих в подробностях разобраться с тем, как работает игра, но наша цель не в этом. Наша цель – запустить «Сапера» под nanoCAD.
    Для этого нам нужно сделать три вещи:
    1. добавить в References библиотеки .NET nanoCAD: hostdbmgd.dll, hostmgd.dll;
    2. заменить в блоке Imports Autodesk.AutoCAD на Teigha или HostMgd (см. ниже);
    3. заменить полные имена классов AutoCAD (там, где они встречаются) на полные имена классов nanoCAD.
    Рассмотрим каждый из пунктов подробнее.

    Первое. Добавление библиотек hostdbmgd.dll, hostmgd.dll необходимо, так как в них содержатся все классы для работы с .NET API nanoCAD. Без них мы ничего не сможем. Это понятно.

    Второе. В AutoCAD все классы содержатся в пространстве имен Autodesk.AutoCAD. В nanoCAD пространств имен два: классы базы данных (то есть чертежа и его содержимого) находятся в пространстве Teigha, а классы, связанные с приложением, с описанием документа, с командной строкой, – в пространстве имен HostMgd. У меня получилось так:
      Imports Teigha.Runtime 
      Imports Teigha.Geometry
      Imports Teigha.DatabaseServices
    
      Imports HostMgd.ApplicationServices
      Imports HostMgd.EditorInput
    

    И, наконец, третье. В коде иногда встречаются явные указания имен классов. Например, на Autodesk.AutoCAD.DatabaseServices.TransactionManager. В данном случае нужно сделать ту же замену, что в пункте два.

    В результате мы получим скомпилированную .NET-сборку. Ее можно загрузить в nanoCAD и запустить игру командой “MINESWEEPER”.
    GameGesk

    Когда я адаптировал код «Сапера» под nanoCAD, оказалось крайне удобным и почти необходимым компилировать мой проект под обе платформы сразу.
    Я сделал две конфигурации: конфигурацию AutoCAD и конфигурацию nanoCAD.
    Configurations

    Настраиваем обе конфигурации: указываем пути к acad.exe и ncad.exe, задаем директории, куда должны собираться библиотеки. В конфигурации nanoCAD задаем константу NCAD.
    ConfigurationManager

    Подключения пространств имен обрамляются препроцессорными директивами #IF THEN … #END IF. Для связывания полных имен классов используем алиасы:
      Imports Platform = HostMgd
      Imports PlatformDb = Teigha
    

    В результате получается следующее:
    #If NCAD Then
        Imports Teigha.Runtime
        Imports HostMgd.ApplicationServices
        Imports Teigha.DatabaseServices
        Imports Teigha.Geometry
        Imports HostMgd.EditorInput
        Imports System
        Imports Platform = HostMgd
        Imports PlatformDb = Teigha
    #Else
        Imports Autodesk.AutoCAD.Runtime
        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
    #End If
    

    Теперь можно собирать один и тот же код под обе конфигурации. Профит!
    • +16
    • 5.8k
    • 8
    Нанософт
    73.98
    Company
    Share post

    Comments 8

      +5
      Осталось еще косынку реализовать и САПР юзеры будут рады :)
        +1
        infostart.ru/public/83668/ — для «1С Предприятия 8.х» уже есть, кстати.
          +2
          Я был шокирован, когда в програме «Смета» увидел специальны раздел «развлечения», где находились игр типа пни пингвина и т.п.
        +2
        Вот бы еще ссылочку на собранную версию:)
          +1
          Предлагаю рулетку адаптировать Roulette :)
            +1
            сорри это Lisp :(
              0
              Да, был еще тетрис на лиспе…
            0
            не серьезно) вот мой вариант www.youtube.com/watch?v=946fmxv5cC8

            Only users with full accounts can post comments. Log in, please.