РАЗРАБОТКА ПРИЛОЖЕНИЙ ДЛЯ AUTOCAD В РАМКАХ АРХИТЕКТУРЫ MVC
(Иркутский государственный технический университет
Не секрет, что на сегодняшний день AutoCAD - наиболее популярная САПР, которая используется во многих отраслях человеческой деятельности. В базовой поставке она позволяет выполнять чертежные работы любого назначения с использованием только штатных средств.
Однако чистый AutoCAD – как графическое ядро в базовой комплектации – постепенно теряет свою актуальность. Происходит это потому, что сегодня пользователю важно проектировать взаимосвязанные объекты предметной области (стены, профили железной дороги, колеса…), а не графические примитивы на чертеже (точки, линии, окружности…); причем проектировать быстро, качественно и в соответствие со стандартами, действующими в той или иной стране и отрасли.
Не смотря на то, что Autodesk включила в свой продукт средства программирования, позволяющие пользователю адаптировать AutoCAD в соответствии со стандартами, ни одно из них в своем исходном виде не способно связывать чертеж с теми объектами, которые он отображает, то есть с моделью предметной области. В свою очередь, наиболее общей и удачной программной архитектурой, реализующей подобное поведение, является шаблон проектирования (pattern) MVC (Model-View-Controller).
Целью данной работы является определение возможности применения архитектуры MVC при программировании для AutoCAD, и реализация необходимых для этого программных средств.
Не секрет, что на сегодняшний день AutoCAD - наиболее популярная САПР, которая используется во многих отраслях человеческой деятельности. В базовой поставке она позволяет выполнять чертежные работы любого назначения с использованием только штатных средств.
Однако чистый AutoCAD – как графическое ядро в базовой комплектации – постепенно теряет свою актуальность. Происходит это потому, что сегодня пользователю важно проектировать взаимосвязанные объекты предметной области (стены, профили железной дороги, колеса…), а не графические примитивы на чертеже (точки, линии, окружности…); причем проектировать быстро, качественно и в соответствие со стандартами, действующими в той или иной стране и отрасли.
Естественно, все, что требуется конечным пользователям во всех странах, фирма Autodesk включить в состав системы AutoCAD, не могла, поэтому в AutoCAD были внедрены средства программирования, позволяющие пользователям самостоятельно адаптировать его к собственным нуждам [1].
Средства разработки AutoCAD. Данные средства можно условно разбить на следующие группы:
· Языки LISP и Visual Basic for Applications для автоматизации неких рутинных действий над чертежами.
· Технология ObjectARX, базирующаяся на языке программирования C++ и дающая возможность создания собственных команд и примитивов.
· Поддержка технологии , которая позволяет загружать в Autocad и исполнять в нем произвольный программный код, написанный на любом из. NET-совместимых языков программирования.
Последняя технология является наиболее мощной, так как она базируется не на частной разработке Autodesk, а на прогрессивной общепризнанной платформе программирования Microsoft .NET Framework.
При этом отметим ни одно из перечисленных решений в своем исходном виде не способно связывать чертеж с теми объектами, которые он отображает, то есть с моделью предметной области. В свою очередь, наиболее общей и удачной программной архитектурой, реализующей подобное поведение, является шаблон проектирования (pattern) MVC (Model-View-Controller).
Model-View-Controller («Модель-представление-контроллер»). Это архитектура программного обеспечения, в которой модель данных приложения, пользовательский интерфейс и управляющая логика разделены на три отдельных компонента, так, что модификация одного из компонентов оказывает минимальное воздействие на другие компоненты (Рис. 1).

Рис. 1 - Архитектура MVC
· Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контроллера), изменяя свое состояние.
· Представление (View). Отвечает за отображение информации (пользовательский интерфейс).
· Контроллер (Controller). Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции.
Важно отметить, что как представление, так и поведение зависят от модели. Однако модель не зависит ни от представления, ни от поведения. Это одно из ключевых достоинств подобного разделения. Оно позволяет строить модель независимо от визуального представления, а также создавать несколько различных представлений для одной модели [2].
Определим возможность применения архтектуры MVC, рассматривая средства, предоставляемые AutoCAD при программировании с использованием. NET. Ниже (Рис. 2) представлена упрощенная диаграмма классов AutoCAD, через которую реализуется взаимодействие пользовательского кода с САПР.
Структура классов AutoCAD.

Рис. 2 - Упрощенная диаграмма классов AutoCAD
Основным является класс Application, представляющий собой обертку (Wrapper) непосредственно над приложением AutoCAD. В приложении может быть открыто множество документов, каждый из которых представим как объект класса Document. С каждым документом в свою очередь связана база данных (Database), хранящая в себе всю информацию по чертежу (стили, примитивы, блоки…) в виде объектов DBObject с уникальными идентификаторами (Handle). Наибольший интерес для нас представляют именно примитивы (Entity), с помощью которых строится чертеж. Примитивами в AutoCAD являются объекты: точка (Point3d), линия (Line), полилиния (Polyline), окружность (Circle), текст (MText) и т. д. – унаследованные от абстрактного класса Entity.
Любые изменения документа AutoCAD производятся в рамках транзакций, открываемых для его базы данных. Кроме обеспечения целостности информации, данный транзакционный подход применяется и для реализации функций пользовательского интерфейса «Отмена» (Undo) и «Повтор» (Redo), в которых происходит либо откат, либо применение последней в стеке транзакции соответственно. Данную особенность необходимо учитывать при проектировании модели данных предметной области.
Используя транзакции AutoCAD в собственном управляемом. Net-коде, мы имеем возможность строить чертежи, создавая в базе данных документа записи о соответствующих примитивах. Следовательно, мы можем использовать документ AutoCAD в качестве компонента View архитектуры MVC.
Теперь нам требуется определить возможность корректного поведения системы при изменении чертежа пользователем с целью соответствующего изменения компонента Model. Одно из возможных решений - реакция на события, генерируемые AutoCAD при изменении элементов чертежа:
· Database. ObjectModified – генерируется при изменении любого объекта DBObject в базе данных документа.
· Database. ObjectErased – генерируется при удалении любого объекта из базы данных документа.
Подписываясь на данные события, мы получаем возможность отслеживать любые изменения чертежа и реагировать на них, соответственно изменяя компоненты модели. Пользуясь терминологией архитектуры MVC можно сказать, что функции компонента Controller в данной реализации на себя берет как AutoCAD, выступая генератором события об изменении примитива, так и. NET код, вносящий на основе этого события изменения в модель.
Таким образом, можно представить архитектуру MVC применительно к AutoCAD в следующем виде (Рис. 3):

Рис. 3 - Реализация архитектуры MVC
Сериализация. Следующий вопрос, который необходимо рассмотреть – каким образом обеспечить хранение данных модели между сеансами работы. Наиболее общим подходом к решению этой задачи в среде. NET Framework является сериализация.
Сериализация (в программировании) — процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации — восстановление начального состояния структуры данных из битовой последовательности [3].
Общий процесс сериализации можно представить в следующем виде (Рис. 4):

Рис. 4 - Процесс сериализации
Объект сериализуется в поток, который переносит не только данные, но сведения о типе объекта, такие как его версию, язык и региональные параметры, а также имя сборки. Из этого потока объект можно сохранить в базе данных, файле или памяти [4]. В данном случае, нас интересует возможность сохранения потока именно в базе данных связанного с моделью документа AutoCAD.
Отметим два очевидных факта:
· Сохранение данных в базе (сериализацию) необходимо выполнять непосредственно перед сохранением самого документа.
· Восстановление данных из базы (десериализацию) следует производить сразу после загрузки документа, связанного с моделью предметной области.
Обратившись к рис. 2, видим, что указанные действия можно реализовать, подписавшись на следующие события от AutoCAD:
· Document. BeforeSave, которое генерируется перед сохранением документа AutoCAD на носитель.
· Application. DocumentCreated, которое генерируется после открытия или создания документа.
Транзакционность. Как было сказано выше, любые изменения документа AutoCAD выполняются в рамках транзакций, что обеспечивает как целостность информации, так и возможность выполнять пользовательские функции отмены и повтора команд. Под термином «транзакция» здесь понимается последовательность операций, выполняющихся при переходе базы данных документа из одного непротиворечивого состояния в другое [5].
Но поскольку в рассматриваемом случае AutoCAD выполняет функции представления и контроллера, а основная информация хранится в модели предметной области, реализованной в. NET, требуется:
· Обеспечить транзакционность указанной модели.
· Обеспечить синхронность создания, открытия, записи и отката транзакций для модели данных и базы AutoCAD.
Данные требования, с одной стороны, гарантируют целостность и непротиворечивость связки модели и базы данных документа; с другой стороны, дают возможность использовать стандартные функции пользовательского интерфейса AutoCAD для отмены и повтора команд.
Реализация модели данных предметной области с поддержкой транзакций выходит за рамки данной статьи, достаточно указать лишь направление, в котором может производиться разработка подобного решения – это использование шаблона проектирования «Команда» (Command) [6].
Обеспечение же синхронизации транзакций обоих типов может быть поделено между объектами промежуточного слоя (рис. 3). Controller инициирует одновременный запуск обеих транзакций в ответ на произведенные действия, вносит необходимые изменения в модель, а так же отслеживает вызов команд отмены и повтора. При этом Drawer, отображая чертеж в документе AutoCAD, изменяет записи базы данных документа в уже открытой контроллером транзакции.
Результаты. На базе описанных в статье принципов были разработаны:
· Базовая модель, на основе которой можно строить модели различных предметных областей. Она включает в себя: компоненты предметной области, связи между ними, ограничения, накладываемые на компоненты и связи; так же реализует транзакционный подход.
· Базовые классы промежуточного слоя между моделью предметной области и чертежом Autocad, которые, с одной стороны, всякий раз при изменении модели обновляют чертеж и, с другой стороны, отправляет в модель все изменения чертежа, сделанные пользователем.
· Основные компоненты дополнительного пользовательского интерфейса, позволяющего редактировать данные модели непосредственно, минуя чертеж.
Таким образом, для построения САПР на базе AutoCAD с применением данной разработки необходимо:
· Определить (запрограммировать) конкретную модель предметной области в терминах базовой модели.
· Определить (запрограммировать) графический вид компонентов модели на чертеже и описать их поведение при изменении чертежа.
· Описать поведение дополнительного пользовательского интерфейса, если таковой нужен.
Полученный подход характеризуется:
· Высокой степенью интеграции AutoCAD, промежуточного слоя и модели.
· Сокрытием особенностей функционирования AutoCAD для программиста.
· Относительной простотой разработки.
· Удобством эксплуатации.
ЛИТЕРАТУРА
1. Зуев, С. А. и Полещук, Н. Н. САПР на базе AutoCAD - как это делается. СПб : БХВ-Петербург, 2004.
2. Model-View-Controller. Wikipedia. [В Интернете] http://ru. wikipedia. org/wiki/Model-View-Controller.
3. Сериализация. Wikipedia. [В Интернете] http://ru. wikipedia. org/wiki/Сериализация.
4. Основы сериализации в. Net Framework. Microsoft Developer Network. [В Интернете] http://msdn. /ru-ru/library/ms233836.aspx.
5. Хорафас, Д. и Легг, С. Конструкторские базы данных. [перев.] . М. : Машиностроение, 1990.
mand. Wikipedia. [В Интернете] http://ru. wikipedia. org/wiki/Command.


