Структура программы
Думаю, нет необходимости рассматривать подробно всю программу модельера, я постарался сделать код читабельным, а ключевые моменты поясняются комментариями.
Однако несколько вещей требуют дополнительного рассмотрения.
Пользователь должен иметь возможность отмены ошибочных действий. Вести протокол всех манипуляций накладно, поэтому я ограничился только возможностью отмены одного последнего действия. Перед выполнением операции редактирования система объектов копируется во вспомогательный массив, а отмена последнего действия пользователя заключается в процедуре обратного копирования.
Систему в любой момент можно записать в файл одного из двух типов. Файлы первой группы (я их назвал "Файлы системы") имеют тип TGLObject, это собственный формат модельера. Файлы второй группы имеют расширение Inc, это текстовые файлы, представляющие собой готовые куски программы, пригодные для включения в шаблоны программ Delphi. Посмотрите пример содержимого такого файла для единственного объекта:
glPushMatrix;
glTranslatef (11.11,10.35,10.03);
glScalef ( 1.00, 2.00, 3.00);
color [0] := 0.967;
color [1] := 0.873;
color [2] := 0.533;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @color);
glCallList (DrawCube)
glPopMatrix;
В зависимости от расширения, выбранного пользователем при записи модели, вызываются разные процедуры, каждая из которых по-своему анализирует массив объектов.
Этими ухищрениями я попытался придать нашему модельеру больше практического смысла, теперь он может стать удобным инструментом, облегчающим кодирование систем из множества объектов.
Содержание раздела