fseek (mem, 48 + cx * cy * sizeof(short) – 1, SEEK_SET);
char c = 0;
fwrite (&c, 1, 1, mem);
short Matrix: GetHeight (MTopobject *tpo)
высота топографического объекта добавляется в матрицу из UTP-файла (MString str = tpo->GetDataPole(1)), если в данных объекта отсутствует значение высоты, оно берется из списка стандартных высот (heights [tpo->m_kkod])
void Matrix: Save (MString filename)
сохранение в файл матрицы осуществляется в случае, если файл успешно создан на диске: FILE *file = fopen (filename, «wb»). Для сохранения матрицы сначала записываем заголовок файла ВМН (WriteBmhHeader(mem)) и сохраняем матрицу или в оперативную память (если memMode == INMEMORY) или в файл на жесткий диск (если memMode == INFILE).
void Matrix: Calculate()
при расчете матрицы первоначально создаем матрицу с размерами равными размерам карты (Create (pKarta->m_geobounds)), далее подсчитываем количество точек у всех топографических объектов, участвующих в расчете (это нужно, чтобы выводить полосу прогресса). Для формирования матрицы превышений, перебирая каждый объект каждого слоя карты, получаем высоту объекта. Если значение высоты не равно нулю, добавляем значение в формируемую матрицу превышений (с помощью функции AddHeight). При этом в матрице заполняются все клетки, покрываемые площадью рассматриваемого объекта.
void Matrix: AddHeight (MTopobject *tpo, short height)
для добавления высоты топографического объекта в матрицу первоначально необходимо проверить тип топографического объекта (tpo->m_pZnak->GetYaz()->GetType()). Если объект площадной, то выполняется добавление высоты площадного объекта в матрицу (AddPloObject (tpo, height)), если объект линейный, то выполняется добавление высоты линейного объекта в матрицу (AddLineObject (tpo, height)), если объект точечный, то сравниваем текущую высоту с высотой в ячейке, если текущая высота больше (height > GetHeight(point), то устанавливаем в ячейке текущую высоту (SetHeight (point, height))
void Matrix: AddLineObject (MTopobject *tpo, short height)
добавление высоты линейного топографического объекта в матрицу осуществляется следующим образом: в цикле по сегментам линейного объекта проверяем покрывает ли ячейка матрицы сегмент, если покрывает, то устанавливаем в ячейке текущую высоту (SetHeight (point, height)), если не покрывает, то рассчитываем количество ячеек покрывающих данный сегмент, и в цикле для каждой ячейки устанавливаем текущую высоту топографического объекта.
void Matrix: AddPloObject (MTopobject *tpo, short height)
добавление высоты площадного топографического объекта в матрицу осуществляется следующим образом: сначала создается локальная матрица топографического объекта (по размеру охватывающего прямоугольника объекта). Затем в локальной матрице площадного объекта заполняются ячейки, покрывающие контур объекта – используется функция AddLineObject (tpo, BORDER). Затем заполняются остальные ячейки локальной матрицы с использованием функции Fill (MPtArray *ar). На последнем этапе в цикле по всем ячейкам сформированной локальной матрицы все «внутренние» (не-OUTSIDE) ячейки заполняются значениями высоты площадного объекта, но только в том случаи если текущее значение высоты больше значения высоты в ячейке
if (height > GetHeight(point))
SetHeight (point, height);
void Fill (MPtArray *ar)
заполнение локальной матрицы обрабатываемого топографического объекта продолжается до тех пор, пока не будут заполнены все точки (GetNumFilledPoints() < numPoints). Первоначально в цикле dowhile выбираем случайную ячейку со значением высоты EMPTY (не заполненная) и вычисляем соответствующую точку объекта (MPoint pt = GetPoint (i, j)). Затем распространяем вокруг этой клетки значение высоты объекта с помощью функции Expand(), учитывая при этом, является точка внутренней (INSIDE) или наружной (OUTSIDE) по отношению к объекту.
if (PointInRegion (pt, ar)) Expand (i, j, INSIDE);
else Expand (i, j, OUTSIDE);
void Expand (int i, int j, int state)
распространение заливки из клетки до границ объекта происходит следующим образом: сначала устанавливаем значение в клетке (SetHeight (i, j, state)), затем в цикле заполняем соседние клетки, обход осуществляется по кругу, вначале по часовой стрелке, потом – против, после каждой итерации увеличиваем радиус круга. Если после обхода не заполнено ни одной точки, значит распространяться «заливке» уже некуда, выходим из цикла.
Разработанная программа должна функционировать с определенными характеристиками для заданных областей данных. Процесс, позволяющий получить программу, функционирующую с требуемыми характеристиками в заданной области входных данных, называется отладкой. В результате отладки программа должна соответствовать определенной фиксированной совокупности правил и показателей качества.
Основным методом отладки и обнаружения ошибок является тестирование – важнейший фактор, определяющий стоимость и длительность разработки комплекса программ. Затраты на тестирование составляют до 40% от общего времени на разработку программы.
Программы, как объекты тестирования, имеют ряд особенностей, которые отличают процесс тестирования технического средства от программного. Для сложных комплексов программ отсутствует полный и точный эталон для тестовых наборов. Для сложных программ тестирование проводится в объемах минимально необходимых для проверки программ в ограниченных пределах изменения параметров и условий функционирования.
Для проверки правильности работы программы используется проведение функционального и полного тестирования.
При функциональном тестировании должна обеспечиваться проверка каждого пункта меню, каждой операции, которую выполняет система. Такая проверка должна гарантировать работу всех элементов программы в автономной режиме.
Приполном тестированиимоделируются все возможные действия пользователя при работе с программой.
Сначала тестирование было проведено разработчиком программы, затем программный продукт был дан на тестирование пользователям. При этом на первом этапе выявлялись логические ошибки в основном связанные с последовательностью и временем появления диалогов на экране, которые затем были устранены.
Тестирование проводилось также по следующему алгоритму: тестировщик проходит по всем этапам программы, начиная от главного окна. При этом он бессистемно нажимает все клавиши на клавиатуре и мыши. Тест показал, программа реагирует на нажатие только тех клавиш, которые имеют смысловое значение в программном модуле.
Для проверки функциональности программы был разработан представленный ниже тест, включающий в себя последовательно описанные действия оператора, направленные на проверку определенных функций программного модуля.
Тестирование программного модуля обработки и отображения картографической информации выполняется в среде функционирования программного модуля.
В среде функционирования программного модуля требуется:
- установить программное обеспечение модуля, следуя инструкциям п. 6.2 настоящего документа;
- записать в отдельный каталог файлы тестового примера (файл карты m3404.utp, файл классификатора 500–200-HOT_heights.kls, файл стандартных высот heights.txt и файл матрицы высот matrix.bmh).
Файлы тестового примера предоставляет исполнитель.
В результате проведения тестирования ожидаются следующие результаты:
- после открытия карты и классификатора, в главном окне программного модуля ожидается отображение цифровой карты местности (ЦКМ);
- после использования инструмента зуммирования ожидается отображение в картографическом окне выделенного фрагмента ЦКМ, увеличенного до максимально возможного размера, который позволяет отобразить картографическое окно. Если размеры картографического окна и увеличиваемого фрагмента ЦКМ не симметричны, то отображаемый фрагмент дополняется участками ЦКМ, прилегающими к выделенному фрагменту, для полного заполнения картографического окна в вертикальном или горизонтальном направлении;
- после использования инструмента скроллирования ожидается отображение в картографическом окне необходимого фрагмента ЦКМ;
- после использования инструмента «предыдущий вид карты» ожидается отображение в картографическом окне предыдущего фрагмента ЦКМ;
- после использования инструмента «отобразить всю карту» ожидается отображение в картографическом окне всей ЦКМ;
- после завершения работы программного модуля Matrix, в директории указанной тестировщиком, должны находиться следующие сохраненные файлы: файл матрицы превышений matrix_m3404.bmh2 и файл матрицы корректировок correction.bmh2.
Для выполнения тестирования программного модуля обработки и отображения картографической информации на цифровой карте местности следует последовательно выполнить следующие действия:
- запустить программный модуль Matrix (см. п. 6.3. настоящего документа);
- открыть карту m3404.utp и классификатор 500–200-HOT_heights.kls (см. п. 6.5. настоящего документа);
- создать файл стандартных высот heights.txt (см. п. 6.5. настоящего документа);
- если необходимо, внести изменения в список стандартных высот в диалоге «Редактирование высот» (см. п. 6.5. настоящего документа);
- сохранить файл стандартных высот heights.txt (см. п. 6.5. настоящего документа);
- произвести расчет матрицы превышений (см. п. 6.5. настоящего документа);
- сохранить матрицу превышений matrix_m3404.bmh2 (см. п. 6.5. настоящего документа);
- создать матрицу корректировок correction.bmh2 (см. п. 6.5. настоящего документа);
- если необходимо, внести изменения в матрицу корректировок
(см. п. 6.5. настоящего документа);