Смекни!
smekni.com

Исследование методов автоматизированного проектирования динамических систем (стр. 8 из 25)

STDPanel1Click (щелчок на поле ввода) – при этом событии, если пользователь выбрал на панели тип создаваемого узла, тогда, создаётся узел в модели типа, который выбрал пользователь.

Модуль «Tprocess» - описывает класс massa. Класс наследован от класса TgraphicControl, при разработке логической структуры, мы разрабатывали только те свойства класса, которые отвечают за основную функцию приложения – формирование информации о системе для программы расчётов. Сейчас мы рассмотрим такие аспекты как изображение на экране моделируемой системы структурно (в виде графа).

класс massa имеет следующие свойства, отвечающие за отрисовку элемента:

Pic: Tpicture – пиктограмма изображающая конкретный тип массы (наследуемые классы так же имеют это свойство, значение определяется при создании объекта).

Width и Height – высота и ширина элемент отрисовывается в виде прямоугольника.

Переопределён метод Paint – выполняет отрисовку объекта в зависимости от режима (свойство Mode).

Модуль Link – описан класс Link. Так же опишем методы и свойства этого класса, описанные в данном модуле, которые отвечают за отрисовку элементов.

Элемент Связь отрисовывается в виде стрелки, свойства cx,cy,lnx,lny,xk1,xk2,yk1,yk2,x1,y1,x2,y2 – определяют параметры отображаемого элемента, через указатель на соединяемые массы можно узнать эти параметры, в классе так же переопределён метод Paint, который отрисовывает элементы.

Модуль Relation – в модуле описан базовый класс, класс Link содержит свойство Relations, которое является массивом указанного типа.

Модули «Spring», «Screw», «Dempfer» и другие модули описывающие потомков класса relation, описание работы этих модулей описано при разработке логической структуры, элементы этих классов не как не отрисовываются, они только при создании инициируют свой список параметров имеющий тип TstringList – массив строк, так же в этих модулях описаны процедуры для работы с диалоговыми окнами – InitWindow InitData GetData.

Рассмотрим структуру модулей программы расчётов колебательных систем. Модуль «Model» - управляющий модуль графического редактора.

Содержит следующие процедуры:

Create – создаёт элемент класса Model;

Destroy – уничтожение лемента;

InitInputParamDlg – инициирует диалоговое окно параметров модели;

ClearData – уничтожаются все элементы модели;

ShowDialog – выводит пользователю диалоговое окно редактирования параметров модели;

EditElementParams – вызывается окно редактирования параметров выбранного элемента;

DeleteElement – удаление из модели элемента;

SaveToIniFile – сохранить модель в файле;

LoadFromIniFile – загрузить модель с жесткого диска;

Visio – устанавливаются геометрические параметры модели, для визуализации её в окне модели;

Calculate – расчёт параметров модели, выполнение визуализации;

ShowGraphs – вывод окна графиков модели;

MakeReport – создать отчёт.

3 РАЗРАБОТКА ПРОГРАМНО – МЕТОДИЧЕСКОГО КОМПЛЕКСА ДЛЯ МОДЕЛИРОВАНИЯ ДИНАМИКИ МЕХАНИЧЕСКИХ СИСТЕМ

3.1 Структура и функциональное назначение отдельных модулей

Рассмотрим структуру основного модуля графического редактора (управляющего модуля), так как он выполняет основную функцию этого приложения – составление пользователем структуры моделируемой системы и сохранение этой информации для последующего расчёта в программе расчётов.

Частично, этот модуль был уже описан в предыдущих разделах, остановимся подробно на функциях, которые выполняет модуль.

Создание главного окна приложения.

При создании главного окна приложения автоматически заполняется панель (ToolBar) элементами (ToolButton), которые описывают каждый тип массы, происходит это следующим образом. В той же директории где находится графический редактор, создадим директорию images\, в этой директории находятся файлы со структурным изображением каждого типа массы, создадим файл images.lst. В этом файле напишем имя каждого файла с иконкой и соответствующее название этого элемента. Приложение находит соответствующий файл и создаёт кнопку на панели инструментов, в противном случае выводится сообщение об ошибке (файл не найден) и даже если существует модуль, описывающий данный подкласс, создать элемент данного класса не удастся.

Реакция на события мыши.

При щелчке (OnCLick) на панели ввода (STDPanel) если пользователь выбрал какой то тип массы нажатием на панели соответствующей кнопки [39], то будет создан экземпляр класса того объекта, который выбрал пользователь,пользователю будет выдано диалоговое окно в котором он укажет параметры создаваемого объекта экземпляр этого объекта будет занесен в массив item.(Подробнее смотри приложение Б).

При нажатии кнопки мыши (OnMauseDown) если левая кнопка нажата и не нажат правый Shift, то все выделенные объекты становятся не выделенными, запоминается точка нажатия.

При перемещении указателя мыши, если нажата левая кнопка, на панели рисуется четырёхугольник, который покажет, какие объекты будут выделены, если отпустить кнопку мыши.

При отпускании кнопки все объекты, которые попали в выделенную зону, становятся выделенными.

В главном модуле так же описаны процедуры, которые описывают реакцию элементов (масс и связей) на события мыши, так как классы наших элементов наследованы от класса TgraphicControl, то они имеют стандартные события OnCLick, OnMauseDown, OnMauseUp, OnMauseMove, при создании элементов им приписываются эти процедуры.

Событие нажатия кнопки мыши на элементе (ItemMouseDown), в этой процедуре выполняется следующее:

Если нажата левая кнопка мыши, то если не нажат Shift элемент, над которым нажата кнопка, становится выделенным, а элементы, которые были выделены до этого, становятся не выделенными. Если же Shift нажат, то к выделенным элементам добавляется элемент, над которым нажали кнопку, если этот элемент уже выделен, то его выделение отменяется, все выделенные элементы переходят в состояние pmMove.

При перемещении указателя мыши, если была нажата левая кнопка мыши, все выделенные объекты перемещаются.

Отпускание указателя мыши. (ItemMouseUp)

В этой процедуре происходит вызов конструктора связи, происходит это следующим образом, проверяется, нажал ли пользователь переключатель создания связи, далее просматриваются все связи, находится номер элемента, над которым нажата кнопка мыши, если флаг выбора первой массы не установлен, то тогда вызывается, конструктор связи. Если же установлен флаг выбора первой массы, то устанавливается флаг в значение «ложь», номер элемента, над которым отпустили кнопку, запомнили, тогда при нажатии на второй массе, если нет связи, которая уже соединяет данные элементы, произойдёт вызов конструктора связи. Далее, будет выведено диалоговое окно создания связи, в этом окне пользователь добавит элементы (пружина, резьба, и т. д.), которые в модели будут соединять эти массы, после того как пользователь закончит редактировать связь, созданный элемент будет занесён в массив связей.

Двойной щелчок над элементом (и над массой и над связью) происходит вызов диалогового окна для редактирования параметров элементов (такое же как и при создании).

Так же на главном окне приложения есть панель со стандартными элементами управления.

Создать новый проект – пользователю выводится диалоговое окно с предложением сохранить редактируемую модель, далее если пользователь выбрал сохранить, то текущая модель сохраняется в файл, если нет, не сохраняется, и все массы и связи из массивов Items и Links удаляются.

Сохранить проект – текущая модель сохраняется в файле, выбранном пользователем. Как было указанно выше. Интерфейс между графическим редактором и программой расчётов обеспечивается с помощью ini файлов. Ini файлы характеризуются секцией и именем параметра и его значением. Для каждого элемента модели будем создавать секцию, в которую мы будем записывать параметры и их значения. Так же создадим секцию, в которую запишем параметры моделирования (шаг, время метод, имя модели), секция “Model”.У элемента массы есть свойство param, список строк в котором в одной строке имя параметра, а в другой его значение. Таким образом, в цикле устраивая перебор всех элементов массива items, создаём секцию для каждого элемента, перебирая значение свойства param, записываем в секцию значение каждого параметра элемента, кроме того, в секцию записывается класс элемента. Дальше перебираем все элементы массива Links. У элементов типа Link есть свойство relations – массив, в котором записаны все элементы, которые физически связывают элементы модели. Для каждого элемента создадим секцию, в которую запишем параметры реальной связи (точно так же как и для массы), от элемента типа Link нам нужны только указатели на соединяемые массы, через эти указатели записываем в секцию номера тех масс, которые соединяет данная связь.

Открыть проект – загружается ранее сохранённая на диск модель. Происходит это следующим образом. Из файла берётся первая секция, читается её параметр, в котором записано имя класса, в зависимости от этого параметра вызывается конструктор, далее читаются строки секции и заполняются значения параметров. При этом если находится секция, в которой описана связь, и до этого не встретилось связи соединяющей те же массы, то создаётся элемент класса Link и элемент типа Screw, Spring, Dempfer и т. д. Если такая связь уже есть, то создаётся только экземпляр типа Screw, Spring, Dempfer и т. д.

Удаление элементов. При работе с моделью пользователь может, как добавлять элементы, так и удалять их. Реализовано это следующим образом, при нажатии на панели инструментов кнопки «Удалить» или кнопки «Del», на клавиатуре. В процедуре, которая закреплена за данным событием, происходит следующее. Проверяется количество выделенных масс и количество выделенных связей, если их суммарное количество больше нуля, то происходит перебор всех выделенных масс (один цикл) и перебор всех связей (вложенный цикл), если какая то связь содержит указатель на удаляемую массу, то это связь удаляется. Таким образом, удаляются все выделенные массы и связи, и все связи, которые связаны с удаляемыми массами, если удаляется связь, то её удаление не несёт за собой удаление масс.