Разработка базы данных 3D-объектов системы проектирования интерьеров
Универсальная подпрограмма по записи элементов и атрибутов из таблицы XML в различные массивы, в зависимости от раздела. Алгоритм трехмерной визуализации. Классы разбора таблицы XML по элементам и атрибутам. Алгоритмы работы с двухмерными объектами.
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
//то срабатывает миханизм включения рисования
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 увеличивается на единицу.
2.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.
Данный алгоритм позволяет определить номер точки на рабочем поле по ее координатам, а также позволяет предусмотреть случайное рисование точки за пределами рабочей области.
2.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].moveTo(arr_coordx[i_l-1], arr_coordy[i_l-1]);
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.
Если переменная i_l (номер выделенной точки)принимает значение (i - 1), то очищаются элементы массива arr_l с номерами i_l-1 и i_l. Далее по новым координатам рисуются линии, которые входят и исходят из точки под номером i_l. Особенность данного условия заключается в том, что перерисовывается линия, конечной точкой которой является точка под номером 1 (исходящая линия).
В остальных случаях очищаются элементы массива arr_l с номерами i_l-1 и i_l. Далее по новым координатам рисуются линии, которые входят и исходят из точки под номером i_l.
Эти условия предусматривают все возможные варианты перемещения точек.
2.7.4 Подпрограмма по выделению объекта на рабочей области
function testofhit() : Void {
for (var n_i = 1; n_i <= obj_on_pole; n_i++) {
if (selectpixl.hitTest(_root["obj" + n_i])) {
rdy_to_select = true;
select_num = n_i;
};
};
};
Исходными данными для данного алгоритма являются:
Логическая переменная select_obj - переменная, отвечающая за нажатие любой кнопки меню, отвечающей за трансформацию объекта (если принимает значение true, то кнопка меню нажата)
Группа объектов типа MovieClip, созданных в рабочем поле (имена этих объектов obj1, obj2 и т.д.)
Переменная obj_on_pole - переменная, в которой храниться количество объектов в рабочем поле
Логическая переменная rdy_to_select - данная переменная исходным значением имеет false.
Объект типа MovieClip с именем selectpixl - этот объект содержит квадрат с размерами 1 на 1 пиксель.
Переменная select_num - в данной переменной храниться номер выделенного объекта
Алгоритм работает следующим образом:
При выполнении условия, что логическая переменная select_obj принимает значение true, и при движении мыши по рабочей области запускается подпрограмма testofhit().
В подпрограмме testofhit() запускается цикл for…, счетчиком которого является переменная n_i (переменная n_i лежит в отрезке между 1 и значением переменной obj_on_pole)
В теле цикла находиться условный оператор if. В нем проверяется условие столкновения объекта selectpixl с объектом obj1, obj2 и т.д. Если выполняется данное условие, то логической переменной rdy_to_select присваивается значение true, а переменной select_num значение счетчика n_i.
Данный алгоритм позволяет узнать номер объекта в рабочем поле, на котором сейчас находиться указатель мыши.
2.7.5 Подпрограммы по перемещению объектов по рабочему полю
a)
if ((rdy_to_select)&&(!rotate_obj)) {
selectpixl.stopDrag();
_root["obj" + select_num].startDrag();
_root["obj" + select_num]._alpha = 50;
select_obj = false;
rdy_to_select = false;
selected_obj = true;
};
b)
if ((selected_obj)&&(!rotate_obj)) {
_root["obj" + select_num]._alpha = 100;
_root["obj" + select_num].stopDrag();
arr_obj_x[select_num] = (_root["obj" + select_num]._x)/10 - wmin/10 - center_pole_x;
arr_obj_y[select_num] = (_root["obj" + select_num]._y)/10 - hmin/10 - center_pole_y;
obj_center_rot_x = _root["obj" + obj_on_pole]._x;
obj_center_rot_y = _root["obj" + obj_on_pole]._y;
testofhittrash();
selected_obj = false;
select_obj = false;
borderobj.clear();
};
Исходными данными для данного алгоритма являются:
Логическая переменная rdy_to_select - если значение переменной true, то объект выбран.
Логическая переменная rotate_obj - переменная, отвечающая за инициализацию поворота
Переменная select_num - переменная, в которой храниться номер выбранного объекта.
Объект типа MovieClip с именем obj + select_num - это и есть выделенный объект.
Логическая переменная selected_obj - начальное значение этой переменной false.
Массивы arr_obj_x, arr_obj_y - массивы, содержащие координаты по осям x и y для каждого созданного объекта.
Константы wmin и hmin - в них содержаться значения отступа рабочей области от левого верхнего угла.
Константы center_pole_x и center_pole_y - в этих координатах содержаться координаты центра рабочей области.
При нажатии на левую кнопку мыши выполняются следующие действия:
В условном операторе if проверяются значения переменных rdy_to_select и rotate_obj (значения должны быть ровны true и false соответственно)
К объекту типа MovieClip с именем obj + select_num применяется функция startDrag().
Прозрачность объекта снижается до 50%.
Логической переменной select_obj присваивается значение false.
Логической переменной rdy_to_select присваивается значение false.
Логической переменной selected_obj присваивается значение true.
При прекращении нажатия на левую кнопку мыши происходят следующие действия:
В условном операторе if проверяются значения переменных selected_obj и rotate_obj (должны бить ровны true и false соответственно)
Прозрачность объекта типа MovieClip с именем obj + select_num меняется на 100%.
К объекту применяется функция stopDrag().
В элемент массива arr_obj_x и arr_obj_y записываются преобразованные координаты объекта (преобразование ведется с целью перемещения точки отсчета в центр рабочей области)
Логической переменной selected_obj присваивается значение false.
Логической переменной select_obj присваивается значение false.
2.7.6 Подпрограммы по повороту объектов
a)
if ((rdy_to_select)&&(rotate_obj)) {
selectpixl.stopDrag();
if (select_num != old_select_num) {
obj_rotation_old = 0;
};
x_temp = _xmouse;
y_temp = _ymouse;
select_obj = false;
rdy_to_select = false;
selected_obj = true;
};
b)
if ((selected_obj)&&(rotate_obj)) {
obj_rotation = (y_temp - _ymouse)/Math.PI*180 / 10;
borderobj._rotation = obj_rotation + obj_rotation_old;
_root["obj" + select_num]._rotation = obj_rotation + obj_rotation_old;
};
c)
if ((selected_obj)&&(rotate_obj)) {
obj_rotation_old = obj_rotation_old + obj_rotation;
if (obj_rotation_old >= 360) {
obj_rotation_old = obj_rotation_old - 360;
};
arr_rotation[select_num] = obj_rotation_old * 0.0173;
selected_obj = false;
select_obj = false;
rotate_obj = false;
borderobj.clear();
old_select_num = select_num;
};
Исходными данными для данного алгоритма являются:
Логическая переменная rdy_to_select - если значение переменной true, то объект выбран.
Логическая переменная rotate_obj - переменная, отвечающая за инициализацию поворота
Переменная select_num - переменная, содержащая номер выделенного объекта.
Переменные x_temp и y_temp - в них хранятся координаты указателя мыши по осям x и y соответственно.
Переменная obj_rotation_old - в этой переменной хранится угол поворота объекта.
Переменная obj_rotation - в этой переменной храниться текущий угол поворота объекта.
Массив arr_rotation - массив элементов, который содержит величину угла поворота для каждого из объектом.
Логическая переменная selected_obj - начальное значение данной переменной ровно false.
Логическая переменная select_obj - переменная, отвечающая за выбор объекта.
При нажатии на левую кнопку мыши выполняются следующие действия:
Проверяется значения переменных rdy_to_select и rotate_obj (значения должны быть true для обеих переменных)
Переменным x_temp и y_temp присваиваются текущие координаты указателя мыши.
Переменной selected_obj присваивается значение true, а переменным select_obj и rdy_to_select значение false.
Если при нажатой левой кнопке мыши происходит перемещение указателя, то выполняются следующие действия:
Переменной obj_rotation присваивается значение угла поворота, в зависимости от разницы текущей координаты курсора мыши и переменной y_temp.
Объекту типа MovieClip с именем obj + select_num присваивается новое значение угла поворота, которое складывается из значения переменной obj_rotation_old и obj_rotation.
При прекращении нажатия на левую кнопку мыши происходят следующие действия:
Переменной obj_rotation_old присваивается новое значение.
В условном операторе if проверяется значение переменной obj_rotation_old (если оно больше 360, то из него вычитают 360)
Элементу массива arr_rotation с номером select_num присваивается новое значение, которое образуется путем умножения переменной obj_rotation_old на коэффициент (0.0173 - это коэффициент преобразования градусов в размерность формата X3D)
Логическим переменным rotate_obj и selected_obj присваиваются значение false.
2.7.7 Алгоритм очистки рабочего поля
if (menu_obj_flag[5]) {
for (var n_i = 1; n_i <= obj_on_pole; n_i = n_i + 1) {
_root["obj" + n_i].removeMovieClip();
arr_obj_string[n_i] = "";
arr_cotegory[n_i] = undefined;
arr_obj_num[n_i] = undefined;
select_number = undefined;
arr_obj_x[n_i] = undefined;
arr_obj_y[n_i] = undefined;
arr_rotation[n_i] = 0;
obj_rotation = undefined
obj_rotation_old = undefined;
obj_center_rot_x = undefined;
obj_center_rot_y = undefined;
};
for (var n_i = 1; n_i <= i; n_i++) {
arr_p[n_i].clear();
arr_l[n_i].clear();
arr_coordx[n_i] = null;
arr_coordy[n_i] = null;
};
for (var n_i = 1; n_i <= wall_i; n_i++) {
arr_wallcoordx[n_i] = null;
arr_wallcoordy[n_i] = null;
};
selectpixl._visible = false;
select_obj = false;
selected_obj = false;
rdy_to_select = false;
borderlayer.clear();
walllayer.clear();
roomlayer.clear();
flag1 = false;
flag2 = false;
flag3 = false;
drawing_end = false;
wall_created = false;
obj_rotation_old = 0;
obj_rotation = 0;
obj_on_pole = 0;
i = 1;
k = 1;
wall_i = 1;
menu_obj[1]._alpha = 50;
menu_obj[1].enabled = false;
menu_obj[2]._alpha = 100;
menu_obj[2].enabled = true;
menu_obj[3]._alpha = 50;
menu_obj[3].enabled = false;
menu_obj[4]._alpha = 50;
menu_obj[4].enabled = false;
menu_obj[15]._alpha = 50;
menu_obj[15].enabled = false;
menu_obj[16]._alpha = 50;
menu_obj[16].enabled = false;
menu_obj[17]._alpha = 50;
menu_obj[17].enabled = false;
menu_obj[18]._alpha = 50;
menu_obj[18].enabled = false;
};
Исходными данными для данного алгоритма являются:
Переменные типа MovieClip с именами obj1, obj2, obj3 и т.д.
Массив arr_obj_string - массив элементов, который хранит текстовое содержание фалов формата *.x3d
Массив arr_cоtegory - массив элементов, который хранит числовой код категории для каждого созданного объекта
Массив arr_obj_num - массив элементов, который хранит порядковый номер элемента в базе данных
Переменная select_number - переменная, которая содержит номер выделенного объекта
Массивы arr_obj_x и arr_obj_y - массивы элементов, которые хранят координаты созданных объектов на рабочем поле.
Массив arr_rotation - массив элементов, который содержит величину угла поворота для каждого из объектов.
Переменная obj_rotation - переменная, которая хранит текущую величину угла поворота
Переменная obj_rotation_old - переменная, которая хранит полную величину угла поворота объекта
Массив элементов arr_p - массив элементов, содержащий объекты типа MovieClip, в которых находятся точки на рабочем поле.
Массив элементов arr_l - массив элементов, содержащий объекты типа MovieClip, в которых находятся линии на рабочем поле.
Массивы элементов arr_coordx и arr_coordy - массивы элементов, которые содержат значения координат для каждой из точек на рабочем поле.
Переменная i - содержит количество точек на рабочем поле
Переменная obj_on_pole - содержит количество объектов на рабочем поле.
Объект типа MovieClip с именем selectpixl - объект используемый для определения положения указателя мыши.
Логические переменные select_obj, selected_obj и rdy_to_select - переменная, отвечающие за инициализацию выделения.
Объекты типа MovieClip с именами borderlayer, roomlayer - объекты в которых находятся объекты бордюра и стены.
Логические переменные drawind_end и wall_created - переменны отвечающие за возможность установки точек в рабочей области.
Смысл данного алгоритма заключается в том, чтобы очистить все объекты типа MovieClip, а всем переменным массивам присвоить исходные значения. Это необходимо для того, чтобы при повторных действиях не возникали проблемы с перекрестными данными (например, вновь созданный объект будет иметь определенный угол поворота, который был у удаленного объекта)
2.7.8 Подпрограмма удаления выбранного объекта
function testofhittrash() : Void {
if (_root["obj" + select_num].hitTest(menu_obj[16])) {
if (select_num == obj_on_pole) {
_root["obj" + select_num].clear();
arr_category[select_num] = undefined;
arr_obj_num[select_num] = undefined;
arr_obj_x[select_num] = undefined;
arr_obj_y[select_num] = undefined;
arr_obj_w[select_num] = undefined;
arr_obj_h[select_num] = undefined;
arr_rotation[select_num] = undefined;
arr_obj_string[select_num] = undefined;
};
obj_on_pole = obj_on_pole - 1;
for (var n_i = select_num; n_i <= obj_on_pole; n_i++) {
arr_category[n_i] = arr_category[n_i + 1];
arr_obj_num[n_i] = arr_obj_num[n_i + 1];
arr_obj_x[n_i] = arr_obj_x[n_i + 1];
arr_obj_y[n_i] = arr_obj_y[n_i + 1];
arr_obj_w[n_i] = arr_obj_w[n_i + 1];
arr_obj_h[n_i] = arr_obj_h[n_i + 1];
arr_rotation[n_i] = arr_rotation[n_i + 1];
arr_obj_string[n_i] = arr_obj_string[n_i + 1];
_root["obj" + (n_i + 1)].duplicateMovieClip("obj" + n_i, 30 + n_i);
_root["obj" + (n_i + 1)].clear();
};
arr_category[obj_on_pole + 1] = undefined;
arr_obj_num[obj_on_pole + 1] = undefined;
arr_obj_x[obj_on_pole + 1] = undefined;
arr_obj_y[obj_on_pole + 1] = undefined;
arr_obj_w[obj_on_pole + 1] = undefined;
arr_obj_h[obj_on_pole + 1] = undefined;
arr_rotation[obj_on_pole + 1] = undefined;
arr_obj_string[obj_on_pole + 1] = undefined;
};
};
Исходными данными для данного алгоритма являются:
Переменная select_num - переменная, содержащая значение выбранного объекта
Объект типа MovieClip с именем obj + select_num - выбранный объект.
Переменная obj_on_pole - переменная, содержащая количество объектов на рабочем поле.
Массив arr_category - массив, содержащий числовой код раздела.
Массивы arr_obj_x и arr_obj_y - массивы, содержащие координаты объектов на рабочем поле.
Массив arr_obj_num - массив, содержащий номер объекта в базе данных.
Массивы arr_obj_h и arr_obj_w - массивы, содержащие значения длинны и ширины объектов на рабочем поле.
Массив arr_rotation - массив, содержащий значения угла поворота объекта.
Массив arr_obj_string - массив, хранящий содержание файлов *.x3d.
Данный алгоритм работает на основе алгоритма перемещения объекта.
В условном операторе if производиться проверка условия столкновения выделенного объекта с областью удаления. Если условие выполняется, то происходят следующие действия:
Проверяется значение переменной select_num. Если оно ровно значению переменной obj_on_pole, то к объекту типа MovieClip с именем obj + select_num применяется функция clear(), которая очищает его содержимое.
Значение переменной obj_on_pole уменьшается на единицу.
Цикл for… осуществляет проход по отрезку от значения переменной select_num до значения переменной obj_on_pole с шагом 1 (временная переменная n_i является счетчиком цикла)
В теле цикла элементам массивов arr_category, arr_obj_num, arr_obj_x, arr_obj_y, arr_obj_h, arr_obj_w, arr_rotation и arr_obj_string с номерами n_i присваивается значение элементов соответствующих массивов с номерами n_i + 1. Объект типа MovieClip с именем obj + n_i + 1 копируется в объект типа MovieClip с именем obj + n_i. К объекту с именем obj + n_i + 1 применяется функция очистки содержимого.
После завершения цикла элементы массивов arr_category, arr_obj_num, arr_obj_x, arr_obj_y, arr_obj_h, arr_obj_w, arr_rotation и arr_obj_string с номерами obj_on_pole + 1 очищаются.
Данный алгоритм предусматривает удаление любого объекта, созданного в рабочем поле. Если удаляется последний объект, то вся информация о нем стирается. Если же удаляется любой другой объект, то необходимо переместить значения всех элементов, которые были созданы после удаляемого, на один назад. После этого необходимо очистить все значения последнего элемента, так как они будут в двух экземплярах.
2.8 Оценка эффективности системы
Эффективность системы - это свойство системы выполнять поставленную цель в заданных условиях использования и с определенным качеством. Показатели эффективности характеризуют степень приспособленности системы к выполнению поставленных перед нею задач и являются обобщающими показателями оптимальности функционирования системы.
Исходя из вышеуказанного определения, мы можем произвести оценку эффективности системы.
Данная система реализовывалась с целью обеспечения некоторых возможностей, таких как:
Возможность трехмерной визуализации
Возможность добавления объектов
Данные возможности были реализованы в данной системе при помощи разработанных алгоритмов и методов.
Возможность добавления объектов была реализованна с помощью работы с базой данных, в которую можно добавлять новые объекты, если возникает такая необходимость.
Трехмерная визуализация обеспечивается при помощи все тех же flash-технологий. Единственным недостатком в данной системе является то, что пользователь должен установить на свой компьютер специализированный проигрыватель, который обеспечит просмотр готовых проектов. Но если учесть, что данная система по общему объему файлов намного меньше большинства продуктов, нацеленных на решение аналогичных задач (примерно 41 мегабайт вместе с дистрибутивом необходимого проигрывателя), то данная система оказывается намного эффективнее в эксплуатации.
3. Экологическая часть и безопасность жизнедеятельности
3.1 Исследование воздействия опасных и вредных факторов при эксплуатации ЭВМ и их воздействие на организм человека
Пользователь ПЭВМ и его руководитель должны знать о вредном воздействии факторов и об эффективных способах зашиты от них, что уменьшает вероятность получения ими различных профессиональных заболеваний, а также снижает количество сбоев и ошибок в работе операторов.
Перечислим основные нарушения, допускаемые со стороны администрации:
практически нигде не проводится аттестация рабочих мест по условиям труда, а это значит, что существующие нарушения требований безопасно не выявляются и не устраняются;
большинство операторов и пользователей ПК не знают, какие опасные и вредные производственные факторы действуют на них на компьютеризированном рабочем месте;
пользователи, работающие на ПЭВМ не знают фактических величин параметров опасных и вредных производственных факторов, действующих на рабочем месте;
операторы (и другие пользователи) не знакомы с основами трудового законодательства об охране труда, со своими правами, с обязанностями администрации по обеспечению нормальных условий труда;
на предприятиях отсутствуют нормативные документы по охране труда и безопасности ПК;
практически повсеместно не проводится обучение безопасным приемам и методам труда на ПК, а также инструктирования операторов, программистов, техников и других пользователей, тогда как работы на ПК нередко относятся к категории работ с опасными и вредными условиями труда (на основании документа Р 2.2.755-99);
находящиеся в эксплуатации и приобретаемые вновь мониторы практически нигде не имеют сертификатов безопасности и гигиенических сертификатов (согласно требованиям СанПиН 2.2.2.542-96), причем торгующие организации зачастую вручают малограмотным покупателям фальсифицированные гигиенические сертификаты и сертификаты безопасности;
операторы и пользователи не проходят периодических медосмотров, как работающие во вредных условиях труда на основании приказа Минздрава РФ и департамента Госкомсанэпиднадзора РФ от 05.10.1995 № 280/88, а именно: п.п. 5.2.2 (электромагнитные поля радиочастот); п.п. 6.1.5 (работы, связанные с локальными мышечными напряжениями преимущественно мышц кисти и предплечья); п.п. 6.2 (зрительно-напряженные работы и наблюдение за экраном);
далеко не всем операторам и пользователям выдаются положенные им средства индивидуальной защиты на основании п. 3.8 СанПиН 2.2.2.542-96;
большинство работодателей не затрачивают достаточных средств на оборудование рабочих мест в соответствии с требованиями норм (в частности, по обеспечению освещенности, необходимого воздухообмена, аэроионного состава и микробиологической чистоты воздуха; по обеспечению эргономичной мебелью и т. п.);
во многих офисных и производственных помещениях и мест место несоответствие санитарным нормам по площади и объему на одного работающего (нередко эти параметры оказывались меньше нормы в 2-2,5 раза).
На работающего пользователя на ПЭВМ постоянно или периодически действуют следующие опасные и вредные факторы:
Загрязнение воздуха вредными веществами, пылью, микроорганизмами и положительными аэроионами.
Несоответствие нормам параметров микроклимата.
Возникновение на экране монитора статистических зарядов, заставляющих частички пыли двигаться к ближайшему заземлённому предмету, часто им оказывается лицо оператора.
Повышенный уровень шума на рабочем месте.
Повышенный уровень статистического электричества при неправильно запроектированной рабочей зоне.
Опасный уровень напряжения в электрической цепи, замыкание которой может пройти через тело человека.
Широкий спектр излучения от дисплея, который включает рентгенов скую, ультрафиолетовую и инфракрасную области, а также широкий диапазон электромагнитных излучений других частот.
Повышенный уровень электромагнитных излучений.
Повышенный уровень ионизирующих излучений (мягкое рентгеновское, гамма-излучение).
Отсутствие или недостаток естественного света.
Недостаточная освещенность рабочей зоны.
Повышенная яркость света.
Пониженная контрастность.
Прямая и обратная блёсткость.
Повышенная пульсация светового потока (мерцание изображения).
Длительное пребывание в одном и том же положении и повторение одних и тех же движений приводит к синдрому длительных статических нагрузок (СДСН).
Нерациональная организация рабочего места.
Несоответствие эргономических характеристик оборудования нормируемым величинам.
Умственное перенапряжение, которое обусловлено характером решаемых задач приводит к синдрому длительных психологических нагрузок (СДПН).
Большой объем перерабатываемой информации приводит к значительным нагрузкам на органы зрения.
Монотонность труда.
Нервно-психические нагрузки.
Нервно-эмоциональные стрессовые нагрузки.
Опасность возникновения пожара.
Остановимся подробнее на недостаточной освещенности рабочей зоны помещения, где установлены ПЭВМ, а также на влиянии повышенной яркости света, пониженной контрастности, прямой и обратной блёсткости и повышенной пульсации светового потока. При работе на ПЭВМ органы зрения пользователя выдерживают большую нагрузку с одновременным постоянным напряженным характером труда, что приводит к нарушению функционального состояния зрительного анализатора и центральной нервной системы. Нарушение функционального состояния зрительного анализатора проявляется в снижении остроты зрения, устойчивости ясного видения, аккомодации, электрической чувствительности и лабильности.
Причинами нарушения функционального состояния зрительного анализатора являются:
постоянная переадаптация органов зрения в условиях наличия в поле зрения объекта различения и фона различной яркости;
недостаточная четкость и контрастность изображения на экране;
строчность воспринимаемой информации;
постоянные яркостные мелькания;
наличие ярких пятен на клавиатуре и экране за счет отражения светового потока;
большая разница между яркостью рабочей поверхности и яркостью окружающих предметов, наличие равноудаленных предметов;
невысокое качество исходной информации на бумаге;
неравномерная и недостаточная освещенность на рабочем месте.
Наряду с перечисленными общепринятыми особенностями работы пользователя на рабочем месте ПЭВМ существуют особенности восприятия информации с экрана монитора, среди которых выделяются следующие:
экран монитора является источником света, на который в процессе работы непосредственно обращены органы зрения пользователя, что вводит оператора в другое психофизиологическое состояние;
привязанность внимания пользователя к экрану монитора является причиной длительности неподвижности глазных и внутриглазных мышц, что приводит к их ослаблению;
длительная и повышенная сосредоточенность органон зрения приводит к большим нагрузкам, а, следовательно, к утомлению органов зрения, способствует возникновению близорукости, головной боли и раздраженности, нервного напряжения и стресса;
длительная привязанность внимания пользователя к экрану монитора создает дискомфортное восприятие информации, в отличие от чтения обычной печатной информации;
экран монитора является источником падающего светового потока на органы зрения пользователя, в отличие от обычной печатной информации, которая считывается за счет отраженного светового потока;
информация на экране монитора периодически обновляется в процессе сканирования электронного луча по поверхности экрана и при низкой частоте происходит мерцание изображения, в отличие от неизменной ин формации на бумаге.
Искусственное освещение в помещении и на рабочем месте создает хорошую видимость информации, машинописного и рукописного текста, при этом должна быть исключена отраженная блёсткость. В связи с этим предусматриваются мероприятия по ограничению слепящего воздействия оконных проемов и прямое попадание солнечных лучей, а также исключение на рабочих поверхностях ярких и темных пятен. Это достигается за счет соответствующей ориентации оконных проемов и рационального размещения рабочих мест.
3.2 Способы защиты пользователей от опасных и вредных факторов
3.2.1 Электрическая безопасность
А) Анализ электрической опасности
Анализ электрической опасности целесообразно проводить на примере наиболее опасного двухфазного (двухполюсного) прикосновения. При этом сопротивление тела человека Rч для напряжения 5 В и выше переменного тока 50 Гц можно рассчитать по формуле:
кОм
где Uпр - напряжение прикосновения.
В нашей стране в качестве расчётных значений приняты Rч = 1000 Ом при Uпр= 50 В и выше, при этом продолжительность воздействия тока на человека считается менее 1 с, и Rч =6000 Ом при Uпр= 36 В и менее при длительности воздействия тока более 1с.
Следует учитывать что при Uпр около 200 В всегда происходит пробой рогового слоя кожи и Rч становится равным примерно 300 Ом.
В моём рабочем помещении используются питающие напряжения 220 В, 50 Гц. Для данных условий стандарт предусматривает следующие нормы для электроустановок.
Наибольшие допустимые значения:
Нормальный режим работы. Uпр= 2 В, Iч = 0,3 мА.
Аварийный режим работы производственных электроустановок.
Таблица аварийного режима работы производственных электроустановок.
Норм. Вели-чина
|
Продолжительность воздействия tс.
|
|
|
0,01-0,08
|
0,1
|
0,2
|
0,4
|
0,5
|
0,8
|
1,0
|
Более 1,0
|
|
Uпр, В
|
550
|
340
|
160
|
120
|
105
|
75
|
60
|
20
|
|
Iч, мА.
|
650
|
400
|
190
|
140
|
125
|
75
|
50
|
6
|
|
|
- Таблица аварийного режима работы производственных электроустановок.
Нормируемая величина
|
Продолжительность воздействия tс.
|
|
|
0,01-0,08
|
0,1
|
0,2
|
0,4
|
0,5
|
0,8
|
1,0
|
Более 1,0
|
|
Uпр, В
|
220
|
200
|
100
|
55
|
50
|
30
|
25
|
12
|
|
Iч, мА.
|
220
|
200
|
100
|
55
|
50
|
30
|
25
|
2
|
|
|
- Б) Необходимые меры
- Рабочее помещение сухое (50 %), нежаркое (25 0С), с токонепроводящим полом, без токопроводящей пыли, отсутствует возможность одновременного прикосновения человека к имеющим соединение с землёй металлоконструкциям зданий, технологическим аппаратам, механизмам и т. п. c одной стороны и к металлическим корпусам электрооборудования, которые при пробое изоляции могут оказаться под напряжением, - с другой.
- Следовательно, помещение относится к помещениям без повышенной опасности. Согласно ГОСТ 12.1.030-81 в таких помещениях защитному заземлению и занулению подлежат металлические нетоковедущие части оборудования при напряжении 380 В переменного и і 440 В постоянного тока. Во взрывоопасных помещениях все установки обязательно заземляются независимо от величины питающих напряжений.
- Поскольку помещение без повышенной опасности и U = 220В, то металлические нетоковедущие части оборудования в заземлении и занулении не нуждаются.
- 3.2.2 Пожарная безопасность
- Основными причинами пожаров от электроустановок является короткое замыкание, перегрузка, большое переходное сопротивление, искрение и электрическая дуга. Эффективным средством защиты электрооборудования от токов перегрузки и короткого замыкания является использование плавких предохранителей и автоматов защиты.
- Наиболее широкое применение получили стеклянно- плавкие предохранители (СП) и малоинерционные предохранители (МП). Значение тока плавкой вставки определяют из соотношения:
- Iвст. = (1,21 . 1,37) Iном.
- где Iном - номинальное значение тока в приборе.
- Инерционно-плавкие предохранители (ИП), защищают электрические цепи с большими пусковыми токами и рассчитываются по номинальному току потребителя без учёта пусковых токов:
- Iвст. = (1,25 . 1,5) Iном.
- Тугоплавкие предохранители (ТП) защищают электрические цепи только от коротких замыканий и не защищают от перегрузок:
- Iвст. = (1,4 . 1,5) Iном.
- В моём рабочем помещении применяются сетевые фильтры Pilot GL c Iвст. = 10 А. Стены здания (силикатный кирпич) относятся к несгораемым материалам. Количество эвакуационных выходов должно быть не менее двух. Допускается использование одного эвакуационного выхода, если расстояние от наиболее удалённого рабочего места до этого выхода не превышает 25 м.
- По правилам ГОСТ необходимо наличие углекислотного огнетушителя. Это требование выполнено.
- 3.2.3 Предельно допустимые значения излучений
- В настоящее время весь диапазон радиочастот разбит на 3 поддиапазона: высоких частот /ВЧ/ от 60 кГц до 30 МГц, ультравысоких частот /УВЧ/ от 30 МГц до 300 МГц и от 300 МГц до 300 ГГц. Стандартом (ГОСТ 12.1.006-84) ПДУ нормируются в диапазонах ВЧ и УВЧ предельно допустимые значения напряжённости электрического поля Е /В/м/ и магнитного поля Н /А/м/, а в диапазоне СВЧ - предельно допустимая плотность потока энергии /ППЭ, Вт/м2/. Установлены следующие предельно допустимые значения Е и Н:
- Е /В/м/
- 50 в диапазоне 60 кГц . 300 МГц,
- 20 в диапазоне 3 МГц . 30 МГц,
- 10 в диапазоне 30 МГц . 50 МГц,
- 5 в диапазоне 50 МГц . 300 МГц,
- Н /А/м/
- 5 в диапазоне 60 кГц . 1,5 МГц,
- 0,3 в диапазоне 30 кГц . 50МГц.
- Предельно допустимую плотность потока энергии ЭМП в диапазоне частот 300 МГц . 300 ГГц на рабочих местах и в местах возможного нахождения персонала, связанного с воздействием ЭМП, устанавливают исходя из допустимого значения энергетической нагрузки на организм и времени пребывания в зоне облучения, однако во всех случаях она не должна превышать 10 Вт/м2 / 1000 мкВт/см2/, а при наличии рентгеновского излучения или высокой температуры воздуха в рабочих помещениях /выше 280С/ - 1 Вт/ м2 / 100 мкВт/см2 /.
- 3.3 Эргономические требования к рабочему месту
- Проектирование рабочих мест относится к числу важных проблем эргономического проектирования в области вычислительной техники. Рабочее место и взаимное расположение всех его элементов должно соответствовать антропометрическим, физическим и психологическим требованиям. Большое значение имеет также характер работы. В частности, при организации рабочего места программиста должны быть соблюдены следующие основные условия:
- оптимальное размещение оборудования, входящего в состав рабочего места
- достаточное рабочее пространство, позволяющее осуществлять все необходимые движения и перемещения.
- Эргономическими аспектами проектирования рабочих мест, в частности, являются:
- высота рабочей поверхности
- размеры пространства для ног
- требования к расположению документов на рабочем месте (наличие и размеры подставки для документов, возможность различного размещения документов, расстояние от глаз пользователя до экрана, документа, клавиатуры и т.д.)
- характеристики рабочего кресла
- требования к поверхности рабочего стола
- регулируемость элементов рабочего места
- Главными элементами рабочего места программиста являются стол и кресло. Основным рабочим положением является положение сидя. Рабочая поза сидя вызывает минимальное утомление программиста. Рациональная планировка рабочего места предусматривает четкий порядок и постоянство размещения предметов, средств труда и документации. То, что требуется для выполнения работ чаще, расположено в зоне легкой досягаемости рабочего пространства. Моторное поле - пространство рабочего места, в котором могут осуществляться двигательные действия человека. Максимальная зона досягаемости рук - это часть моторного поля рабочего места, ограниченного дугами, описываемыми максимально вытянутыми руками при движении их в плечевом суставе. Оптимальная зона - часть моторного поля рабочего места, ограниченного дугами, описываемыми предплечьями при движении в локтевых суставах с опорой в точке локтя и с относительно неподвижным плечом.
- Для комфортной работы стол должен удовлетворять следующим условиям:
- высота стола должна быть выбрана с учетом возможности сидеть свободно, в удобной позе, при необходимости опираясь на подлокотники;
- нижняя часть стола должна быть сконструирована так, чтобы программист мог удобно сидеть, не был вынужден поджимать ноги;
- поверхность стола должна обладать свойствами, исключающими появление бликов в поле зрения программиста;
- конструкция стола должна предусматривать наличие выдвижных ящиков (не менее 3 для хранения документации, листингов, канцелярских принадлежностей).
- высота рабочей поверхности рекомендуется в пределах 680-760мм.
- высота поверхности, на которую устанавливается клавиатура, должна быть около 650мм.
- Большое значение придается характеристикам рабочего кресла. Так, рекомендуемая высота сиденья над уровнем пола находится в пределах 420-550мм. Поверхность сиденья мягкая, передний край закругленный, а угол наклона спинки - регулируемый. Положение экрана определяется: - расстоянием считывания (0,6…0,7м); - углом считывания, направлением взгляда на 20 ниже горизонтали к центру экрана, причем экран перпендикулярен этому направлению. Должна также предусматриваться возможность регулирования экрана: - по высоте +3 см; - по наклону от -10 до +20 относительно вертикали; - в левом и правом направлениях. Большое значение также придается правильной рабочей позе пользователя. При неудобной рабочей позе могут появиться боли в мышцах, суставах и сухожилиях. Требования к рабочей позе пользователя видеотерминала следующие: - голова не должна быть наклонена более чем на 20, - плечи должны быть расслаблены, - локти - под углом 80…100, - предплечья и кисти рук - в горизонтальном положении. Причина неправильной позы пользователей обусловлена следующими факторами: нет хорошей подставки для документов, клавиатура находится слишком высоко, а документы - низко, некуда положить руки и кисти, недостаточно пространство для ног. В целях преодоления указанных недостатков даются общие рекомендации:
- лучше передвижная клавиатура;
- должны быть предусмотрены специальные приспособления для регулирования высоты стола, клавиатуры и экрана, а также подставка для рук.
- Существенное значение для производительной и качественной работы на компьютере имеют размеры знаков, плотность их размещения, контраст и соотношение яркостей символов и фона экрана. Если расстояние от глаз оператора до экрана дисплея составляет 60…80 см, то высота знака должна быть не менее 3мм, оптимальное соотношение ширины и высоты знака составляет 3:4, а расстояние между знаками 15…20% их высоты. Соотношение яркости фона экрана и символов - от 1:2 до 1:15. Во время пользования компьютером медики советуют устанавливать монитор на расстоянии 50-60 см от глаз. Специалисты также считают, что верхняя часть видеодисплея должна быть на уровне глаз или чуть ниже. Когда человек смотрит прямо перед собой, его глаза открываются шире, чем когда он смотрит вниз. За счет этого площадь обзора значительно увеличивается, вызывая обезвоживание глаз. К тому же если экран установлен высоко, а глаза широко открыты, нарушается функция моргания. Это значит, что глаза не закрываются полностью, не омываются слезной жидкостью, не получают достаточного увлажнения, что приводит к их быстрой утомляемости. Создание благоприятных условий труда и правильное эстетическое оформление рабочих мест на производстве имеет большое значение, как для облегчения труда, так и для повышения его привлекательности, положительно влияющей на производительность труда.
- 4. Заключение
- 4.1 Анализ существующих систем.
- Проведя анализ существующий систем, были выбраны функции, которые необходимо было реализовать, такие как:
- Обеспечение согласования форматов обмена данными между интерактивным интерфейсом и трехмерными объектами
- Возможность трехмерной визуализации
- Возможность добавления объектов
- Данные возможности наиболее часто встречаются в аналогичных программных продуктах.
- 4.2 Обеспечение согласования форматов обмена данными между интерактивным интерфейсом и трехмерными объектами.
- Для обеспечения согласования обмена данными между интерактивным интерфейсом и трехмерными объектами мы используем базу данных XML.
- 4.3 Возможность добавления объектов.
- Для обеспечения выполнения данной функции нам прежде всего предстоит работать с открытой базой данных, что, в свою очередь, позволит нам производить необходимые изменения.
- 4.4 Функция трехмерной визуализации
- Реализация функции трехмерной визуализации основана на использовании формата данных *.x3d, который позволяет программно описать трехмерные объекты.
- Исходными данными для данного алгоритма являются файлы формата *.x3d, в которых описывается каждый из объектов в отдельности.
- Были разработаны вспомогательные алгоритмы, такие как:
- Алгоритм создания объекта
- Алгоритм выбора объекта
- Алгоритм создание результирующего файла формата *.x3d
- Алгоритм записи в файл формата *.x3d
- 5. Приложение 1. Текст программы
- 5.1 Блок объявления переменных
- //Глубина 0 предназначена для слоя сетки
- //Глубина 1 предназначена для слоя точек
- //Глубина 2 предназначена для слоая рамки точки
- //Глубина 3 предназначена для слоя линий
- //Глубина 4 предназначена для слоя стенки
- //Глубина с 5 до 10 для элементов меню
- //Глубина с 20 до 100 для объектов
- //Количество элементов
- var num:Number = 0;
- //Флаг, если урл получено
- var flag_url:Boolean = false;
- //Флаг, если Х получено
- var flag_x:Boolean = false;
- //Флаг, если У получено
- var flag_y:Boolean = false;
- //Флаг возможности рисования
- var flag1: Boolean = true;
- //Флаг выделения
- var flag2: Boolean = false;
- //Флаг вставки объекта
- var flag3: Boolean = false;
- var wall_created:Boolean = false;
- //Флаг конца рисования(когда линия замыкается)
- var drawing_end: Boolean = false;
- //Флаг поворота
- var flag_rot:Boolean = false;
- // :) ??
- var select_flag:Boolean = false;
- //Флаг создания объекта
- var create_obj:Boolean = false;
- //Флаг установки объекта на рабочее поле
- var end_drag_obj:Boolean = false;
- //Флаг выделения объекта
- var select_obj:Boolean = false;
- //Флаг нахождения объекта и готовности к выделению
- var rdy_to_select:Boolean = false;
- var selected_obj:Boolean = false;
- var rotate_obj:Boolean = false;
- var delete_obj:Boolean = false;
- //Флаг окончания заполнения массивов из XML
- var flag_xml:Boolean = false;
- //Флан нахождения мыши в меню
- var flag_onmenu:Boolean = false;
- var border_on:Boolean = false;
- //Массив точек
- var arr_p: Array = new Array;
- //Массив объектов на поле
- var arr_objonpole:Array = new Array;
- //Массив линий
- var arr_l: Array = new Array;
- //Шаг сетки
- var step:Number = 10;
- //Размер точки
- var w_p:Number = 5;
- var h_p:Number = 5;
- var x:Number;
- var y:Number;
- //Размеры рабочего поля
- var wmax:Number = 400;
- var hmax:Number = 370;
- var wmin:Number = 40;
- var hmin:Number = 10;
- var center_pole_x:Number = (wmax - wmin)/20;
- var center_pole_y:Number = (hmax - hmin)/20;
- //Минимум и максимум комнаты
- var min_wallcoordx:Number = 0;
- var max_wallcoordx:Number = 0;
- var min_wallcoordy:Number = 0;
- var max_wallcoordy:Number = 0;
- //Цвет сетки
- var color_net:Number = 0xCCCCCC;
- //Цвет точек
- var color:Number = 0xFF2222;
- //Цвет линий
- var colorl:Number = 0x0066CC;
- //Массив координат точек
- var arr_coordx: Array = new Array;
- var arr_coordy: Array = new Array;
- //Массив координат стенки
- var arr_wallcoordx: Array = new Array;
- var arr_wallcoordy: Array = new Array;
- //Идентификатор типа объектов
- var type_of_obj:String;
- //Массивы для меню
- //Массив объектов меню
- var menu_obj:Array = new Array;
- //Массив названия элемента
- var menu_items:Array = new Array;
- //Массив ссылок на элементы
- var menu_items_src:Array = new Array;
- //Массив х координат элементов
- var menu_items_x:Array = new Array;
- //Массив у координат элементов
- var menu_items_y:Array = new Array;
- //Массив флагов объектов
- var menu_obj_flag:Array = new Array;
- var select_num:Number;
- var old_select_num:Number;
- var obj_on_pole:Number = 0;
- var last_num:Number = 5;
- //Массив и переменная, отвечающая за категорию объекта
- var category:Number;
- var arr_category:Array = new Array;
- //Массив и переменная, отвечающая за выбранный объект
- var arr_obj_num:Array = new Array;
- var select_number:Number;
- //Масивы координат созданных объектов
- var arr_obj_x:Array = new Array;
- var arr_obj_y:Array = new Array;
- var arr_obj_w:Array = new Array;
- var arr_obj_h:Array = new Array;
- //Массив отвечающий за поворот объекта
- var arr_rotation:Array = new Array;
- var obj_rotation:Number;
- var obj_rotation_old:Number = 0;
- var obj_center_rot_x:Number;
- var obj_center_rot_y:Number;
- var obj_string:String = "";
- var arr_obj_string:Array = new Array;
- var file_created:Boolean = false;
- //Массивы для объектов(элементов по категориям)
- //Массивы для группы "Столы"
- var tables_view:Number = 0;
- var n_tables:Number = 0;
- var n_lights:Number = 0;
- var n_chears:Number = 0;
- var n_beds:Number = 0;
- var n_shkafs:Number = 0;
- var n_athers:Number = 0;
- //Флаг, отвечающий за загрузку элементов
- var bed_flag:Boolean = false;
- //Массив объектов
- var bed_obj:Array = new Array;
- //Массив названия элемента
- var bed_items:Array = new Array;
- //Массив ссылок на элементы
- var bed_items_src:Array = new Array;
- //Массив х координат элементов
- var bed_items_x:Array = new Array;
- //Массив у координат элементов
- var bed_items_y:Array = new Array;
- //Массив флагов объектов
- var bed_obj_flag:Array = new Array;
- var bed_items_w:Array = new Array;
- var bed_items_h:Array = new Array;
- //Флаг, отвечающий за загрузку элементов
- var shkaf_flag:Boolean = false;
- //Массив объектов
- var shkaf_obj:Array = new Array;
- //Массив названия элемента
- var shkaf_items:Array = new Array;
- //Массив ссылок на элементы
- var shkaf_items_src:Array = new Array;
- //Массив х координат элементов
- var shkaf_items_x:Array = new Array;
- //Массив у координат элементов
Подобные документы
Разработка способа экономного размещения в памяти заданной разреженной таблицы. Разработка процедуры/функции, обеспечивающей доступ к элементам таблицы по номерам строки и имени столбца. Хронометраж выполнения операций чтения и записи элементов в массивы.
лабораторная работа [678,8 K], добавлен 22.12.2011
Использование электронной таблицы как базы данных. Сортировка и фильтрация данных в Microsoft Excel 97. Сортировка - это упорядочение данных по возрастанию или по убыванию. При фильтрации базы отображаются только записи, обладающие нужными свойствами.
реферат [6,6 K], добавлен 17.11.2002
Системный анализ и анализ требований. Концептуальная модель данных. Проектирование логической структуры реляционной базы данных. Даталогическая модель базы данных. Алгоритмы реализации модулей и их реализация (запросы, таблицы, формы, отчеты, макросы).
курсовая работа [1,6 M], добавлен 17.12.2015
Широкое использование компьютерных и информационных технологий. Концепции типов данных. Алгоритмы сортировки одномерных массивов. Описание двумерного массива Паскаля. Методы доступа к элементам массивов. Индексные, динамические и гетерогенные массивы.
курсовая работа [66,3 K], добавлен 07.12.2010
Структура таблицы и типы данных. Ввод данных в ячейки таблицы. Создание запросов на выборку, удаление, обновление и добавление записей, на создание таблицы. Основное различие между отчетами и формами, их назначение. Создание отчетов для базы данных.
курсовая работа [1,9 M], добавлен 17.06.2014
Анализ предметной области. Сравнительный анализ систем визуализации трёхмерных объектов. Обоснование выбора среды программирования. Разработка базы данных. Архитектура программного продукта. Алгоритм шифрования Blowfish с обратной связью по шифр-тексту.
дипломная работа [5,3 M], добавлен 22.11.2015
Выбор средств методологии проектирования базы данных, требования к ее функциональности и возможностям. Выделение информационных объектов и их атрибутов, определение отношений и мощности отношений между объектами. Разработка интерфейса и права доступа.
курсовая работа [658,1 K], добавлен 03.06.2015
Создание реляционной базы данных, запросов, форм и отчетов по БД "Компьютеры", "Таблицы". Создание базы данных, объектов, заполнение таблиц данными, выполнение схемы. Справочно-правовая система "Консультант Плюс". Информационные массивы, разделы и банки.
контрольная работа [4,3 M], добавлен 21.10.2009
Описание предметной области, определение функциональных требований к системе и построение диаграммы потока данных. Построение модели "сущность-связь", описание сущностей и атрибутов модели. Построение реляционной базы данных и описание ее таблицы.
курсовая работа [624,5 K], добавлен 30.05.2019
Программа перенесения данных из таблицы Word в таблицу базы данных. Алгоритм решения задачи в виде текстового описания. Описание базы данных (структура таблиц, схема). Копии с экрана форм для работы с базой данных при разработке их в конструкторе.
контрольная работа [914,3 K], добавлен 26.03.2011