46985 (588457), страница 2
Текст из файла (страница 2)
Кроме вышеназванных пакетов и программ есть еще множество других средств для визуализации инженерных и научных расчетов – от сложных и универсальных, до простых, узкоспециальных. Но для своих специфических применений разработчики отдельных подсистем САПР разрабатывают свои пакеты или покупают и настраивают уже существующие стандартные пакеты.
1.2 Описание визуализатора Compaq Array Visulizer.
Array Visualizer (AV) фирмы Compaq позволяет наблюдать как данные числовых массивов, так и их графическое представление. AV содержит в качестве ядра графическую библиотеку OpenGL процедуры которой обеспечивают графический вывод. Дополнительно AV позволяет манипулировать графическими данными, предоставляя возможности для перемещения, поворота и масштабирования изображения, а также для изменения способа его представления на экране. AV содержит:
-
автономно запускаемое приложение, выполняющее отображение данных
-
библиотеку Aview процедур, вызываемых из приложений Фортрана и предназначенных для управления ОМ
-
ActiveX-процедуры библиотек Avis2D и AvisGrid
-
дополнительные визуальные средства
Массив, переданный AV, отображается в двух видах:
-
в виде числовой таблицы, выводимой в верхней части окна AV
-
в графическом виде как трехмерное изображение (3D-вид), или как цветовая карта, или как векторные граф, или как рисунок на плоскости.
Процедуры библиотеки Aview позволяют приложениям CVF или Visual C++ отображать (посредством OLE-автоматизации) данные массива, применяя AV. Также данные массива можно сохранить в виде файла, который загружается в AV в процессе его автономного использования.
ActiveX-процедуры (OCX) библиотек Avis2D и AvisGrid могут быть использованы любой поддерживающей автоматизацию средой, например Visual C++, Visual Basic или CVF, для отображения массивов в разнообразных графических видах. Процедуры Avis2D обеспечивают при выполнении графического вывода более 100 свойств, методов и событий; процедуры AvisGrid применяются для создания представляющих массивы таблиц и предоставляют около 30 свойств, методов и событий.
Возможны несколько вариантов употребления AV. Они, а также присущие им преимущества и недостатки перечислены в следующей таблице:
Вариант | Преимущества | Недостатки |
Загрузка agl-файла, созданного ранее выполненным приложением | Не требует написания специального кода для вызова AV | Нет возможности автоматизировать изменение отображаемых данных |
Использование отладчика CVF | Не требует написания специального кода, работает с проектом любого типа | Требует ручного задания свойств массива и настройки AV; не может быть использован в Visual C++ или Visual Basic, а также в Release-режиме CVF. |
Использование fagl-подпрограмм или в случае С – agl-функций | Небольшое число процедур и , следовательно небольшие затраты на программирование, процедуры работают с проектами любого типа и в Debug-, и в Release-режиме. | Требует ручного задания свойств массива и настройки AV |
Использование fagl- и fav- подпрограмм или в случае C++ - agl-функций и функций класса CAViewer. | Можно программно задавать свойства массива и выполнять настройки AV; процедуры работают с проектами любого типа; последовательно в одном экземпляре AV можно отображать несколько массивов. | Потребуется освоить большое число процедур (более 100); функции класса CAViewer нельзя применять в C (необходим C++). |
Использование ActiveX-процедур библиотек Avis2D и/или AvisGrid | Дает возможность выводить создаваемые AV графические образы и таблицы данных без вызова AV; обеспечивает более быстрое | Употребляется только в Windows-приложениях Фортрана или MFC в случае Visual C++. Заметим, что в Visual Basic большинство |
Воспроизведение образов и больше возможностей для настройки параметров | EXE-проектов могут использовать процедуры библиотек Avis2D и AvisGrid; потребуется освоить большое число Avis2D/AvisGrid-процедур; Avis2D и AvisGrid процедуры не могут отображать HDF и текстовые файлы. |
Отображение массивов.
Массивы отображаются в следующих видах:
1) 3-D вид или Height Plot (рис 1):
р ис 1.
-
Растровая карта (контрастная заливка) или Image Map(рис 2):
р ис 2.
рис. 3
-
График или Plane View (рис 3):
Перечисленные режимы могут быть заданы как в AV непосредственно, так и в программе, из которой AV запускается. В AV переключение режима выполняется либо из меню, либо в результате выбора соответствующей иконки.
Для вращения изображения достаточно разместить мышь на поле графического вывода, нажать левую кнопку мыши и затем, оставаясь на поле вывода, перемещать мышь в произвольном направлении.
1.3 Описание библиотеки функций Array Visualizer.
Ввиду сложности создания Windows-приложений, а также того, что ActiveX-компонента Avis2D не корректно отображает одномерные массивы было решено использовать непосредственно оболочку Array Viewer в совокупности с программой, расширяющей его возможности, а так же служащей более простым интерфейсом между программой инженера и AV. Для создания программы был применен подход с использованием fagl- и fav- процедур. Программа писалась на языке CVF v6.5.
Опишем процедуры API AV, встраивание которых в приложение позволяет запускать AV, передавать ему массив, управлять изображением.
FAGL - подпрограммы.
Синтаксис подпрограммы | Описание |
faglClose(array,status) | Закрывает экземпляр AV. Если затем возникает потребность отобразить массив array снова, то достаточно вызвать лишь faglShow; вызова faglStartWatch выполнять не нужно |
faglEndWatch (array, status) | Удаляет массив array из списка отображаемых массивов и освобождает ресурсы, связанные с array и используемые подпрограммами библиотеки. |
faglGetShareName (array, filename, status) | Строка filename, возвращаемая этой подпрограммой, может быть передана процедурам Avis2D и AvisGrid как свойство FileName. |
faglHide(array, status) | Делает экземпляр AV невидимым. Экземпляр AV станет видимым, если затем вызвать faglShow. Однако если экземпляр AV создан посредством favStartViewer, то вместо faglShow следует употреблять favShowWindow |
faglLBound (array, lbnd, status) | Устанавливает левые границы измерений отображаемого массива в видах Data или Graph Views AV. По умолчанию массив отображается с границами, равными единице. |
faglSaveAsFile (array, filename, status) | Сохраняет текущий массив в файле с расширением AGL. Такой файл может быть загружен и отображен в AV. |
faglShow (array, | Создает экземпляр AV и отображает данные |
status) | массива array. Так же делает экземпляр AV видимым. |
faglStartWatch (array, status) | Добавляет массив array в список отображаемых массивов и возвращает дескриптор hv, который используется для доступа к массиву другими подпрограммами библиотеки. Фактически faglStartWatch использует системные ресурсы для приведения array к виду, необходимому для faglShow. Чтобы освободить эти ресурсы, следует вызвать faglEndWatch. |
FaglUpdate(array, status) | Приводит в соответствие изображение с данными, хранящимися в массиве array. Употребляется, если приложение изменило отображаемый массив array с момента последнего вызова faglUpdate или faglShow и если есть необходимость обновить изображение. Если же экземпляр AV ассоциируется с массивом, созданным favStartViewer, а не faglShow, то вместо faglUpdate нужно вызвать favUpdate. |
Параметры fagl подпрограмм:
Имя | Смысл/вид | Тип. |
array | Имя отображаемого массива / входной | Числовой |
status | Статус вызова fagl-подпрограммы. В случае успеха равен нулю/ выходной | integer(4) |
filename | Строка, возвращаемая faglGetShareName/ выходной | CHARACTER(*) |
filename | Имя файла без расширения, если файл пишется в директорию, из которой вызвано приложение, либо полное имя файла / входной. | CHARACTER(*) |
lbnd | Массив ранга 1, размер которого равен рангу отображаемого массива / выходной | INTEGER(4) |
title | Строка, отображаемая в заголовке экземпляра AV / входной | CHARACTER(*) |
Для вызова приведенных выше подпрограмм в использующем их программном компоненте следует выполнить ссылку:
Use avdef ! Ссылка на модуль avdef.f90
Модуль AVDEF содержит интерфейсы fagl-подпрограмм.
Перечисленные подпрограммы обычно используются следующим образом:
-
до отображения массива array вызовите faglStartWatch с параметром array;
-
если необходимо отображать массив, имея нижнюю левую границу, отличную от единицы, примените faglLBound;
-
для отображения сообщения, сопровождающего выводимые данные, вызовите faglName;
-
для запуска AV и отображения массива array вызовите faglShow с первым параметром, равным array. AV будет функционировать до тех пор, пока не выполнена команда faglClose;
-
если хранимые массивом данные подверглись изменениям, то для их отображения вызовите faglClose;
-
для сохранения массива array в виде файла с расширением AGL (Array Graphing Language) вызовите faglSaveAsFile, использовав array в качестве первого параметра. При этом AV может быть некактивным;
-
при необходимости можно вызвать faglGetShareName и получить строку filename, позволяющую процедурам Avis2D и AvisGrid осуществлять доступ к памяти, занятой массивом.
-
после завершения просмотра массива вызовите faglEndWatch.
Для массивов отображаемых в AV рекомендуется использовать атрибут !DEC$ATTRIBUTES array_visualizer :: array. Действие этого атрибута таково: память, занимаемая массивом array, используется и AV и приложением. При отсутствии атрибута будут созданы две области данных array и при каждом обновлении массива после вызова faglUpdate данные будут копироваться из области, принадлежащей приложению, в область, используемую AV.
Заметим, что DEC-атрибут ARRAY_VISUALIZER может быть применен только с динамическими объектами, т.е. объектами, обладающими атрибутом PIONTER или ALLOCATABLE.
FAV - подпрограммы.
Fav – подпрограммы управляют AV и обеспечивают взаимодействие AV с приложением. Как правило, fav- и fagl- подпрограммы используются совместно. Fav – подпрограммы подразделяются на группы, имеющие названия:
-
запуск AV
-
доступ к данным
-
зона вывода
-
фильтрация данных
-
палитра
-
оси координат
-
выбор
-
виды изображений
-
3D вид
-
растровая карта
-
векторный граф
-
отображение данных
-
камера
-
маркер
-
разное
Работа с fav-подпрограммами станет возможной после выполнения ссылки: