Лаба 2 / Лабораторная №2
.docxЦель работы: освоить работу с характеристиками графических примитивов.
Ход работы
1) Задание: создать пользовательские функции, позволяющие перемещать примитивы.
2) Описание используемых функции
(list <элемент1> <элемент2> … <элементN>) – объединяет элементы в список. Это основная функция, позволяющая создать список.
(append <список1> <список1> … <списокN>) – выполняет слияние списков в один.
(car <список>) – возвращает первый элемент списка или точечной пары.
(cdr <список>) – возвращает список, в который включены все элементы, кроме первого.
(nth <номер> <список>) – извлекает из списка элемент по порядковому номеру. Нумерация элементов начинается с нуля.
(subst <новый элемент> <старый элемент> <список>) – отыскивает в списке старый элемент и возвращает список, в котором старый элемент (все вхождения) заменен на новый.
(cons <аргумент1> <аргумент2>) – добавляет к списку первый элемент или создает точечную пару. Если <аргумент 2> является списком, то функция cons добавляет в него <аргумент1> в качестве нового первого элемента. Если <аргумент2> является атомом (т.е. не списком), то функция cons создает точечную пару вида (<аргумент1> . <аргумент2>).
assoc <код> <список>) – применяется к сложному списку, в котором элементами являются списки или точечные пары, и выбирает из этих элементов (внутренних списков и точечных пар) тот, у которого первый элемент имеет заданное значение. Функция assoc – основной инструмент в операции, когда из списка с данными примитива AutoCad нужно выбрать тот элемент, который содержит точечную пару с нужным DXF-кодом свойства (цвета, слоя и т.д.).
(entlast) – возвращает имя последнего не удалённого основного примитива рисунка.
(entnext [<примитив>]) – если эта функция вызывается без аргументов, то она возвращает имя первого не удалённого примитива на базе рисунка. Если функция вызывается с аргументом – именем примитива <примитив>, то она возвращает имя первого не удалённого примитива, следующего за примитивом, описанным аргументом <примитив>.
(entsel [<запрос>]) – предлагает пользователю указать один объект, выдавая запрос, текст которого задан в качестве аргумента. Возвращаемое значение – список, состоящий из двух элементов: имени выбранного примитива и точки, которой пользователь указал объект.
(entget <примитив> [<приложения>]) – получает список с характеристиками примитива и является основным инструментом извлечения информации о геометрии и свойствах.
3) Алгоритм перемещения объекта:
1.Создали чертеж с несколькими линейными примитивами.
2. Извлекли последний примитив (entlast).
3. Извлекли характеристики этого примитива (entget).
4. Из характеристик извлекли список с координатами начала (assoc, DXF-код 10).
5. Из списка с координатами извлекли координату х, используя функцию car.
6. x увеличиваем на число 500, + pr3 500.
7. То же самое сделали с конечными координатами: assoc, DXF-код 11.
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).
4) Листинг программы приведён в соответствии с рисунком 1.
Рисунок 1 – Листинг программы
5) Результат работы программы приведён в соответствии с рисунком 2.
Ответы на контрольные вопросы
1. Что такое точечная пара?
Ответ: Особым случаем списка является точечная паpa:
< точечная пара >::=(< атом > . <атом>)
При хранении точечных пар требуется меньше места в памяти, чем при хранении обычных списков. Точечная пара может быть сформирована функцией CONS (см. ниже). Некоторые функции обработки списков не могут работать с точечными парами.
2. Какую координату необходимо изменить, чтобы переместить примитив вниз?
Ответ: координату Y
3. С помощью каких функций можно создать список?
Ответ: Функция LIST формирует список из любого числа элементов (атомов или списков) и возвращает список.
4. Что такое 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 – направление вектора нормали к плоскости, в которой создан примитив.
5. С помощью какой функции можно извлечь характеристики примитива?
Ответ: entget
6. Какие аргументы включает в себя функция subst?
Ответ: (subst <новый элемент> <старый элемент> <список>)
7. В чем заключается принцип работы функции assocc?
Ответ: (assoc <код> <список>) – применяется к сложному списку, в котором элементами являются списки или точечные пары, и выбирает из этих элементов (внутренних списков и точечных пар) тот, у которого первый элемент имеет заданное значение.
8. Что возвращает функция car?
Ответ: (car <список>) – возвращает первый элемент списка или точечной пары.
9. Для чего используются комбинации функций car и cdr?
Ответ: для замены координат
10. Что означает DXF-код 10?
Ответ: код 10 – координаты начальной точки
Вывод: в ходе лабораторной работы освоили работу с характеристиками графических примитивов.