Rappert (1013965), страница 3
Текст из файла (страница 3)
Выгрузка из плагина осуществляется методами класса TResFunc (см. Приложение 1). При этом следует отметить, что:
-
При первичном запуске плагин всегда осуществляет процедуру DoiT. По сути, перерасчет всего проекта и подгружает результат расчета, как исходные данные для работы.
-
Для перерасчета служит процедура ReCalculate. Описание процедуры и алгоритм работы можно посмотреть в приложении 1
Схема выгрузки/подгрузки данных в расчетных блок
Рис. 36
3.2.3. Структура внутреннего представления сетки для алгоритма
Описание внутренней структуры сделано многоуровневым:
Уровень вариантов сгенерированной сетки конечных элементов:
TVariants = Record Variant : array of TVarables; Count : Integer; End; Variants : TVariants; |
Уровень элементов и узлов:
TVarables = Record ResNodes : ListNodes; ResElements : ListElements; Main : MainParams; End; List : TVarables; |
Уровень узлов, элементов и параметров:
ListNodes = Record Nodes : array of TMyNode; InOut : array of Integer; Count : Integer; CountOfBlocked : Integer; CountOfUnBlocked : Integer; End; ListElements = Record Elements : array of TMyElement; Count : Integer; End; |
InOut – массив, определяющий внутренний узел или внешний (выгружается из расчетного модуля и соответствует сгенерированной в нём сетке)
Count – общее количество узлов
CountOfBlocked – количество узлов, блокированных на границе
CountOfUnBlocked – количество узлов, не блокированных на границе. Дублирующий вариант, тогда как можно посчитать Count-CountOfBlocked. Сделано для перепроверки определения узлов на границе.
Elements – массив структур элементов
Count – общее количество элементов
MainParams = Record NRC : Integer; // параметр разбиения CountOfZones : Integer; // количество зон (INRG) CountOfBasePoints : Integer; // число точек образующих зоны (INBP) end; |
Уровень внутренних структур узлов и элементов:
TMyNode = Record Number: Integer; X,Y: Real; SeNum: Integer; inf: TNodeInF; end; |
X,Y – координаты узла
SeNum – номер после перенумерации
Inf – структура информации о характеристиках узла
TMyElement = Record Number : INTEGER; Node1,Node2,Node3 : INTEGER; Material : Integer; End; |
Составляющие его узлы и материал присвоенный элементу.
Уровень структуры информации о характеристиках узла:
TNodeInF = Record ZoneNum: integer; Blocked: Boolean; InOut: Boolean; X,Y: Real; end; |
Blocked - определяет, блокирован ли узел на границе (если блокирован, то True)
InOut – определяет, является ли узел внешним (если является, то True)
X,Y - координаты проекции узла на границу перпендикуляром к прямой (не используется в текущей реализации)
Обращение к структуре в результате получается наглядным и простым:
Получение информации о характеристике InOut узла №1:
list.ResNodes.Nodes[1].inf.InOut |
Получение информации о номере узла Node1 в элементе №5
list.ResElements.Elements[5].Node1 |
3.3. Описание пользовательского интерфейса.
3.3.1. Основная панель (Главное окно)
Назначение: объединяет все модули подсистемы и организовывает работу с различными вариантами модифицируемой сетки конечных элементов.
Для организации одновременной совместной работы отдельных модулей в подсистеме была реализована функциональность, обеспечивающая работу с активными окнами. Логика работы была заложена простая и понятная пользователю: при начале работы соответствующее окно добавляется в список активных и выделяется (см. рисунок ниже), при этом для переключения между модулями у пользователя есть возможность не подгружать заново модули, а использовать уже погруженные, выбирая их в списке. На рабочем столе совместно с главным меню одновременно может быть отображено только 1 активное окно. У этого есть свои плюсы и минусы, однако мною решено было сделать так.
Перед загрузкой основного меню из расчетного модуля всегда выгружается информация по сетке (см. п. Схема выгрузки/подгрузки данных в расчетных блок).
Так же модуль организует первоначальные данные для работы всего плагина: пути к файлам, проверку реестра, восстановление при необходимости, обработку данных расчетного модуля, настройки для остальных модулей и т.д.
П ри запуске подсистемы в качестве предлагаемого пользователю варианта сгенерированной сетки предлагается единственный, называемый «Исходная сетка». Данная сетка выгружена из расчетного модуля, она была сгенерирована и выгружена в подсистему из расчетного блока системы Sigma.
Помимо стандартной и неизменяемой сетки генерируемой расчетным блоком Sigma можно создавать любое количество собственных модификаций данной сетки, используя алгоритмические процедуры подсистемы или же изменяя положение отдельных узлов вручную. Для сохранения варианта сетки служит кнопочка «Сохранить, как вариант». Все варианты нумеруются и отображаются в выпадающем меню.
Неподходящий вариант сетки можно удалить, используя кнопку «Удалить вариант». При этом в качестве текущей сетки подсистема перейдет к исходной.
Для осуществления расчетов по пластине, представленной модифицированной внутри подсистемы сеткой используется кнопка «Перерасчет в Sigma» (операция ReCalculate см. Приложение 1). При этом модифицированная сетка на этапе ге Рис. 37 нерации будет внедрена в расчетный блок Sigma и в дальнейшем будет выполнен прочностной расчет.
В подсистеме реализована возможность автоматического сохранения вариантов сетки, при этом для модификации и отображения используется представление внутренней сетки, как промежуточного варианта сетки, который может быть сохранен или изменен на изначальный или любой другой вариант из возможных(присутствующих) в списке выбора вариантов сетки. При начальной загрузке проекта в подсистему, после выгрузки исходной сетки, осуществляется загрузка вариантов предыдущих сохраненных вариантов сетки из файла (если таковой имеется), находящегося в папке проекта с именем “название_проекта”.Ralg. Данный файл содержит информацию о вариантах сетки, кроме исходной. При завершении работы с подсистемой варианты сетки выгружаются в данный файл. На время работы с сеткой файл удаляется из директории.
3.3.2 Системные настройки
Назначение: установка общих настроек для отдельных модулей и плагина в целом
-
реализованы два типа настроек для модулей: пользовательские и по умолчанию;
-
реализована возможность конфигурировать оба типа настроек;
-
все настройки пишутся в реестр и там же сохраняются их резервные копии;
-
модули обладают возможностью восстановления своих веток реестра из стандартных2.
Работы с настройками осуществляется методами класса TFlags (см. Приложение 2).
Рис. 38
3.3.2.1. Описание элементов окна
Данный модуль осуществляет работу как с общими настройками (сохранение/загрузка настроек каждого модуля) так и некоторыми системными индивидуальными настройки отдельных модулей (Меню результатов модуля «Отображение результатов», масштабирование отображения в модуле «Сетка КЭ»).
Системные настройки имеют две конфигурации:
-
стандартная
-
пользовательская
Стандартная конфигурация включается и работает при активации «Использовать стандартные настройки», а пользовательская в случае, если данная настройка не активна.
Пользовательские настройки изменяются пользователем, за сохранение производимых изменений отвечает настройка «Сохранять настройки при закрытии» модуля «Системные настройки». Стандартные же возможно изменить, но процедура этого несколько сложнее. Для того чтобы изменить настройки стандартной конфигурации используются «Дополнительные операции с настройками».
3.3.2.2. Описание работы системных настроек
В текущей версии представлены следующие настройки, записываемые в реестр:
-
Отображение результатов:
Загружать предыдущую | |
При запуске модуля ShowCells будут подгружены настройки из реестра Сохранять текущую. При закрытии модуля ShowCells настройки будут сохранены в реестр Показывать меню результатов. При запуске модуля ShowCells панель просмотра напряжений, перемещений и тд будет доступна. | |
Подхватывать "на лету" | |
Если модуль ShowCells активен, то «на лету» буду применяться записанные в реестр и настройка п.2 Связь цветовой шкалы и меню цветов; Связывает зависимостью цветовую шкалу и меню цветов (в текущей реализации отключена) |
-
Сетка КЭ
Масштабировать пластину | |||
Если форма модуля Segments становиться активной, то пластина масштабируется по форме | |||
Перегружать результаты | |||
Если форма модуля Segments становиться активной, то перерисовывается пластина в соответствии с текущим вариантом внутренней сетки | |||
Загружать предудущую | |||
При запуске модуля Segments будут подгружены настройки из реестра | |||
Сохранять текущую | |||
При закрытии модуля Segments настройки будут сохранены в реестр |
-
Системные настройки
Использовать одни настройки | |||
Использование одних настроек для разных вариантов проекта (в текущей реализации отключена) | |||
Использовать настройки по умолчанию | |||
Для всех флагов будут использованы настройки по умолчанию | |||
Сохранять настройки при закрытии | |||
При закрытии модуля SysSettings настройки будут сохранены в реестр |
3.3.2.3. Операции с настройками
-
Установить
Сделать текущие настройки настройками по умолчанию. В соответствующих ветках реестра заменяются настройки по умолчанию на текущие.
-
Восстановить
Восстановить настройки по умолчанию для текущих. В соответствующих ветках реестра заменяются текущие настройки на по умолчанию.
-
Сбросить
Сбросить изменения в настройках по умолчанию. В соответствующих ветках реестра заменяются настройки на по умолчанию сбрасываются в первоначальное состояние.
3.3.3. Модификация и отображение внутренней сетки
Рис. 39