Использование Open CASCADE для создания приложений
Основные модули и их назначение
Мы продолжаем обучение применению Open CASCADE, начатое в
статье «Инструмент для разработки корпоративной САПР» («САПР и графика» № 8’2001).
После краткого обзора иерархии классов подробно рассмотрим процедуру установки
библиотеки и процесс создания простого Windows-приложения с использованием Open
CASCADE, а затем на примере создания примитива продемонстрируем процесс создания
собственных функций моделирования геометрических объектов.
Конечно, информации, предоставленной в данной статье, будет недостаточно для
описания всех возможностей библиотеки CASCADE. Тем не менее, ознакомившись с
основными аспектами, вы сможете самостоятельно более детально изучить, освоить
и применить в своих проектах богатые функциональные возможности библиотеки.
Основные модули и их назначение
Как уже отмечалось в предыдущей публикации, библиотеки Open CASCADE написаны на языке программирования C++ и предоставляют пользователю все возможности объектно-ориентированного программирования и большой набор классов. Родственные классы Open CASCADE сгруппированы в пакеты (Package) для предотвращения конфликта имен (рис. 1). Так, имена классов имеют префикс, соответствующий имени пакета. В свою очередь, пакеты сгруппированы в библиотеки (Library), которые используются при компоновке приложений в Developer Studio. Все библиотеки сгруппированы по функциональному назначению в соответствующие модули (Module).
Версия 3.1 Open CASCADE содержит шесть модулей (рис. 2). Рассмотрим кратко назначение и предоставляемые возможности каждого из них.
Модуль Foundation Classes предоставляет базовые классы библиотеки CASCADE и математические средства для работы с ними, такие как:
- классы автоматического управления динамической памятью Transient, на базе которых построены все дескрипторы, рассмотренные в предыдущей статье;
- базовые типы, такие как Boolean, Character, Integer и Real;
- базовый класс управления исключениями Failure;
- потоки, используемые в С++;
- классы строк String, предоставляющие возможность работать как с символами ASCII, так и с форматом Unicode;
- большой набор классов различных списков, стеков, очередей, множеств, последовательностей: Array, DataMap, List, Sequence, Queue, Steck и т.д., на базе которых построено большое количество дочерних классов, оперирующих простыми типами данных — SequenceOfReal, ArrayOfInteger, ListOfReal, SetOfReal и т.д.;
- классы векторов и матриц, содержащие вещественные значения и поддерживающие операции сложения, умножения, транспонирования и определения обратных матриц;
- классы математических операций, позволяющие определять минимум, максимум функции многих переменных, решать системы уравнений и многое другое.
Напомним порядок формирования имени. Описание класса Boolean находится в пакете Standard, значит при использовании необходимо писать Standard_Boolean; тип AsciiString объявлен в пакете TCollection — при использовании необходимо писать TCollection_AsciiString.
Название заголовочных файлов обычно совпадает с названием класса, поэтому нет необходимости сразу начинать поиск файла с описанием вашего класса, попробуйте указать:
#include<Standard_Boolean .hxx>
и
#include<TCollection_AsciiString .hxx>
соответственно.
Вышеперечисленные возможности модуля позволяют применять его при решении большинства различных математических задач. Использование модуля значительно сократит время написания и отладки собственных математических классов и методов решений. Следует также отметить, что программисты могут найти здесь оригинальные классы, манипулирующие различными структурами данных. Действительно, одного лишь списка или массива иногда недостаточно при программировании, поэтому можно воспользоваться готовыми классами стека, очереди и т.д.
Следующий модуль Modeling Data предоставляет описание классов геометрических объектов, а также математические методы для работы с ними. Так, в Modeling Data находятся классы, дающие возможность:
- создавать 2D-геометрические объекты (линии, окружности, кривые);
- создавать 3D-геометрические объекты (поверхности, конусы, цилиндры и т.д.);
- использовать математические методы при создании и анализе геометрических объектов (методы аппроксимации и интерполяции кривых и поверхностей, анализ положения точки на геометрических объектах), основанные на методах описания сплайнами Безье и В-сплайнами;
- используя большое количество классов, управляющих топологией объектов, создавать составные геометрические объекты любой сложности.
Модуль Modeling Data можно использовать в приложениях, выполняющих обработку экспериментальных данных, для получения аппроксимируемых кривых и поверхностей, при описании геометрических областей ограничений математических моделей.
В следующий модуль — Modeling Algorithms — вошли классы, с помощью которых можно управлять топологическими геометрическими образами и выполнять над ними операции, такие как:
- создание топологических объектов из геометрических примитивов;
- выполнение булевых операций над объектами (объединение, пересечение, вычитание);
- выполнение операции скругления формы по заданному ребру топологического объекта, а также создание фасок;
- создание отводов, карманов, бобышек, трубопроводов;
- создание объектов с сохранением истории построения.
Все алгоритмы используют современную технологию описания геометрических объектов BREP, широко применяемую в различных системах проектирования. Не создавая программ проектирования, пользователи Open CASCADE могут использовать модуль Modeling Algorithms для анализа данных, полученных в результате эксперимента. Для отображения полученных результатов можно воспользоваться модулем Visualization.
Модуль Visualization предназначен для отображения объектов Open CASCADE, построенных на базе классов Modeling Data, и предоставляет готовые алгоритмы для создания графического представления геометрических моделей. Пользователь может не думать об алгоритмах отображения своих классов, измененных в результате наследования. Дело в том, что в Open CASCADE службы отображения отделены от данных, которые они представляют. Это позволяет изменять геометрические или топологические алгоритмы и создаваемые при помощи их объекты без изменения сервиса их отображения.
Наряду с функциями отображения геометрических образов в модуле реализованы функции выбора объектов в интерактивном режиме.
Для управления отображением и выбором объектов в 3D-структуре данных используется сервис AIS (Application Interactive Services), который связывает структуру данных с отображаемым объектом. Таким образом, отображая полученный результат решения задачи, вы можете выбрать интересующую вас область для более детального рассмотрения либо для получения дополнительной информации, например числового значения функции в указанной точке. Это становится возможным благодаря связи геометрического образа с полученными геометрическими данными.
Предположим, мы создали программу для расчета сечений сложного трубопровода, провели расчеты и получили не только площади сечений, но и их геометрическое представление в виде контуров. Для передачи этой информации конструкторскому отделу, который использует для моделирования конструкторские САПР, нам следует воспользоваться модулем Data Exchange. В этом модуле расположены классы, позволяющие сохранять и читать информацию об объектах в таких форматах, как IGES и STEP.
И наконец, модуль Open CASCADE Application Framework. Он использует архитектуру «документ-представление» и упрощает разработку приложения благодаря:
- использованию механизма управления данными как атрибутами моделируемого объекта;
- хранению атрибутов создаваемого объекта в виде иерархии, при этом информация о взаимном использовании сохраняется;
- поддержке механизмов многодокументного приложения;
- чтению и использованию моделей, созданных в других CAD-системах;
- использованию механизма сохранения и восстановления данных, в том числе и при использовании связей с другими документами;
- использованию функции Undo-Redo.
Это лишь часть возможностей, предоставляемых модулем Application Framework в создании собственных приложений.
Установка Open CASCADE
В предыдущей статье рассказывалось, где можно получить бесплатную версию Open CASCADE. Надеемся, что многие из вас уже имеют все данные, необходимые для проведения инсталляции. Если нет, то по адресу в Internet ftp://ftp.matra-dtv.fr/pub/bin31 вы можете переписать необходимые для установки файлы:
- SourceOpenCascade-3.1.zip (42,2 Мбайт) — исходные тексты библиотеки;
- HeaderOpenCascade-3.1.zip (14,3 Мбайт) — заголовочные файлы;
- WindowNT_OpenCascade-3.1.zip (37,7 Мбайт) — готовые к использованию библиотеки.
Процесс установки библиотеки можно разбить на три этапа:
- распаковка архивов и организация структуры папок;
- установка переменных среды окружения;
- настройка параметров Developer Studio.
Следует отметить, что процедура установки библиотеки для Windows NT/2000 отличается от установки для Windows 9x.
Первый этап
Распакуем архивы в один каталог (например, D:\OpenCASCADE).
Создаваемые папки библиотеки Open CASCADE при распаковке имеют следующую структуру:
- D:\OpenCASCADE\Adm — содержит все настройки Developer Studio для самостоятельной компиляции библиотеки;
- D:\OpenCASCADE\Bin — ничего не содержит, кроме документа, пользователю предлагается самостоятельно наполнить этот подкаталог;
- D:\OpenCASCADE\Doc — документация в HTML-, HLP- и PDF-форматах;
- D:\OpenCASCADE\Inc — заголовочные файлы;
- D:\OpenCASCADE\Samples — папка с примерами на Visual C++;
- D:\OpenCASCADE\Src — исходные коды библиотеки;
- D:\OpenCASCADE\Windows_NT — библиотеки для Windows NT/9x/2000.
При использовании неполной версии библиотеки некоторые из указанных папок могут отсутствовать.
Второй этап
Для установки переменных окружения желательно иметь архив с программой установки, который находится по следующему адресу в Internet: ftp://ftp.matra-dtv.fr/pub/bin31/WindowNT_KITDownLoad.zip (756,6 Кбайт). Распаковав архив и запустив программу setup.exe, следует указать папку, в которой будет находиться библиотека Open CASCADE (например, D:\OpenCASCADE). По завершении установки автоматически будут настроены переменные окружения в соответствии с указанной папкой.
Для установки библиотеки «вручную» в операционной системе Windows NT/2000 необходимо установить следующие переменные среды (рис. 3):
CASROOT D:/OpenCASCADE CSF_MDTVFontDirectory D:\OpenCASCADE\src\FontMFT CSF_MDTVTexturesDirectory D:\OpenCASCADE\src\Textures CSF_SHMessageStd D:\OpenCASCADE\src\SHMessageStd CSF_UnitsDefinition D:\OpenCASCADE\src\UnitsAPI\Units.dat CSF_UnitsLexicon D:\OpenCASCADE\src\UnitsAPI\Lexi_Expr.dat CSF_XSMessageStd D:\OpenCASCADE\src\XSMessageStd MMGT_CLEAR 1 Path D:\OpenCASCADE\Windows_NT\dll; D:\OpenCASCADE\Windows_NT\bin (добавить к существующим).
Аналогичные настройки выполняем для Windows 9x. Здесь необходимо добавить в файл autoexec.bat следующие записи:
SET CASROOT = D:/OpenCASCADE SET CSF_UnitsLexicon = D:\OpenCASCADE\src\UnitsAPI\Lexi_Expr.dat SET CSF_UnitsDefinition = D:\OpenCASCADE\src\UnitsAPI\Units.dat SET CSF_MDTVTexturesDirectory = D:\OpenCASCADE\src\Textures SET CSF_MDTVFontDirectory = D:\OpenCASCADE\src\FontMFT SET CSF_SHMessageStd = D:\OpenCASCADE\src\SHMessageStd SET CSF_XSMessageStd = D:\OpenCASCADE\src\XSMessageStd SET MMGT_CLEAR = 1 SET PATH = D:\OPENCASCADE\WINDOWS_NT\BIN; D:\OPENCASCADE\WINDOWS_NT\DLL
Также необходимо добавить в файл config.sys следующую запись:
shell=command.com /e:30000 /p
После этого необходимо перезагрузить компьютер.
Но еще раз напомним: если у вас в распоряжении имеется полная версия Open CASCADE, достаточно будет запустить setup.exe и следовать указаниям программы установки.
Третий этап
После определения переменных среды окружения необходимо провести настройку среды разработчика Developer Studio, определив путь к библиотекам и заголовочным файлам, через опции главного и ниспадающего меню среды разработки:
ToolsаOptionsаDirectoriesаLibrary files:
D:\OPENCASCADE\WINDOWS_NT\LIB
ToolsаOptionsаDirectoriesаInclude files:
D:\OPENCASCADE\INC
Выполнив все этапы установки, можно приступать к созданию приложений.
Создание простого приложения
Для создания нового проекта воспользуемся мастером создания приложения, который находится в архиве WindowNT_Wizard-3.1.zip (245 Кбайт) — CasCadeViewer31.awx. Его можно найти и переписать на свой компьютер по следующему адресу Internet: http://www.138.pair.com/matra/pub/bin31/WindowNT_Wizard-3.1.zip.
Перепишем его в папку:
C:\Program Files\
Microsoft Visual Studio\
Common\MSDEV98\BIN\IDE.
Теперь можно приступить к разработке приложения. Создайте новый проект MyViewer, выбрав в списке мастеров OpenCASCADE3.1 AppWizard (рис. 4).
После подтверждения появится окно мастера (рис. 5), в котором можно выбрать необходимые компоненты создаваемого приложения:
- Import/Export — позволит создать код, выполняющий сохранение и чтение данных в форматах BREP, CSFDB, IGES и STEP;
- Include a 3D Collector — позволит создать окно для отображения объектов, которые были удалены из главного окна;
- Suppress Open Save — запрет в меню File пунктов Open и Save;
- With Indicator — добавляет в приложение объект CDialog класса BarIndicator.
Если нет необходимости в использовании 2D Viewer, то можно завершить создание приложения нажатием на кнопку Finish. В противном случае следует нажать кнопку Next и выполнить установки, показанные на рис. 6.
С установкой флажка Include a 2D Viewer в приложение будет добавлен 2D Viewer. Основные настройки для 2D Viewer таковы:
- Add Interactive Contents 2D — добавляется по умолчанию;
- Add Properties — добавляется окно со свойствами;
- Add Send in 2D Popup — добавляется функция для передачи 3D-объекта в 2D Viewer.
Для завершения создания каркаса нового проекта приложения следует нажать кнопку Finish.
После компиляции кода программы мы получим приложение, позволяющее отображать геометрические объекты. Используя меню FileаImport, можно загрузить в приложение описание моделей в форматах, выбранных при создании приложения (в нашем примере IGES), и как показано на рис. 7. Имея в своем распоряжении весь исходный код, мы можем наполнить нашу программу требуемыми для решения наших задач функциями, изменить интерфейс, в частности заменить англоязычные подсказки и названия опций меню на русскоязычные и т.д.
Чтобы убедиться, что полученное приложение MyViewer обладает всей мощью системы моделирования геометрических объектов, а также для закрепления полученного материала добавим в приложение команду построения параллелепипеда. Создадим кнопку на панели инструментов (рис. 8), в обработчике которой запишем следующие операторы:
// Создать параллелепипед по одной вершине // p(0, -50, -20) с указанием длин ребер. BRepPrimAPI_MakeBox box(gp_Pnt(0, -50, -20), 200.0, 150.0, 100.0); // Создать объект представления нашего // параллелепипеда. Handle(AIS_Shape) aBox = new AIS_Shape(box.Shape()); // Задать материал и режим для представления // объекта. myAISContext->SetMaterial(aBox, Graphic3d_NOM_SILVER); myAISContext->SetDisplayMode(aBox, 1); // Отобразить объект на экране. myAISContext->Display(aBox);
Затем включим в состав программы заголовочный файл (напомним, что его имя легко определяется по имени используемого класса):
#include<BRepPrimAPI_MakeBox.hxx>
Откомпилируем приложение и проверим работоспособность нашей функции. По нажатии кнопки мы должны получить на экране параллелепипед (рис. 9).
И еще один штрих к нашему приложению. Дадим возможность программе отображать оси координат. Для этого уберем комментарии со строк, сгенерированных мастером в функции CMyViewerDoc:
// TRIHEDRON Handle(AIS_Trihedron) aTrihedron; Handle(Geom_Axis2Placement) aTrihedronAxis = new Geom_Axis2Placement(gp::XOY()); ATrihedron = new AIS_Trihedron(aTrihedronAxis); myAISContext->Display(aTrihedron);
Система координат будет инициализироваться каждый раз при создании документа.
***
Итак, первые шаги на пути самостоятельного использования библиотеки Open CASCADE сделаны. На этом можно считать вводный курс законченным. В следующей статье мы рассмотрим решение небольшой практической задачи с применением Open CASCADE.
«САПР и графика» 9'2001