Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 3 / Лабораторна работа № 3 2020

.pdf
Скачиваний:
2
Добавлен:
27.11.2023
Размер:
306.79 Кб
Скачать

Методические указания к выполнению лабораторных работ

по курсу

Программное обеспечение географических информационных систем

Таганрог 2019

Гордиенко Л.В. Методические указания к выполнению лабораторных работпо курсу«Программноеобеспечение географическихинформационных систем».

©Южный федеральный университет, 2019

©Гордиенко Л.В. 2019

Лабораторная работа № 3 «Наборы и фильтры»

Цель работы: изучение особенностей работы с наборами примитивов, обработки характеристик примитивов, входящих в набор.

Описание используемых функций

Функция ssget – формирует набор по запросу или признаку. (ssget [<метод>] [<точка1>] [<точка2>] [<список>] [<фильтр>])

Аргумент <метод> - это текстовая строка, принимающая одно из значений, характеризующих метод выбора примитивов.

К основным значениям относятся следующие:

“X” – выбор всех примитивов рисунка, включая объекты на замороженных слоях и вне видимой части экрана, с учетом возможного аргумента <фильтр>;

“A” - выбор всех примитивов рисунка, включая объекты на замороженных слоях и вне видимой части экрана;

“P” – последний сформированный ранее набор; “W” – выбор рамкой;

“WP” – выбор многоугольником; “C” – выбор секущей рамкой; “F” – выбор секущей линией;

“L” – выбор последнего видимого примитива.

Аргумент <точка1> при отсутствии аргумента <точка2> определяет дополнительное условие для добавления в набор: включаемый примитив должен проходить через точку, заданную аргументом <точка1>. Если заданы оба аргумента <точка1> и <точка2>, то определяемые ими точки являются углами простой или секущей рамки (когда в качестве метода выбора применяются рамки, т.е. “W” или “C”).

Аргумент <список> представляет собой список, элементами которого являются точки, используемые в методах “F”, “WP”, “CP”.

Аргумент <фильтр> - это список со структурой, аналогичной структуре списка, возвращаемого функцией entget, что позволяет оставить только те примитивы, которые удовлетворяют дополнительным признакам (например, определенному цвету, слою, весу и т.д.).

Возвращаемое значение функции ssget – имя созданного набора. Имя набора возвращается в следующем виде:

<Selection set: 2>

Примеры:

(ssget) выдает стандартный запрос Select objects: (Выберите объекты:) и затем создает набор в соответствии с интерактивными действиями пользователя;

(ssget ‘ (125.4 58.1)) создает набор из всех примитивов, проходящих через точку (125.4 58.1);

(ssget “_X” ‘ (125.4 58.1)) выдает сообщение об ошибке (несовместимость режимов);

(ssget ‘ (125.4 58.1) ‘ ((0 . “ POLYLINE”))) создает набор из всех примитивов типа POLYLINE, проходящих через точку (125.4 58.1);

(ssget “_C” ‘ (14.3 -5.2) ‘ (27.6 106.1)) создает набор из примитивов,

выбираемых секущей рамкой с углами в точках (14.3 -5.2) и (27.6 106.1);

(ssget “_X” ‘ ((0 . “LWPOLYLINE”) (8 . “ SET, ARC, BELL”))) создает набор из всех примитивов типа LWPOLYLINE, размещенных на слоях SET,

ARC и BELL;

(ssget “_X” ‘ ((0 . “*LINE”))) создаетнабор извсех примитивоврисунка, являющихся объектами типа *LINE (LINE, SPLINE, POLYLINE,

LWPOLYLINE);

Фильтры со сложными условиями Для формирования сложных условий в фильтрах выбора применяются

точечные пары со служебным DXF-кодом -4. В них используются следующие

аналоги логических операторов: AND, OR, XOR, NOT. Каждый из этих операторов имеет два вида: открывающей скобки и закрывающей скобки, например: “<AND” и “AND>”. Между такими скобками размещаются проверяемые значения (AND и OR являются многоместными операторами, XOR – двухместным, NOT - одноместным).

Примеры:

(ssget “_X” ‘ ((-4 . “<OR”) (-4 . “<AND”) (8 . “0”) (0 . “CIRCLE”) (-4

. “AND>”) (0 . “LINE”) (-4 . “OR>”))) – создает набор из тех примитивов, которые или являются окружностями и расположены на слое 0, или являются отрезками;

(ssget “_X” ‘ ((0 . “CIRCLE” (-4 . “>=”) (370 . 100) (-4 . “<”) (40 . 225.0)))

– создает набор из окружностей, которые имеют значение веса, больше или равное 1,00 мм, и радиус меньше 225 мм.

Функция sslength – вычисляет длину набора, т.е. количество содержащихся в нем примитивов.

(sslength <набор>)

Методические указания

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

Алгоритм определения радиусов и координат центров кругов:

(defun crug()

;Начальные значения списков радиусов (list_rad) (setq list_rad '() )

;Создание набора из кругов на слое HOLES

(setq nab_cir (ssget "_X" (list (cons 8 "HOLES") (cons 0 "CIRCLE"))))

; Проверка, сформировался ли набор nab_cir

; (если нет, то предыдущая операция вернет nil) (if (null nab_cir)

(progn

(princ "\nНет кругов на слое HOLES. "); сообщение об отсутствии (princ); тихий выход

); конец progn

(progn

(setq i -1 nab_len (sslength nab_cir))

;Цикл по количеству элементов набора nab_cir (repeat nab_len

(setq i (1+ i))

;Выбор следующего примитива и получение его списка

(setq cirlist (entget (ssname nab_cir i))) (setq radcir (cdr (assoc 40 cirlist)))

;(setq cencir (cdr (assoc 10 cirlist)))

;Добавление радиуса и точки центра к спискам list_rad и list_cen (setq list_rad (append list_rad (list radcir)))

;(setq list_cen (append list_cen (list cencir)))

); конец repeat

; Печать результирующих списков

(princ "\nРадиусы: ") (princ list_rad)

; (princ "\nЦентры: ") ;(princ list_cen)

); конец progn

); конец if

)

Задание:

1. Определить и вывести радиусы и координаты центров кругов, входящих в набор, используя код, приведенный выше.

2. Все примитивы на чертеже имеют по умолчанию цвет ByLayer (По слою).Это означает,что вспискесо свойствами примитива нетточечнойпары с DXF-кодом 62.

Поэтому необходимо выбрать какой-либо примитив, добавить к его списку точечную пару для красного цвета (код 1) и цвет отрезка изменить на красный.

Алгоритм добавления точечной пары к списку свойств примитива.

1.Сформировать точечную пару для красного цвета.

2.Объединить элементы в список.

3. Объединить новый список со списком, который содержит характеристики примитива.

Содержание отчета

1.Постановка задачи.

2.Описание функций, используемых в программе.

3.Описание хода решения (с пояснениями и примерами).

4.Листинг программы.

5.Выводы и результаты.

Контрольные вопросы

1.Что такое набор?

2.Какими способами формируются наборы?

3.Какая функция позволяет определить длину набора?

4.Каким образом можно изменить цвет примитива?

5.Что буде получено в результате выполнения следующей функции

(ssget “_X” ‘ ((0 . “*LINE”)))?

6.В чем заключаются преимущества работы с наборами?

7.Как долго может храниться набор?

8.Какой DXF-код используется для работы с радиусами?

9.Какая функция позволяет создать набор?

10.Как образуются фильтры со сложными условиями?

Соседние файлы в папке Лаба 3