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

Лаба 2 / Laboratornaya_rabota_2

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

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

по курсу

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

Таганрог 2019

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

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

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

Лабораторная работа № 2 «Перемещение графических примитивов»

Цель работы: освоить работу с характеристиками графических примитивов.

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

(list <элемент1> <элемент2> … <элементN>) – объединяет элементы в список. Это основная функция, позволяющая создать список. Например:

(list 6.5 8.52 7.1) – возвращает (6.5 8.52 7.1).

(append <список1> <список1> … <списокN>) – выполняет слияние списков в один. Например:

(append ‘(5 12) ‘(–7 10)) – возвращает (5 12 –7 10).

(car <список>) – возвращает первый элемент списка или точечной пары.

Например:

(car ‘(5 0 8 2)) – возвращает 5.

(cdr <список>) – возвращает список, в который включены все элементы,

кроме первого. Например:

(cdr ‘(9 12 16.74)) – возвращает (12 16.74).

(nth <номер> <список>) – извлекает из списка элемент по порядковому номеру. Нумерация элементов начинается с нуля.

(subst <новый элемент> <старый элемент> <список>) – отыскивает в списке старый элемент и возвращает список, в котором старый элемент (все вхождения) заменен на новый. Например:

(subst 15 71 ‘(45 71 16 92)) – возвращает (45 15 16 92).

(cons <аргумент1> <аргумент2>) – добавляет к списку первый элемент или создает точечную пару. Если <аргумент 2> является списком, то функция cons добавляет в него <аргумент1> в качестве нового первого элемента.

Если <аргумент2> является атомом (т.е. не списком), то функция cons

создает точечную пару вида (<аргумент1> . <аргумент2>). Например:

(cons 7 ‘(6 3 5)) – возвращает (7 6 3 5 );

(cons 60 1) – возвращает (60 . 1).

(assoc <код> <список>) – применяется к сложному списку, в котором элементами являются списки или точечные пары, и выбирает из этих элементов (внутренних списков и точечных пар) тот, у которого первый элемент имеет заданное значение. Функция assoc – основной инструмент в операции, когда из списка с данными примитива AutoCad нужно выбрать тот элемент, который содержит точечную пару с нужным DXF-кодом свойства

(цвета, слоя и т.д.). Например:

(assoc 8 ‘ (8 . “Buildings”) (62 . 5)) – возвращает (8 . “Buildings”).

(entlast) – возвращает имя последнего неудаленного основного примитива рисунка.

(entnext [<примитив>]) – если эта функция вызывается без аргументов,

то она возвращает имя первого неудаленного примитива на базе рисунка. Если функция вызывается с аргументом – именем примитива <примитив>, то она возвращает имя первого неудаленного примитива, следующего за примитивом, описанным аргументом <примитив>.

(entsel [<запрос>]) – предлагает пользователю указать один объект,

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

(entget <примитив> [<приложения>]) – получает список с характеристиками примитива и является основным инструментом извлечения информации о геометрии и свойствах.

Аргумент <примитив> – это имя примитива для получения его данных,

аргумент <приложения> – это список с именами приложений, с помощью которых к примитиву привязаны расширенные данные.

Предположим, в рисунке первым объектом является отрезок (примитив

- "LINE"). Тогда выражение

(setq pr (entget(entnext)))

возвращает такой список:

((–1 . <Entity name: 7ef03558>) (0 . "LINE") (330 . <Entity name: 7ef01cf8>) (5 . "223") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 1025.63 977.25 0.0) (11 2767.91 1607.64 0.0) (210 0.0 0.0 1.0))

Вэтом списке элементами являются точечные пары и списки, причем и

втех, и в других первыми элементами выступают целые числа, называемые

DXF-кодами. Под соответствующим кодом в точечных парах и списках находятся данные определенного типа:

код –1 указывает имя примитива (<Entity name: 7ef03558>);

код 0 – тип примитива ("LINE");

код 5 – метку (внутренний номер примитива в рисунке);

код 8 – имя слоя ("0");

код 10 – координаты начальной точки (1025.63 977.25 0.0);

код 11 – координаты конечной точки (2767.91 1607.64 0.0);

код 210 – направление вектора нормали к плоскости, в которой создан примитив.

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

Алгоритм перемещения объекта вправо:

1)Создать чертеж с несколькими линейными примитивами.

2)Извлечь последний примитив (entlast).

3)Извлечь характеристики этого примитива (entget).

4)Из характеристик извлечь список с координатами начала (assoc, DXF-

код 10) – например, (assoc 10 pr1).

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

6)Теперь x увеличиваем на некоторое число (50, 100, 150, можно свое) (+ pr3 100).

7)То же самое сделать с конечными координатами: (assoc, DXF-код 11) –

например, (assoc 11 pr1); тоже car.

8)Конечный х тоже увеличиваем на такое же число.

9)Затем извлечь координаты у (начальную и конечную), использую комбинации функций car и cdr. (car(cdr )).

10)То же самое проделать с координатой z (car(cdr(cdr))).

11)Теперь необходимо сформировать новый список с новой начальной координатой х, старой начальной координатой у и z = 0.0 (list pr6 a 0.0).

12)Добавить к этому списку DXF-код 10 (cons 10 (list pr6 a 0.0)).

13)То же самое проделать с конечными координатами.

14)В списке с характеристиками примитива заменить подсписки с новыми координатами (subst (cons 10 (list pr6 a 0.0)) pr2 pr1).

15)(subst (cons 11 (list pr7 b 0.0)) pr4 sl)).

16)Обновить файл чертежа (entmod sl).

Задание: создать пользовательские функции, позволяющие перемещать примитивы

1)вправо (влево);

2)вверх (вниз);

3)по диагонали.

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

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

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

3.Описание хода решения (с пояснениями и примерами, начальное положение примитива, конечное положение).

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

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

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

1.Что такое точечная пара?

2.Какую координату необходимо изменить, чтобы переместить примитив вниз?

3.С помощью каких функций можно создать список?

4.Что такое DXF-код?

5.С помощью какой функции можно извлечь характеристики примитива?

6.Какие аргументы включает в себя функция subst?

7.В чем заключается принцип работы функции assocc?

8.Что возвращает функция car?

9.Для чего используются комбинации функций car и cdr?

10.Что означает DXF-код 10?

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