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

Лаба 4 / Лабораторная №4

.docx
Скачиваний:
0
Добавлен:
27.11.2023
Размер:
82.97 Кб
Скачать

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

Ход работы

1)Задание: создать чертеж, можно с 1 примитивом. Добавить, удалить и вывести расширенные данные примитива.

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

(regapp <приложение>) - заносит имя приложения в таблицу APPID.

Функцияия regapp возвращает имя приложения (или nil в случае ошибки). Значение nil возвращается также, если приложение с таким именем уже регистрировалось.

Функция entmake может создать примитив и сразу присоединить к нему расширенные данные.

С помощью функции entmod можно добавить расширенные данные к существующему графическому объекту.

3) Присоединения расширенных данных.

Зарегистрировали имя приложения LAUNCH01, с которым связываются присоединяемые расширенные данные.

В переменной le сохраняется список данных последнего примитива рисунка.

Затем создается список edata, который имеет структуру расширенных данных:

(setq edata (list (list -3 (list "LAUNCH01" (cons 1000 "Ступень") (cons 1070 121)))))

Далее с помощью функции append формируется список lе2, который является объединением списков lе и edata:

((-1 . <Entity name: 178bb402cf0>) (0 . "LINE") (330 . <Entity name: 178bb4019f0>) (5 . "2A7") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 1199.4 1214.63 0.0) (11 2411.97 1888.17 0.0) (210 0.0 0.0 1.0))

Спомощью функции entmod и списка le присоединили расширенные данные к примитиву.

Удаление расширенных данных

Сначала с помощью функции entget получается полный список данных примитива (с расширенными данными всех приложений):

(setq le (entget ent (list "*")))

Сами расширенные данные сосредоточены в подсписке с DXF-кодом -3.

Извлечение расширенных данных

Для извлечения сначала необходимо использовать функцию get (в аргументах указать имя приложения, затем assoc с кодом -3, и затем комбинации car и cdr.

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

;Присоединения расширенных данных

; Регистрация приложения LAUNCH01

(regapp "LAUNCH01")

; Получение списка данных последнего примитива

(setq le (entget (entlast)))

; Формирование подсписка расширенных данных

(setq edata (list (list -3 (list "LAUNCH01"

(cons 1000 "Stypeni") (cons 1070 121)))))

; Включение в список расширенных данных

(setq le2 (append le edata))

; Присоединение расширенных данных к примитиву

; (обновление примитива)

(entmod le2)

; Проверка данных примитива

(entget (entlast) '("LAUNCH01"))

;Удаление расширенных данных

; Удаление расширенных данных из примитива

(defun clean_xdata (ent app / le le1)

(if (and (= (type ent) 'ENAME) (= (type app) 'STR))

(progn

; Читаем список данных с расширенными данными приложения app

(setq le (entget ent (list "*")))

; Удаляем расширенные данные приложения app, заменяя их на частично пустой список

(setq le1 (subst (cons -3 (list (list app))) (assoc -3 le) le))

; Обновляем примитив

(entmod le1)

);progn

(princ "\nНеверен тип аргументов. ")

);if

(princ)

);clean_xdata

Вывод: написали программу, которая присоединяет расширенные данные и удаляет расширенные данные.

Ответы на контрольные вопросы:

1. Для чего служит функция regapp?

Ответ: заносит имя приложения в таблицу APPID. Функция regapp возвращает имя приложения (или nil в случае ошибки).

2. Что такое расширенные данные?

Ответ: текстовые или числовые данные, которые желательно хранить вместе с объектом

3. Что является признаком наличия расширенных данных?

Ответ: (признак наличия расширенных данных, в котором далее располагаются точечная пара с кодом 1001 (начало расширенных данных и имя приложения, с которым они связываются) и точечные пары с DXF-кодами 1000, 1002—1071.

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

Ответ: reverse — переворот списка;

5. В чем заключается особенность использования функции entget при работе с расширенными данными?

Ответ: В списке, возвращаемом функцией entget, расширенные данные находятся в подсписке, начинающемся с DXF-кода -3.

6. С чего начинается работа с расширенными данными?

Ответ: С регистрации приложения

7. Какие DXF-коды используются для работы с расширенными данными?

Ответ: DXF-коды в диапазоне от -2 до 239

8. Какая функция объединяет списки?

Ответ: функция append

9. Какие функции позволяют контролировать размер расширенных данных?

Ответ: функции xdsize и xdroom

10. С каким количеством приложений могут быть связаны данные примитива?

Ответ: Имена приложений хранятся в рисунке в таблице символов "APPID" 

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