Системы проектирования интерьера
Программа Arcon Eleco для профессионального дизайна, проектирования и трехмерной визуализации помещения. Требования к компьютеру. Блок подпрограмм по организации пользовательского интерфейса. Алгоритм трехмерной визуализации. Алгоритм работы с данными.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 06.03.2013 |
Размер файла | 50,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
1. Обзор предметной области
В данный момент дизайн интерьеров является довольно востребованной областью. Желание сделать свою квартиру красивой и приятной возникает у многих людей. Но не любой может себе позволить, или попросту не доверяет, консультантам по дизайну интерьера. Возникает желание сделать все без «посредников» и с наименьшими затратами.
Такая возможность появилась при появлении специализированных программных продуктов, посвященных данной тематике. Существует множество подобных программ, которые отличаются друг от друга предоставляемыми возможностями, системными требованиями, или попросту, интерфейсами. Все они нацелены на выполнение главной задачи, а именно:
· помочь пользователю создать собственный дизайн интерьера.
· сделать процесс разработки как можно быстрее и проще.
Большинство таких программных продуктов ориентировано на локальное использование, что подразумевает под собой, что пользователь должен инсталлировать на свой компьютер программу и только после этого начать работу. Это, на мой взгляд, в некоторых случаях может помешать пользователю, установить тот или иной программный продукт.
В эру информационных технологий, когда почти в каждом доме установлено соединение с Интернет, был найден способ устранить этот недостаток. Разрабатываются системы с удаленным доступом. Пользователю не обязательно устанавливать программу на жесткий диск. Достаточно лишь открыть окно браузера и ввести определенный веб-адрес. Этот факт сокращает время, затраченное на поиск, скачивание и установку программы.
Любой программный продукт, посвященный дизайну интерьеров должен иметь возможность дополнения, то есть загрузки дополнительных объектов.
2. Аналитический обзор аналогичных систем
В данный момент существует множество подобных систем. Проведем аналитический обзор их возможностей.
2.1 Arcon Eleco
Новая версия программы Arcon Eleco +2007 Professional (Аркон Элеко 2007) предназначена для профессионального дизайна, проектирования и трехмерной визуализации. Программа позволяет сначала создать детально проработанный план помещения, а потом увидеть созданное помещение в объемном изображении. Это позволяет более наглядно обсуждать архитектурные идеи со своими коллегами, а также более эффективно общаться с клиентами.
В отличие от других программ, программа Аркон разрабатывалась именно для архитекторов для решения вопросов, связанных с созданием интерьеров различной степени сложности. На сегодняшний день в Европе Аркон используют более 20000 профессиональных пользователей, большая часть из них - это профессиональные архитекторы и дизайнеры.
В режиме конструирования Вы можете оперативно создать 2D планы. При помощи простого перетаскивания мышкой создаются и размещаются Стены, Двери, Окна и другие элементы.
В программе Аркон можно создать дизайн спроектированного помещения, поработать с отдельно взятыми элементами и нанести надписи и размеры на плане. Спроектированное помещение можно посмотреть в высококачественном 3D изображении и осуществить виртуальную прогулку по созданному проекту.
В проекте можно использовать текстуры и предметы интерьера из библиотеки. Библиотека содержит более 1300 различных текстур и более 3000 объектов интерьера. Имеется возможность просмотреть созданные интерьеры и экстерьеры с фотореалистичным качеством.
Аркон позволяет увидеть тени от освещения. Программа поддерживает следующие форматы: для импорта - DXF, DWG, HPG, PLT и 3DS; для экспорта - файлы в форматах DXF, 3D DXF, VRML, 3DS, ArCon object, O2C, MBA, ArCon Render студия, HPGL, EWM и PCF.
Возможности программы «Аркон»
Конструирование:
· профессиональный дизайн и проектирование интерьеров.
· проектирование лестниц.
· проектирование подвесных потолков.
· расчет теней и освещения (высококачественный рендер).
· стены с закруглениями.
· виртуальные стены (невидимые).
· верхние / нижние балки.
· колонны / опоры.
· дизайн корпусной мебели.
Ландшафт:
· установка различных высот и наклонов местности.
· ландшафтный дизайн и проектирование зимних садов.
· Просмотр:
· 2D/3D.
· произвольное перемещение в 3D.
· панорамные презентации.
· Импорт / Экспорт:
· DXF, DWG, HPG, PLT, 3D DXF, VRML, 3DS, ArCon object, O2C, MBA, ArCon Render студия, HPGL, EWM и PCF.
· создание видео в формате AVI.
· поддержка o2c объектов.
· сохранение фотореалистичных картинок с лучевой трассировкой.
· экспорт o2c объектов.
2.2 Autodesk 3ds Max 9
Одним из самых мощных, на сегодняшний день, инструментов, предназначенных для трехмерной визуализации, является 3ds Max 9.
Совместимость 3ds Max 9 с новейшей 64-битной технологией позволяет пользователям иметь доступ к расширенной памяти. В идеале, это означает еще и значительно ускоренную производительность. Преимущества 64-битной технологии становятся очевиднее при работе с очень большими наборами данных или сложной анимацией. Другими словами, разницу заметят те, кто работает с десятками миллионов многоугольников.
Autodesk оптимизировала параметры оконного интерфейса под DirectX, что, в отличие от 64-битного обновления, уже видно сразу. Компания не только значительно улучшила отображение контуров окон, прямых и кривых линий, но также добавила новую возможность просмотра скрытых линий. Кроме того, компания обещает более быстрое взаимодействие. Однако, если вы предпочитаете пользоваться OpenGL, вам не повезло - увеличение скоростных характеристик возможно только с DirectX. Bitmap Proxy - это еще один заметный шаг вперед; с его помощью изображения с высоким разрешением подкачиваются на прокси-серверы с низким разрешением, при этом повышается скорость отображения и улучшается производительность в целом.
2.3 К3-Мебель
Программа К3-Мебель - это современное профессиональное программное обеспечение для работы в салоне по продаже мебели, а также на мебельном производстве. Программа способна решать полный комплекс задач, связанных с приемом заказов, работой с клиентами, разработкой дизайн-проектов, проектированием мебели и подготовкой полного комплекта документации.
Программа К3-Мебель эффективно применяется в следующих областях:
· дизайн и проектирование кухни.
· дизайн торговых площадей (проектирование торгового оборудования).
· проектирование офисной мебели и дизайн офиса.
· создание различных дизайн-проектов помещений.
· проектирование шкафов-купе и другой корпусной мебели, дизайн интерьера.
Требования к компьютеру (для эффективной работы):
· Тип процессора Intel Pentium IV с тактовой частотой 2.8 ГГц;
· Оперативная память 1024 Мб;
· Графический адаптер NVidia GeForce 6600 с видеопамятью 128 Мб;
· Монитор с размером диагонали экрана 17» и более. Разрешение 1280х1024;
· Привод CD-ROM, манипулятор мышь;
· Наличие свободного места на диске 300 Мб (для обеспечения достаточного объема виртуальной памяти);
· Рекомендуется Windows XP, НЕ рекомендуется Windows Vista.
Разработчик: российская компания «ГеоС» (гарантированная техническая поддержка для зарегистрированных пользователей).
Имеется целый ряд программ, нацеленных на решение задачи дизайна интерьера. Но каждая из них имеет следующие особенности:
· Довольно серьезные системные требования;
· Сложный интерфейс;
· Отсутствие возможности удаленной работы;
2.4 Дизайн-студия 3D
«Дизайн-студия 3D» - программа для дизайна не только помещений, но и мебели. В этой комплексности - сильная сторона продукта. Программ для создания дизайна интерьера много. Но, как правило, они не обладают инструментами создания объектов: мебели, оборудования и так далее. Дизайнеру приходится довольствоваться вложенными объектами либо приобретать CD с дополнительными библиотеками. В программе «Дизайн-студия 3D» дизайнер может создать новые объекты прямо в самой программе, модифицируя уже имеющиеся.
· Основные возможности программы:
· простой и довольно удобный интерфейс;
· проектирование и изменение мебельных изделий;
· наличие нескольких видовых окон, которые позволяют точно устанавливать объекты;
· нанесение размеров и текста;
· просмотр проекта в 3D-режиме и реальном времени;
· достаточный для домашнего использования уровень реалистичности изображения;
· расширенные каталоги текстур и 3D-объектов с возможностью их добавления;
· формирование списка используемых изделий с их количеством и ценами.
«Дизайн-студия 3D» подойдет для создания проектов интерьера невысокой сложности.
2.5 VisiCon Pro
Программа «Визикон» предназначена для простого и оперативного дизайна интерьера и проектирования помещений, рассчитана на людей, не имеющих специальной технической подготовки. При помощи данной версии программы можно решать следующие задачи:
· Создавать проекты помещений различного функционального назначения (одна комната, несколько комнат).
· Расставлять мебель и предметы интерьера в заданном пространстве, в т.ч. проектирование кухни, ванной, офиса и других функциональных помещений на основе специализированных библиотек объектов.
· Просматривать полученные результаты в цветном объемном изображении, а также в аксонометрии.
· Получать количественную статистическую информацию по проекту (наименование и количество использованных элементов, размеры, площади проектируемого помещения и т.п.).
· Загружать текстуры и создавать собственные материалы.
· Рассчитывать количество кафельной плитки и других материалов (в модуле ПЛИТКА).
· Получать различные распечатки проекта и сохранять трехмерные изображения помещений в различных ракурсах в файлах графического формата.
· Создавать собственные объекты (в модуле ОБЪЕКТЫ).
Программа имеет довольно широкую библиотеку объектов. Все элементы создавались на основе каталогов российских компаний и максимально приближены к реальным образцам и размерам. Элементы визуально хорошо проработаны, а также имеют несколько поверхностей, что дает возможность пользователю создавать элементы со сложной раскраской. В библиотеке Профессиональной версии представлено около 700 различных объектов, они хорошо структурированы и разбиты по тематическим направлениям, что обеспечивает простой поиск нужного элемента, а также возможность создать практически любой несложный дизайн-проект на основе типовых элементов интерьера.
3. Требования к проекту
Данный проект разрабатывается с целью повышения эффективности работы с программными продуктами, которые предназначены для дизайна интерьера, путем интеграции в веб-сайт, так как некоторые пользователи неохотно устанавливают на свой компьютер какие-либо мало знакомые программы.
Также необходимо, чтобы разрабатываемая система поддерживала возможность трехмерной визуализации. Это позволит пользователю увидеть более точный результат проектирования, более близкий к реальности.
Данный проект должен иметь возможность добавления новых объектов в каталог. Для этого необходимо реализовать алгоритм работы с базами данных. Так же это облегчит хранение и изменение информации об объектах, пунктах меню и пользовательском интерфейсе.
Одной из самых важных задач является создание интерактивного пользовательского интерфейса. Он должен быть интуитивно понятен, нагляден и прост в эксплуатации.
4. Структура системы
Данная система включает в себя множество подпрограмм, которые имеют различное предназначение. Различаются они как по исходным данным, так и по возможности их применения. Все эти подпрограммы можно объединить в несколько групп:
· Подпрограммы по организации пользовательского интерфейса.
· Подпрограммы по организации работы с двухмерными объектами.
· Подпрограммы по организации работы с базами данных.
· Подпрограммы по организации трехмерной визуализации.
Работа данной системы напрямую зависит от действий пользователя. Через визуальный интерфейс пользователь управляет системой, запуская те или иные подпрограммы.
4.1 Блок подпрограмм по организации пользовательского интерфейса
Блок подпрограмм по организации пользовательского интерфейса включает в себя:
· Подпрограмма по рисованию сетки (рабочей области).
· Алгоритм, отвечающий за распознавание положения указателя мыши.
· Алгоритм, отвечающий за нажатие на определенный пункт меню или элемент.
· Подпрограмма по выводу пунктов меню на экран.
4.2 Блок подпрограмм по организации работы с двухмерными объектами
Блок подпрограмм по организации работы с двухмерными объектами включает в себя несколько подпрограмм, таких как:
· Алгоритм по созданию точки в рабочей области.
· Алгоритм по перемещению точки по рабочей области.
· Подпрограммы по созданию и перерисовке линий между точками.
· Подпрограмма по выделению объекта на рабочей области.
· Подпрограммы по перемещению объектов по рабочему полю.
· Подпрограммы по повороту объектов.
· Алгоритм очистки рабочего поля.
· Подпрограмма удаления выбранного объекта.
4.3 Блок подпрограмм по организации работы с базами данных
Этот блок включает в себя следующие подпрограммы:
· Классы разбора таблицы XML по элементам и атрибутам
· Универсальная подпрограмма по записи элементов и атрибутов из таблицы XML в различные массивы, в зависимости от раздела
· Подпрограммы частичного вывода элементов из таблицы XML на экран в зависимости от раздела
4.4 Блок подпрограмм по организации трехмерной визуализации
Данный блок включает в себя следующие подпрограммы и алгоритмы:
· Этап выбора объекта.
· Алгоритм создания объекта.
· Создание файла формата *.x3d.
· Запись в файл *.x3d.
5. Алгоритм трехмерной визуализации
Трехмерная визуализация является одним из важнейших преимуществ, при создании программного продукта в области дизайна интерьеров. Для пользователя, использующего программный продукт с возможностью трехмерной визуализации, доступна функция просмотра готового проекта в трехмерном виде, что ближе всего соотносится с конечной, физической планировкой.
Трехмерная визуализация может быть реализована несколькими способами.
Одним этих способов может являться создание всех объектов в трехмерном редакторе заранее. В процессе выполнения программы, данные объекты будут вставляться в определенные места в проекте. Данный метод может обеспечить более четкий, красивый и приятный вид объектов. Недостатком же такого метода является большой вес (объем в мегабайтах) объекта, что налагает определенные ограничения, например, при использовании в Интернет проектах. Данный метод является ресурсоемким по времени создания новых моделей, а также требует дополнительной производительности со стороны компьютера клиента.
Еще одним способом организации трехмерной визуализации является создание объектов программным путем, то есть непосредственно создание объекта в процессе работы программы. Объект может быть создан на стороне клиента, при локальной работе с программным продуктом. Также объект может быть создан на стороне сервера, при работе с удаленным программным продуктом. При создании объекта на стороне клиента, на его компьютер налагаются определенные требования по производительности. При создании объектов на стороне сервера, накладываются требования на пропускную способность принимающего Интернет канала.
В данной работе используется новый метод трехмерной визуализации. Для реализации данного метода был выбран специализированный язык описания трехмерных объектов X3D (eXtensible 3D). Данный язык имеет несколько отличительных особенностей:
· Возможность создавать сложные объекты.
· Работа с полигонами и двумерными объектами.
· Работа с текстом.
· Работа с текстурами.
· Создание освещения и анимации.
· Очень маленький объем (размер в мегабайтах) создаваемых объектов.
Главной особенностью используемого языка является синтаксис. Синтаксис языка X3D схож с синтаксисом распространенного формата для хранения структурированных данных XML (eXtensible Markup Language).
В данном методе трехмерные объекты создаются заранее. Эти объекты и являются исходными данными алгоритма.
Алгоритм трехмерной визуализации делится на несколько этапов, или процедур.
5.1 Этап выбора объекта
function createobj (arr_visible_w_in: Array, arr_visible_h_in: Array): Void {
tempobj.clear();
var w_in = arr_visible_w_in [select_number];
var h_in = arr_visible_h_in [select_number];
tempobj.beginFill(0x00FF00);
tempobj.moveTo (0, 0);
tempobj.lineTo (w_in, 0);
tempobj.lineTo (w_in, h_in);
tempobj.lineTo (0, h_in);
tempobj.lineTo (0, 0);
tempobj.endFill();
create_obj = true;
tempobj._x = _xmouse;
tempobj._y = _ymouse;
tempobj.startDrag();
};
Исходными данными на данном этапе являются:
· Массив arr_visible_w_in - массив данных, который содержит числовые значения ширины выбранного элемента.
· Массив arr_visible_h_in - массив данных, который содержит числовые значения длинны выбранного элемента.
· Объект tempobj - объект типа MovieClip
· Переменная select_number - переменная, содержащая числовое значение номера выбранного объекта.
Далее в объекте tempobj создается графический двумерный объект, по размерам, полученным из исходных данных (из элементов исходных массивов выбранного номера).
Логической переменной create_obj присваивается значение true, что обеспечит дальнейшую работу алгоритма.
Координаты объекта tempobj приравниваются к координатам мыши, и применяется функция startDrag(); (Функция startDrag() вызывает зрительное перемещение объекта за курсором мыши по экрану).
5.2 Алгоритм создания объекта
if ((x <= max_wallcoordx)&&(x>=min_wallcoordx)&&(y >= min_wallcoordy)&&(y <= max_wallcoordy)&&(create_obj)) {
tempobj.stopDrag();
obj_on_pole += 1;
tempobj.duplicateMovieClip («obj» + obj_on_pole, 30 + obj_on_pole);
tempobj.clear();
arr_category [obj_on_pole] = category;
arr_obj_num [obj_on_pole] = arr_visible_i [select_number];
arr_obj_x [obj_on_pole] = (_root [«obj» + obj_on_pole]._x)/10 - wmin/10 - center_pole_x;
arr_obj_y [obj_on_pole] = (_root [«obj» + obj_on_pole]._y)/10 - hmin/10 - center_pole_y;
arr_obj_w [obj_on_pole] = arr_visible_w [select_number];
arr_obj_h [obj_on_pole] = arr_visible_h [select_number];
obj_center_rot_x = _root [«obj» + obj_on_pole]._x;
obj_center_rot_y = _root [«obj» + obj_on_pole]._y;
arr_rotation [obj_on_pole] = 0;
var cat_name = arr_category [obj_on_pole];
objx3d.load («objx3d/«+ «obj» + cat_name + «_» + arr_obj_num [obj_on_pole] +».x3d»);
objx3d.onLoad = function (success: Boolean) {
if(success) {
arr_obj_string [obj_on_pole] = objx3d.toString(); // converts dots XML object to a string and stores it in dotsToXMLString.
} else {
trace(«Could not load XML»);
}
}
create_obj = false;
menu_obj[4].enabled = true;
menu_obj[4]._alpha = 100;
menu_obj[15].enabled = true;
menu_obj[15]._alpha = 100;
menu_obj[16].enabled = true;
menu_obj[16]._alpha = 100;
menu_obj[17].enabled = true;
menu_obj[17]._alpha = 100;
menu_obj[18].enabled = false;
menu_obj[18]._alpha = 50;
};
Исходными данными на данном этапе являются:
· Объект tempobj - объект типа MovieClip.
· Переменная obj_on_pole - содержащая числовое значение количества объектов в рабочем поле.
· Переменная category - содержащая числовой код выбранной категории товара.
· Переменная objx3d - переменная типа XML, в которую загружаются заранее созданные трехмерные объекты.
· Массивы arr_category - массив данных, содержащий числовой код категории для создаваемого объекта.
· Массивы arr_obj_num - массив данных, содержащий порядковый номер создаваемого объекта в базе данных
· Массивы arr_obj_x - массив данных, содержащий координату по x создаваемого объекта.
· Массивы arr_obj_y - массив данных, содержащий координату по y создаваемого объекта.
· Массивы arr_obj_h - массив данных, содержащий длину создаваемого объекта.
· Массивы arr_obj_w - массив данных, содержащий ширину создаваемого объекта.
· Массивы arr_rotation - массив данных, содержащий величину угла поворота создаваемого объекта.
· Массивы arr_visible_i - массив данных, содержащий порядковый номер выбранного элемента в базе данных.
· Массивы arr_visible_h - массив данных, содержащий длину выбранного элемента в базе данных.
· Массивы arr_visible_w - массив данных, содержащий ширину выбранного элемента в базе данных.
· Переменная select_number - переменная, содержащая числовое значение номера выбранного объекта.
Для того чтобы создать объект, необходимо, чтобы выполнялись следующие условия:
· Логическая переменная create_obj должна иметь значение true.
· Курсор мыши должен находиться в области рисования.
Если вышеуказанные условия выполняются, то программа приступает к созданию объекта. К объекту tempobj применяется функция stopDrag() (данная функция останавливает перетаскивание объекта по экрану). Переменной obj_on_pole приплюсовывается единица, то есть увеличивается количество объектов на рабочем поле. Из объекта tempobj создается дубликат с именем «obj» + obj_on_pole. Все параметры объекта tempobj дублируются для полученного объекта автоматически.
Элементам массивов arr_category, arr_obj_num, arr_obj_x, arr_obj_y, arr_obj_w, arr_obj_h, arr_rotation с номером obj_on_pole присваиваются начальные значения.
Создается временная переменная cat_name, которой присваивается элемент массива arr_category с номером obj_on_pole.
К объекту objx3d применяется функция load() (функция загружает в объект типа XML файл, который находится по указанному адресу). Отслеживается загрузка файла функцией onLoad() (функция возвращает значение логической переменной, значение которой зависит удачной или не удачной загрузки). Если загрузка прошли успешно, то элементу массива arr_obj_string с номером obj_on_pole присваивается результирующее значение функции toString(), примененной к объекту objx3d (функция toString преобразовывает содержимое объекта типа XML в строку).
Последним шагом данного этапа является присвоение логической переменной create_obj значение false, что обезопасит от создания объекта повторно.
5.3 Создание файла формата *.x3d
if ((menu_obj_flag[15])&&(obj_on_pole!= 0)) {
obj_string = «<X3D><Scane><Group><Viewpoint centerOfRotation» + chr(61) + chr(34) + «0 0 0» + chr(34) + «/>»;
for (var n_i = 1; n_i <= obj_on_pole; n_i++) {
obj_string = obj_string + «<Transform translation» + chr(61) + chr(34) + int((arr_obj_x [n_i])*10)/10 +» «+ int((arr_obj_y [n_i])*10)/10 +» «+ «0» + chr(34) +» «+ «rotation» + chr(61) + chr(34) + «0 0» + int((arr_rotation [n_i])*100)/100 + «» + «1» + chr(34) + «>»;
obj_string = obj_string + arr_obj_string [n_i];
if (n_i!= obj_on_pole) {
obj_string = obj_string + «</Transform></Group><Group>»;
}
};
obj_string = obj_string + «</Transform></Group></Scane></X3D>»
menu_obj_flag[15] = false;
loadVariables («writetofile.php», «», «POST»);
getURL («writetofile.php», «_blank»)
file_created = true;
menu_obj[15].enabled = false;
menu_obj[15]._alpha = 50;
menu_obj[18].enabled = true;
menu_obj[18]._alpha = 100;
};
Исходными данными на данном этапе являются:
· Массив логических переменных menu_obj_flag - массив, содержащий информацию о том, какая кнопка была нажата пользователем.
· Переменная obj_on_pole - содержащая числовое значение количества объектов в рабочем поле.
· Массив arr_obj_string - массив данных, который содержит файлы с расширением *.x3d, преобразованные в строки.
· Логическую переменную file_created - переменная, являющаяся флагом для загрузки результирующего файла. Ее исходное значение ровно false.
· Массивы arr_obj_x - массив данных, содержащий координату по x создаваемого объекта
· Массивы arr_obj_y - массив данных, содержащий координату по y создаваемого объекта
· Массивы arr_rotation - массив данных, содержащий величину угла поворота создаваемого объекта
· Переменная obj_string - строковая переменная, в которой будет создаваться содержимое результирующего файла.
Для того чтобы создать данный файл необходимо добавить к каждому элементу массива arr_obj_string соответствующие элементы массивов arr_obj_x, arr_obj_y и arr_rotation.
Трансформация объекта в языке X3D осуществляется путем заключения кода, описывающего объект, в парные теги <Transform></Transform>. Для перемещения объекта относительно центра сцены используется атрибут translation, а для поворота объекта вокруг его центра используется атрибут rotation. Оба этих атрибута помещаются в тело открывающего тега <Transform>.
Для реализации добавления параметров к каждому элементу к переменной obj_string необходимо добавить строку, которая содержит открывающие теги сцены, формата X3D, группы и координаты положения камеры (<X3D><Scane><Group><Viewpoint centerOfRotation = «0 0 0»/>). На следующем шаге создается цикл for.… Создается временная переменная n_i, которая является индикатором цикла. Осуществляется проход по отрезку от 1 до значения переменной obj_on_pole. При каждом проходе к строковой переменной obj_string прибавляется открывающий тег трансформации, атрибуты перемещения, поворота, а также соответственно значения элементов массива arr_obj_x, arr_obj_y, arr_rotation, номера которых ровны n_i («<Transform translation» + chr(61) + chr(34) + int((arr_obj_x [n_i])*10)/10 +» «+ int((arr_obj_y [n_i])*10)/10 +» «+ «0» + chr(34) +» «+ «rotation» + chr(61) + chr(34) + «0 0» + int((arr_rotation [n_i])*100)/100 + «» + «1» + chr(34) + «>). Далее к переменной obj_string прибавляется значение элемента массива arr_obj_string с номером n_i, а также, при условии, что элемент в цикле не последний, к переменной obj_string прибавляется закрывающий тег трансформации, закрывающий тег группы и открывающий тек группы (</Transform></Group><Group>).
По окончанию цикла к переменной obj_string прибавляется закрывающий тег трансформации, закрывающий тег группы, закрывающий тег сцены и закрывающий тек формата X3D (</Transform></Group></Scane></X3D>).
Вышеописанными преобразованиями в строковой переменной было сформировано содержание результирующего файла. Но пока файл еще не записан и остается пустым.
Так как язык Action Script не имеет средств для создания файлов, то данная задача может быть решена с помощью использования серверных языков. Для решения данной задачи используется язык программирования PHP.
Для передачи переменных из языка ActionScript во внешние сценарии используется функция loadVariables(). Существует два метода реализации передачи переменных:
· Метод GET. При использовании этого метода существуют ограничения на длину передаваемой информации. К тому же, информация передается открыто.
· Метод POST. Используется при передаче больших объемов информации.
На данном этапе используется метод POST, что позволяет не вводить ограничений на передаваемую информацию.
5.4 Запись в файл *.x3d
<? php
global $HTTP_POST_VARS;
$var1 = $_POST [«obj_string»];
$f_name = realpath («rdyroom.x3d»);
$file=fopen ($f_name, «w»);
fputs ($file, $var1);
fclose($file);
echo «-».$var1;
echo $f_name;
?>
Для записи в файл используется серверный язык программирования PHP.
Первым шагом для записи в файл становится получение значения переменной obj_string, в которой хранится содержание будущего файла. Так как передача переменных осуществлялась методом POST, то и получение должно осуществляться при помощи оператора $_POST[].
Далее, в переменную $f_name записывается абсолютный путь к файлу rdyroom.x3d, в который и будет производиться запись. Абсолютный путь вычисляется при использовании функции realpath(). Следующим шагом, является открытие файла для записи. Для этого применяется функция fopen(). Запись в файл производится с помощью функции fputs(). Для окончания записи необходимо закрыть файл использовав функцию fclose().
После выполнения данного сценария содержимое переменной obj_string записывается в файл rdyroom.x3d.
После окончания записи в файл логическая переменная file_created получает значение true.
6. Алгоритм работы с базами данных
Существуют различные виды баз данных. Среди них по модели представления данных различают:
· Картотеки.
· Иерархические.
· Сетевые.
· Реляционные.
· Многомерные.
· Объектно-ориентированные.
XML - это текстовый формат, предназначенный для хранения структурированных данных. Данный формат очень удобно использовать для обмена информацией между программами, а также просто для хранения информации с определенной структурой, которую программист может задавать сам, используя простой и понятный синтаксис. Формат XML строится на системе тегов (тэги обязаны быть парными, то есть открывающий и закрывающий).
Формат XML имеет иерархическую структуру, что подходит для описания практически любых документов.
Одним из достоинств данного формата является то, что он основан на международных стандартах, и для него имеются парсеры (синтаксические анализаторы) для большинства языков программирования, в том числе и для языка ActionScript.
6.1 Классы разбора таблицы XML по элементам и атрибутам
import mx.utils. Delegate; // подключаем Delegate class
class atherXml {
var file: String; // адрес xml-файла
private var _xml:XML = null; // загруженный объект xml
public var _data: Object = null; // результирующий объект с данными
public var lenght: Number = 0;
public var succ: Boolean = false;
public var end_parse: Boolean = false;
// Конструктор класса
public function atherXml (f: String) {
this.file = f;
this._xml = new XML(); // создаем объект xml
// игнорировать текстовые узлы состоящие из пробелов
this._xml.ignoreWhite = true;
// указываем облость действия обработчику
this._xml.onLoad = Delegate.create (this, xmlParser);
this._xml.load (this.file); // начинаем загрузку xml-документа
}
private function xmlParser(success):Void {
// метод Лоад возвращает успешность загрузки, флаг
if (success) {
this._data = new Object(); // инициализация объекта с данными
var group = this._xml.firstChild.firstChild; // указатель на первый элемент
while (group) {
// в цикле проходим по всем элементам
var elem_num = group.attributes.elem_num;
this._data [elem_num] = new Object();
this._data [elem_num] ['gr_name'] = group.attributes.gr_name;
this._data [elem_num] ['items'] = new Object;
var item = group.firstChild; // первый ребенок группы
while(item) {
// цикл по детям
var prop_num = item.attributes.prop_num;
this._data [elem_num] ['items'] [prop_num] = new Object();
this._data [elem_num] ['items'] [prop_num] ['name'] = item.attributes.name;
this._data [elem_num] ['items'] [prop_num] ['description'] = item.firstChild.nodeValue;
item = item.nextSibling;
}
group = group.nextSibling;
lenght = lenght + 1;
}
}
// функция для использования полученных данных
_root.parseather(success);
end_parse = true;
}
}
Загрузка и синтаксический анализ файла *.xml может потребовать большое количество времени и памяти. Поэтому для облегчения более быстрой загрузки и разбора данных созданы несколько идентичных классов, которые позволяют осуществлять параллельную загрузку элементов для каждого раздела.
Все эти классы используют идентичный алгоритм, поэтому достаточно описать только один из них, чтобы понимать, как работают остальные. Каждый из этих классов является синтаксическим анализатором (парсером), который нацелен на то, чтобы разбивать файл формата XML, который имеет определенную структуру, на элементы и атрибуты.
Исходными данными для данного алгоритма является только имя файла *.xml, которое хранится в переменной f. Класс делиться на несколько разделов. Первый из них, это раздел объявления переменных. Второй раздел - это конструктор класса. В этом разделе переменной file мы присваиваем значение переменной f. (переменная f является временной переменной). Далее создается новый объект типа XML под именем _xml. Объекты типа XML имеют метод ignoreWhite (данный метод позволяет пропускать поля, содержащие только пробелы, если значение установлено как true). После установки метода ignoreWhite для элемента _xml в значение true начинается загрузка файла.
Запускается подпрограмма класса xmlParser(). Входными данными для нее является логическая переменная success.
Если ее значение ровно true, то создается новый объект _data типа Object. Далее создается временная переменная group, которая служит указателем на первый элемент.
В цикле while… проходим по всем элементам. Создается временная переменная elem_num, которая является указателем на атрибут элемента (содержит номер группы). Переменная _data [elem_num] объявляется как объект. Объекту _data [elem_num] [`gr_name'] присваивается значение имя группы элемента. Переменная _data [elem_num] [`items'] объявляется как объект. Далее осуществляется проход по детям объекта _data [elem_num] [`items'].
По окончанию прохода запускается внешняя функция, которая записывает все элементы в массивы, в зависимости от имени группы.
6.2 Универсальная подпрограмма по записи элементов и атрибутов из таблицы XML в различные массивы, в зависимости от раздела
function unisersalPars (in_xml:menuXml, in_k: Number, num_in: String, type_in: Array, url_in: Array, x_in: Array, y_in: Array, obj_in: Array, obj_flag: Array, w_in: Array, h_in: Array) {
for (var prop_num in in_xml._data [num_in] ['items']) {
// Если имя параметра URL, то оно записывается в массив URL
if (in_xml._data [num_in] ['items'] [prop_num] ['name'] == «url») {
url_in[num] = in_xml._data [num_in] ['items'] [prop_num] ['description'];
flag_url = true;
}
// Если имя параметра X, то оно записывается в массив X
if (in_xml._data [num_in] ['items'] [prop_num] ['name'] == «x») {
x_in[num] = in_xml._data [num_in] ['items'] [prop_num] ['description'];
flag_x = true;
}
// Если имя параметра Y, то оно записывается в массив Y
if (in_xml._data [num_in] ['items'] [prop_num] ['name'] == «y») {
y_in[num] = in_xml._data [num_in] ['items'] [prop_num] ['description'];
flag_y = true;
}
// Если имя параметра W, то оно записывается в массив W
if (in_xml._data [num_in] ['items'] [prop_num] ['name'] == «w») {
w_in[num] = in_xml._data [num_in] ['items'] [prop_num] ['description'];
flag_w = true;
}
// Если имя параметра H, то оно записывается в массив H
if (in_xml._data [num_in] ['items'] [prop_num] ['name'] == «h») {
h_in[num] = in_xml._data [num_in] ['items'] [prop_num] ['description'];
flag_h = true;
}
if ((flag_url) && (flag_x) && (flag_y)) {
partview (x_in, y_in, url_in, obj_in, obj_flag, in_k);
};
};
};
Исходными данными для данной подпрограммы являются:
· Переменная in_xml - переменная, содержащая разобранный на элементы и атрибуты файл *.xml.
· Переменная i_in - переменная, которая содержит величину смещения глубины.
· Переменная num_in - переменная, которая содержит строковое значение количества элементов для данного раздела.
· Массив type_in - массив переменных, который содержит имя группы для каждого элемента.
· Массив url_in - массив переменных, который содержит имя файла картинки для каждого элемента.
· Массив x_in - массив переменных, который содержит координату по оси x, в которую будет установлен элемент на рабочем поле.
· Массив y_in - массив переменных, который содержит координату по оси y, в которую будет установлен элемент на рабочем поле.
· Массив obj_in - массив переменных типа MovieClip, в котором содержаться объекты.
· Массив obj_flag - массив логических переменных.
· Массив h_in - массив переменных, который содержит значение ширины каждого элемента.
· Массив w_in - массив переменных, который содержит значение длины каждого элемента.
Данный алгоритм основан на переборе элементов. В цикле for…, который проходит по всем элементам объекта in_xml. Далее начинается заполнение исходных массивов. Если выполняется равенство для элемента in_xml._data [num_in] ['items'] [prop_num] ['name'], то элементу соответствующего массива присваивается значение элемента in_xml._data [num_in] ['items'] [prop_num] ['description'].
После окончания работы подпрограммы получаем сформированные массивы данных для определенного раздела.
6.3 Подпрограммы частичного вывода элементов из таблицы XML на экран в зависимости от раздела
function partview (x_in_i: Array, y_in_i: Array, url_in_i: Array, obj_in_i: Array, obj_flag_i: Array, in_k_i: Number, w_in_i: Array, h_in_i: Array): Void {
if (type_of_obj == «bed») {
if ((menu_obj_flag[8])&&(! bed_menu_open)) {
last_num = 0;
for (var n_i = 1; n_i <=5; n_i++) {
name = type_of_obj + n_i;
obj_in_i [n_i] = _root.createEmptyMovieClip (name, n_i+in_k_i);
loadMovie (url_in_i [n_beds - n_i + 1], obj_in_i [n_i]);
arr_visible_i [n_i] = n_beds - n_i + 1;
arr_visible_w [n_i] = w_in_i [n_beds - n_i + 1];
arr_visible_h [n_i] = h_in_i [n_beds - n_i + 1];
if (last_num == 0) {
obj_in_i [n_i]._y = menu_obj[8]._y + 10 + last_num*40 + 30;
obj_in_i [n_i]._x = parseFloat (x_in_i [n_beds - n_i + 1]);
} else {
obj_in_i [n_i]._y = menu_obj[8]._y + 10 + last_num*40 + 30 + last_num*10;
obj_in_i [n_i]._x = parseFloat (x_in_i [n_beds - n_i + 1]);
};
if ((x_in_i [n_beds - n_i]!= 0)&&(last_num <n_beds - 5)) {
last_num += 1;
};
obj_flag_i [n_i] = false;
obj_in_i [n_i]._alpha = 100;
obj_in_i [n_i].enabled = true;
};
};
if ((menu_obj_flag[6])&&(bed_menu_open)&&(last_num < n_beds)) {
var buf_last = last_num;
for (var n_i = 1; n_i <=5; n_i++) {
if (url_in_i [n_beds - n_i + 1]!= undefined) {
loadMovie (url_in_i [n_beds - (n_i + buf_last) + 1], obj_in_i [n_i]);
arr_visible_i [n_i] = n_beds - (n_i + buf_last) + 1;
arr_visible_w [n_i] = w_in_i [n_beds - (n_i + buf_last) + 1];
arr_visible_h [n_i] = h_in_i [n_beds - (n_i + buf_last) + 1];
}
if ((x_in_i [n_beds - (n_i + buf_last) + 1]!= 0)&&(last_num <n_beds)) {
last_num += 1;
};
obj_flag_i [n_i] = false;
};
};
if ((menu_obj_flag[7])&&(bed_menu_open)&&(last_num > 1)) {
var buf_last = last_num;
for (var n_i = 1; n_i <=5; n_i++) {
if (url_in_i [n_beds - n_i + 1]!= undefined) {
loadMovie (url_in_i [n_beds - (buf_last - n_i)], obj_in_i [Math.abs (n_i-6)]);
arr_visible_i [Math.abs (n_i-6)] = n_beds - (buf_last - n_i);
arr_visible_w [Math.abs (n_i-6)] = w_in_i [n_beds - (buf_last - n_i)];
arr_visible_h [Math.abs (n_i-6)] = h_in_i [n_beds - (buf_last - n_i)];
}
if ((x_in_i [n_tables - (buf_last - n_i)]!= 0)&&(last_num <= n_beds)) {
last_num -= 1;
};
obj_flag_i [n_i] = false;
};
};
flag_url = false;
flag_x = false;
flag_y = false;
};
};
Исходными данными для данного алгоритма являются:
· Переменная i_in_i - переменная, которая содержит величину смещения глубины.
· Переменная type_of_obj - переменная, которая содержит имя раздела.
· Массив url_in_i - массив переменных, который содержит имя файла картинки для каждого элемента.
· Массив x_in_i - массив переменных, который содержит координату по оси x, в которую будет установлен элемент на рабочем поле.
· Массив y_in_i - массив переменных, который содержит координату по оси y, в которую будет установлен элемент на рабочем поле.
· Массив obj_in_i - массив переменных типа MovieClip, в котором содержаться объекты.
· Массив obj_flag_i - массив логических переменных.
· Массив h_in_i - массив переменных, который содержит значение ширины каждого элемента.
· Массив w_in_i - массив переменных, который содержит значение длины каждого элемента.
Данный алгоритм начинает свою работу с условного оператора. Необходимо установить, к какому разделу относится тот или иной объект. Если переменная type_of_obj удовлетворяет условию, то начинает непосредственный вывод элементов на экран. При начале вывода необходимо проверить несколько условий:
· Какая кнопка была нажата пользователем.
· Открыт ли раздел.
Если в первый раз нажата кнопка раздела, то раздел открывается. Это происходит по следующему алгоритму:
· Переменная last_num содержит в себе номер последнего выведенного на экран элемента. Эта переменная обнуляется, так как открытие раздела производится впервые.
· Запускается цикл for… проходящий от 1 до 5 (переменная n_i является счетчиком цикла).
· Переменная name содержит в себе имя будущего MovieClip'а.
· В элемент массива obj_in_i с номером n_i создается пустой MovieClip.
· В этот MovieClip помещается картинка, имя которой содержится в массиве url_in_i.
· Элементам массивов arr_visible_i, arr_visible_h, arr_visible, w присваиваются номер, ширина и длинна элемента соответственно.
· Значение переменной last_num увеличивается на 1.
· Счетчик цикла увеличивается на 1.
Если раздел открыт, и нажата кнопка перелистывания элементов, то алгоритм работы следующий:
· Создается временная переменная buf_last. Ей присваивается значение переменной last_name.
· Запускается цикл for… проходящий от 1 до 5 (переменная n_i является счетчиком цикла).
· В элемент массива obj_in_i с номером n_i помещается картинка, имя которой содержится в массиве url_in_i.
· Элементам массивов arr_visible_i, arr_visible_h, arr_visible, w присваиваются номер, ширина и длинна элемента соответственно.
· Значение переменной last_num увеличивается на 1.
· Счетчик цикла увеличивается на 1
Данный алгоритм универсален для любого раздела.
7. Алгоритмы работы с двухмерными объектами
7.1 Алгоритм по созданию точки в рабочей области
if ((x + (w_p/2) > wmax) or (y + (h_p/2) > hmax) or (drawing_end) or (x - (w_p/2) < wmin) or (y - (h_p/2) < hmin)) {
flag1 = false;
};
// Если происходит попытка поставить точку в зоне рисования,
// то срабатывает механизм включения рисования
if (((x + (w_p/2) < wmax) && (y + (h_p/2) < hmax) && (x - (w_p/2) > wmin) && (y - (h_p/2) > hmin))&&(! flag2)&&(! drawing_end)&&(! create_obj)) {
flag1 = true;
};
// При нажатии на левую кнопку мыши в зоне рисования ставим точку
if (flag1) {
arr_coordx[i] = Math.floor((x + step/2)/step)*step;
arr_coordy[i] = Math.floor((y + step/2)/step)*step;
// Если коокдинаты точки соответствуют координатам начальной точки, то линия замыкается
// и рисование перестает быть возможным
if ((arr_coordx[i] == arr_coordx[1])&&(arr_coordy[i] == arr_coordy[1]) && (i!= 1)) {
drawlastline(i);
drawing_end = true;
menu_obj[2]._alpha = 50;
menu_obj[2].enabled = false;
menu_obj[3]._alpha = 100;
menu_obj[3].enabled = true;
} else {
// Рисуем непосредственно точку
menu_obj[1]._alpha = 100;
menu_obj[1].enabled = true;
arr_p[i] = points.createEmptyMovieClip («mc»+i, i);
createpoint (arr_p[i], color);
arr_p[i]._x = arr_coordx[i] - w_p/2;
arr_p[i]._y = arr_coordy[i] - h_p/2;
arr_coordx[select] = arr_p[select]._x + w_p/2;
arr_coordy[select] = arr_p[select]._y + h_p/2;
if (i!= 1) {
drawline(i);
};
i = i + 1;
};
};
Для того, чтобы поставить точку в рабочей области, необходимо сначала удостовериться, что указатель мыши находится в области рисования. Также, необходимо учитывать то, что линия может быть уже замкнута. Для этого в условном операторе if отслеживаются координаты мыши по оси x и y, а также значение логической переменной drawing_end.
Если все условия выполняются, то логическая переменная flag1 принимает значение true. Это позволяет при нажатии левой кнопки мыши создать точку.
Создание точки происходит по следующему алгоритму:
· В массивы arr_coordx и arr_coordy помещаются округленные значения координат мыши по осям x и y соответственно. Округление производится для того, чтобы точка попала точно в перекрестие сетки.
· В условном операторе сравниваются значения создаваемой точки с координатами первой точка, а также значение переменной i, в которой хранится количество точек на рабочем поле, с единицей.
· Если условие выполняется, то запускается функция drawlastline() (которая рисует последнюю, замыкающую линию). Также, логической переменной drawing_end присваивается значение true.
· Если условие не выполняется, то в элементе массива arr_p под номером i создается пустой MovieClip.
· Запускается функция рисования точки, исходными данными для которой являются MovieClip, и числовое значение цвета создаваемой точки.
· В элементе массива arr_p с номером i рисуется точка.
· Устанавливаются координаты для этого MovieClip'а.
· В условном операторе if значение переменной i сравнивается с единицей. Если условие не выполняется, то запускается подпрограмма по рисованию линии.
· Переменная i увеличивается на единицу.
7.2 Алгоритм по перемещению точки по рабочей области
a)
if (flag2) {
x_temp = Math.floor((x + step/2)/step)*step;
y_temp = Math.floor((y + step/2)/step)*step;
for (var n=1; n<=i-1; n++) {
if ((x_temp == arr_coordx[n]) && (y_temp == arr_coordy[n])) {
select_flag = true;
select = n;
createborder (n, w_p, h_p);
arr_p[n].startDrag();
};
};
};
b)
if (select_flag) {
borderlayer.clear();
x = _xmouse;
y = _ymouse;
arr_coordx[select] = Math.floor((x + step/2)/step)*step;
arr_coordy[select] = Math.floor((y + step/2)/step)*step;
if (select == 1) {
arr_coordx[i] = arr_coordx[1];
arr_coordy[i] = arr_coordy[1];
arr_p[select]._x = arr_coordx[select] - w_p/2;
arr_p[select]._y = arr_coordy[select] - h_p/2;
} else {
arr_p[select]._x = arr_coordx[select] - w_p/2;
arr_p[select]._y = arr_coordy[select] - h_p/2;
arr_coordx[select] = arr_p[select]._x + w_p/2;
arr_coordy[select] = arr_p[select]._y + h_p/2;
};
redrawline(select);
createborder (select, w_p, h_p);
};
c)
if (select_flag) {
arr_p[select].stopDrag();
arr_coordx[select] = Math.floor((x + step/2)/step)*step;
arr_coordy[select] = Math.floor((y + step/2)/step)*step;
arr_p[select]._x = arr_coordx[select] - w_p/2;
arr_p[select]._y = arr_coordy[select] - h_p/2;
arr_coordx[select] = arr_p[select]._x + w_p/2;
arr_coordy[select] = arr_p[select]._y + h_p/2;
select_flag = false;
};
Данный алгоритм позволяет определить местонахождение точки на рабочем поле и узнать ее номер.
Алгоритм реализуется следующими действиями:
· Переменным x_temp и y_temp присваивается округленное значение текущих координат положения мыши.
· Запускается цикл for…, счетчиком которого является временная переменная n. Цикл проходит отрезок от 1 до i-1 с шагом 1.
· В теле цикла выполняется условный оператор if. В нем проверяется равенство переменных x_temp и y_temp соответственно элементам массивов arr_coordx и arr_coordy с номерами n.
· При выполнении условий логической переменной select_flag присваивается значение true.
· Переменной select присваивается значение переменной n (номер выделяемой точки).
· Запускается подпрограмма createborder(), которая отвечает за рисования рамки вокруг точки.
· К элементу массива arr_p с номером n применяется функция startDrag() (Эта функция позволяет перетаскивать объект по экрану)
При перемещении указателя мыши по рабочей области с нажатой левой кнопкой мыши происходит перетаскивание точки:
· Если значение логической переменной select_flag ровно true, то очищается MovieClip с именем borderlayer. В данном объекте рисуется рамка, вокруг точки.
· Переменным x и y присваиваются значения координат указателя мыши.
· Элементам массивов arr_coordx и arr_coordy c номерами select присваиваются округленные значения координат по оси x и y соответственно.
· MovieClip'ам массива arr_p с номерами select присваиваются новые значения координат по осям x и y.
· Запускается подпрограмма redrawline(), которая отвечает за перерисовку линий.
· Запускается подпрограмма createborder(), которая отвечает за рисования рамки вокруг точки.
При прекращении нажатия на левую кнопку мыши и значении true логической переменной select_flag происходят следующие события:
· К элементу массива arr_p с номером select применяется функция stopDrag(), которая прекращает перетаскивание объекта по экрану.
· Элементам массивов arr_coordx и arr_coordy присваиваются новые значения координат.
· Логической переменной select_flag присваивается значение flase.
Данный алгоритм позволяет определить номер точки на рабочем поле по ее координатам, а также позволяет предусмотреть случайное рисование точки за пределами рабочей области.
7.3 Подпрограммы по созданию и перерисовке линий между точками
function drawline (i_l: Number): Void {
k = i_l;
arr_l [i_l-1] = linelayer.createEmptyMovieClip («line» + i_l, k);
arr_l [i_l-1].lineStyle (1, colorl);
arr_l [i_l-1].moveTo (arr_coordx [i_l-1], arr_coordy [i_l-1]);
arr_l [i_l-1].lineTo (arr_coordx [i_l], arr_coordy [i_l]);
};
Исходными данными для алгоритма по созданию линий между точками является переменная i_l, в которой хранится значение номера рисуемой точки.
Алгоритм работает по следующей схеме:
· В переменную k копируется значение переменной i_l
· В элементе массива arr_l с номером (i_l - 1) создается пустой MovieClip.
· В нем рисуется линия от точки под номером (i_l - 1) к точке с номером i_l.
Для создания последней, замыкающей контур линии линия рисуется от точки под номером i_l к точке под номером 1.
function drawlastline (i_l: Number): Void {
k = i_l;
arr_l [i_l-1] = linelayer.createEmptyMovieClip («line» + i_l, k);
arr_l [i_l-1].lineStyle (1, colorl);
arr_l [i_l-1].lineTo (arr_coordx[1], arr_coordy[1]);
};
Исходными данными для алгоритма по перерисовке линий являются:
· Номер выделенной точки (переменная i_l).
· Массив arr_l - массив объектов типа MovieClip, содержащий нарисованные линии
· Переменная colorl - переменная, содержащая числовое значение цвета рисуемой линии.
· Массивы arr_coordx и arr_coordy - массивы переменных, содержащие координаты точек по оси x и y соответственно.
function redrawline (i_l: Number): Void {
if ((i_l == 1) && (drawing_end)) {
arr_l [i_l].clear();
arr_l [i_l].lineStyle (1, colorl);
arr_l [i_l].moveTo (arr_coordx [i_l], arr_coordy [i_l]);
arr_l [i_l].lineTo (arr_coordx [i_l+1], arr_coordy [i_l+1]);
arr_l [i-1].clear();
arr_l [i-1].lineStyle (1, colorl);
arr_l [i-1].moveTo (arr_coordx [i-1], arr_coordy [i-1]);
arr_l [i-1].lineTo (arr_coordx[1], arr_coordy[1]);
} else if (i_l == (i - 1)) {
arr_l [i_l-1].clear();
arr_l [i_l-1].lineStyle (1, colorl);
arr_l [i_l-1].moveTo (arr_coordx [i_l-1], arr_coordy [i_l-1]);
arr_l [i_l-1].lineTo (arr_coordx [i_l], arr_coordy [i_l]);
arr_l [i_l].clear();
arr_l [i_l].lineStyle (1, colorl);
arr_l [i_l].moveTo (arr_coordx [i_l], arr_coordy [i_l]);
arr_l [i_l].lineTo (arr_coordx[1], arr_coordy[1]);
} else {
arr_l [i_l-1].clear();
arr_l [i_l-1].lineStyle (1, colorl);
arr_l [i_l-1].moveTo (arr_coordx [i_l-1], arr_coordy [i_l-1]);
arr_l [i_l-1].lineTo (arr_coordx [i_l], arr_coordy [i_l]);
arr_l [i_l].clear();
arr_l [i_l].lineStyle (1, colorl);
arr_l [i_l].moveTo (arr_coordx [i_l], arr_coordy [i_l]);
arr_l [i_l].lineTo (arr_coordx [i_l+1], arr_coordy [i_l+1]);
};
};
Алгоритм работает по следующей схеме:
· Если номер выделенной точки равен единице и рисование закончено (значение переменной i_l равен 1 и логическая переменная drawing_end принимает значение true), то очищаются элементы массива arr_l с номерами i_l и (i - 1). Далее по новым координатам рисуются линии, которые входят и исходят из точки под номером 1.
...Подобные документы
Универсальная подпрограмма по записи элементов и атрибутов из таблицы XML в различные массивы, в зависимости от раздела. Алгоритм трехмерной визуализации. Классы разбора таблицы XML по элементам и атрибутам. Алгоритмы работы с двухмерными объектами.
дипломная работа [425,9 K], добавлен 06.03.2013Рассмотрение и характеристика специфических особенностей 3D Studio MAX - единственного программного комплекса моделирования, визуализации и анимации объектов, разработанный фирмой Autodesk. Ознакомление с общим представлением о трехмерной графике.
дипломная работа [1,5 M], добавлен 17.07.2017Возможности библиотеки OpenGL, создание матрицы и эффекта тумана. Разработка процедуры визуализации трехмерной модели "Корабль", интерфейса пользователя и подсистемы управления событиями. Логическая структура и функциональная декомпозиция проекта.
курсовая работа [507,2 K], добавлен 02.07.2011Анализ предметной области. Сравнительный анализ систем визуализации трёхмерных объектов. Обоснование выбора среды программирования. Разработка базы данных. Архитектура программного продукта. Алгоритм шифрования Blowfish с обратной связью по шифр-тексту.
дипломная работа [5,3 M], добавлен 22.11.2015Основы проектирования 3D моделей реального мира в программном продукте Dev C++. Выбор и обоснование языка программирования. Реализация построения интерактивной модели. Минимальные требования к технической базе. Алгоритм визуализации спортивного зала.
курсовая работа [2,1 M], добавлен 20.04.2014Программирование приложения с использованием библиотеки OpenGL и функции для рисования геометрических объектов. Разработка процедуры визуализации трехмерной сцены и интерфейса пользователя. Логическая структура и функциональная декомпозиция проекта.
курсовая работа [1,1 M], добавлен 23.06.2011Формулы поверхностей, матрицы основных и перспективных преобразований. Этапы проектирования трехмерной сцены в нестандартном графическом режиме 320х200 точек на 256 цветов. Блок-схема головной программы, процедуры отрисовки линии и поворота всей фигуры.
курсовая работа [565,5 K], добавлен 21.12.2012Санитарно-гигиенические требования к кабинету истории: комплекту мебели и аппаратуре. Организация рабочих мест учителя и обучающихся и принципы оформления интерьера кабинета. Использование Microsoft Excel для создания проекта дизайна в программе ArCon.
реферат [710,5 K], добавлен 13.11.2011Функциональные возможности библиотеки OpenGL. Разработка процедуры визуализации трехмерной сцены, интерфейса пользователя и подсистемы управления событиями с целью создания приложения для построения динамического изображения 3D-модели объекта "Самолет".
курсовая работа [1,7 M], добавлен 28.06.2011Принципы программирования и приоритеты использования библиотеки OреnG1, ее архитектура, описание математического аппарата и проекции. Разработка процедуры визуализации трехмерной сцены, подсистемы управлениями событиями и руководства пользователя.
курсовая работа [1,0 M], добавлен 26.06.2011Основы программирования с использованием библиотеки OpenGL. Приложение для построения динамического изображения модели объекта "Батискаф": разработка процедуры визуализации трехмерной схемы, интерфейса пользователя и подсистемы управления событиями.
курсовая работа [1,4 M], добавлен 26.06.2011Особенности разработки и реализации модулей двухмерной и трехмерной визуализации. Основные задачи трехмерного модуля управления. Анализ функций модуля управления ParamColorDrawer. Характерные особенности схемы функционирования программного средства.
реферат [2,2 M], добавлен 07.03.2012Программирование с использованием библиотеки ОреnGl: возможности, работа с матрицами, синтаксист команд, освещение, спецификация материалов, создание эффекта тумана. Разработка визуализации трехмерной сцены. Информационное и программное обеспечение.
курсовая работа [39,2 K], добавлен 23.06.2011Подбор игрового движка и описание его основных характеристик. Разработка структуры, алгоритма и интерфейса программы. Проектирование иерархии классов. Выделение типового приема визуализации. Тестирование правильности работы программного обеспечения.
курсовая работа [3,1 M], добавлен 19.01.2017Разработка трехмерной модели судна на уровне эскизного проекта в системе автоматизированного проектирования CATIA v5 R19. Технология и этапы автоматизированного проектирования. Параметризация и декомпозиция судна как сборки. Принципы работы в CATIA.
методичка [597,5 K], добавлен 21.01.2013Описание процесса проектирования информационно–справочной системы с помощью среды разработки PascalABC.Net, ее использование для регистрации обращений в медицинское учреждение. Логическая структура программы, алгоритм ее работы, особенности интерфейса.
курсовая работа [628,8 K], добавлен 07.06.2017Разработка технической демонстрационной версии трехмерной компьютерной ролевой игры "After Reset". Установка, запуск и минимальные требования программы. Анализ алгоритмов. Архитектура системы и иерархия классов. Тестирование программного обеспечения.
дипломная работа [3,4 M], добавлен 19.07.2014Построение перспективной проекции, алгоритм удаления невидимых линий и поверхностей, получения изменений формы и движения объекта. Обобщенная структурная диаграмма программы, предназначение данных и основных переменных. Блок-схема процедур и функций.
курсовая работа [2,0 M], добавлен 08.02.2011Построение трехмерной модели узла редуктора и ее частичная параметризация. Составление параметрической модели вала, служащего для сохранения положения подшипников на своих местах. Алгоритм создания узла и его сборки. Оценка программных сред разработки.
курсовая работа [761,4 K], добавлен 15.01.2009Алгоритм генерации фрактальных ландшафтов. Обоснование выбора языка программирования. Требования к параметрам технических средств. Документация по работе с библиотекой. Составляющие трехуровневого анализа продукта. Основы технико-экономических расчетов.
дипломная работа [1,3 M], добавлен 17.07.2016