Лаба 3 / Лабораторна работа № 3 2020
.pdfМетодические указания к выполнению лабораторных работ
по курсу
Программное обеспечение географических информационных систем
Таганрог 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.Как образуются фильтры со сложными условиями?