(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Разработка .NET-приложений для AutoCAD в рамках архитектуры MVC

Источник: habrahabr
t13s

Не секрет, что на сегодняшний день AutoCAD - наиболее популярная САПР, которая используется во многих отраслях человеческой деятельности. В базовой поставке она позволяет выполнять чертежные работы любого назначения с использованием только штатных средств.

Однако чистый AutoCAD - как графическое ядро в базовой комплектации - постепенно теряет свою актуальность. Происходит это потому, что сегодня пользователю важно проектировать взаимосвязанные объекты предметной области (стены, профили железной дороги, колеса…), а не графические примитивы на чертеже (точки, линии, окружности…); причем проектировать быстро, качественно и в соответствие со стандартами, действующими в той или иной стране и отрасли.

Естественно, все, что требуется конечным пользователям во всех странах, фирма Autodesk включить в состав системы AutoCAD, не могла, поэтому в AutoCAD были внедрены средства программирования, позволяющие пользователям самостоятельно адаптировать его к собственным нуждам [1].

Средства разработки AutoCAD. Данные средства можно условно разбить на следующие группы:
Языки LISP и Visual Basic for Applications для автоматизации неких рутинных действий над чертежами. 
Технология ObjectARX, базирующаяся на языке программирования C++ и дающая возможность создания собственных команд и примитивов. 
Поддержка технологии Microsoft .NET, которая позволяет загружать в Autocad и исполнять в нем произвольный программный код, написанный на любом из .NET-совместимых языков программирования.

Последняя технология является наиболее мощной, так как она базируется не на частной разработке Autodesk, а на прогрессивной общепризнанной платформе программирования Microsoft .NET Framework.

При этом отметим ни одно из перечисленных решений в своем исходном виде не способно связывать чертеж с теми объектами, которые он отображает, то есть с моделью предметной области. В свою очередь, наиболее общей и удачной программной архитектурой, реализующей подобное поведение, является шаблон проектирования (pattern) MVC (Model-View-Controller).

Model-View-Controller ("Модель-представление-контроллер"). Это архитектура программного обеспечения, в которой модель данных приложения, пользовательский интерфейс и управляющая логика разделены на три отдельных компонента, так, что модификация одного из компонентов оказывает минимальное воздействие на другие компоненты (Рис. 1).

image

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

Важно отметить, что как представление, так и поведение зависят от модели. Однако модель не зависит ни от представления, ни от поведения. Это одно из ключевых достоинств подобного разделения. Оно позволяет строить модель независимо от визуального представления, а также создавать несколько различных представлений для одной модели [2].

Определим возможность применения архтектуры MVC, рассматривая средства, предоставляемые AutoCAD при программировании с использованием .NET. Ниже (Рис. 2) представлена упрощенная диаграмма классов AutoCAD, через которую реализуется взаимодействие пользовательского кода с САПР.

Структура классов AutoCAD.

image

Рис. 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):

image

Рис. 3 - Реализация архитектуры MVC

Сериализация. Следующий вопрос, который необходимо рассмотреть - каким образом обеспечить хранение данных модели между сеансами работы. Наиболее общим подходом к решению этой задачи в среде .NET Framework является сериализация.

Отметим два очевидных факта:
Сохранение данных в базе (сериализацию) необходимо выполнять непосредственно перед сохранением самого документа.
Восстановление данных из базы (десериализацию) следует производить сразу после загрузки документа, связанного с моделью предметной области.

Обратившись к рис. 2, видим, что указанные действия можно реализовать, подписавшись на следующие события от AutoCAD:
Document.BeforeSave, которое генерируется перед сохранением документа AutoCAD на носитель.
Application.DocumentCreated, которое генерируется после открытия или создания документа.

Транзакционность. Как было сказано выше, любые изменения документа AutoCAD выполняются в рамках транзакций, что обеспечивает как целостность информации, так и возможность выполнять пользовательские функции отмены и повтора команд. Под термином "транзакция" здесь понимается последовательность операций, выполняющихся при переходе базы данных документа из одного непротиворечивого состояния в другое [5].

Но поскольку в рассматриваемом случае AutoCAD выполняет функции представления и контроллера, а основная информация хранится в модели предметной области, реализованной в .NET, требуется:
Обеспечить транзакционность указанной модели.
Обеспечить синхронность создания, открытия, записи и отката транзакций для модели данных и базы AutoCAD.

Данные требования, с одной стороны, гарантируют целостность и непротиворечивость связки модели и базы данных документа; с другой стороны, дают возможность использовать стандартные функции пользовательского интерфейса AutoCAD для отмены и повтора команд.

Реализация модели данных предметной области с поддержкой транзакций выходит за рамки данной статьи, достаточно указать лишь направление, в котором может производиться разработка подобного решения - это использование шаблона проектирования "Команда" (Command) [6].

Обеспечение же синхронизации транзакций обоих типов может быть поделено между объектами промежуточного слоя (рис. 3). Controller инициирует одновременный запуск обеих транзакций в ответ на произведенные действия, вносит необходимые изменения в модель, а так же отслеживает вызов команд отмены и повтора. При этом Drawer, отображая чертеж в документе AutoCAD, изменяет записи базы данных документа в уже открытой контроллером транзакции.

Результаты. На базе описанных в статье принципов были разработаны:
Базовая модель, на основе которой можно строить модели различных предметных областей. Она включает в себя: компоненты предметной области, связи между ними, ограничения, накладываемые на компоненты и связи; так же реализует транзакционный подход.
Базовые классы промежуточного слоя между моделью предметной области и чертежом Autocad, которые, с одной стороны, всякий раз при изменении модели обновляют чертеж и, с другой стороны, отправляет в модель все изменения чертежа, сделанные пользователем.
Основные компоненты дополнительного пользовательского интерфейса, позволяющего редактировать данные модели непосредственно, минуя чертеж.

Таким образом, для построения САПР на базе AutoCAD с применением данной разработки необходимо:
Определить (запрограммировать) конкретную модель предметной области в терминах базовой модели.
Определить (запрограммировать) графический вид компонентов модели на чертеже и описать их поведение при изменении чертежа.
Описать поведение дополнительного пользовательского интерфейса, если таковой нужен.

Полученный подход характеризуется:
Высокой степенью интеграции AutoCAD, промежуточного слоя и модели.
Сокрытием особенностей функционирования AutoCAD для программиста.
Относительной простотой разработки.
Удобством эксплуатации.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 31.07.2013 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
AutoCAD LT 2022 Commercial New Single-user ELD Annual Subscription
ARCHICAD 21, локальная лицензия на 12 месяцев
TeeChart for .NET with source code single license
IBM RATIONAL Clearcase Floating User From Rational Clearcase Lt Floating User Trade Up License + Sw Subscription & Support 12 Months
Quest Software. Toad for DBA Suite for Oracle
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование в AutoCAD
Компьютерный дизайн - Все графические редакторы
Каждый день новые драйверы для вашего компьютера!
Мастерская программиста
Новые программы для Windows
 
Статьи по теме
 
Новинки каталога Download
 
Документация
 
 



    
rambler's top100 Rambler's Top100