Функции доступа и функции модификации — КиберПедия 

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Функции доступа и функции модификации

2021-06-30 36
Функции доступа и функции модификации 0.00 из 5.00 0 оценок
Заказать работу

Рассмотрим на простом примере, как свойства объектов AutoCAD экспортируются в AutoLISP. Пусть требуется получить координаты начальной точки отрезка.

;;; Эта функция создает отрезок с помощью функции COMMAND и возвращает nil(defun make-aline()(command "_line" "5,5" "15,5" ""))

Загрузите функцию. Для запуска последующих функций нужно набирать их выражения в окне Console среды Visual LISP. Для получения координат начальной точки выполните следующие действия:

1. Запустите функцию, введя в окне Console (make-aline).

2. Присвойте переменной LineEntity имя созданной сущности: (setq LineEntity (entlast)) ↵

3. С помощью функции ENTGET получите список свойств этого объекта. Для этого введите в окне Console среды Visual LISP следующее выражение: (setq LinePropertyList (entget LineEntity)) ↵

4. Извлеките из списка свойств группу с кодом 10: (setq StartOfLineList (assoc 10 LinePropertyList)) ↵

5. Получите список только с координатами (setq StartOfLine (cdr (assoc 10 LinePropertyList))) ↵

Если требуется получить одновременно несколько свойств объекта, то нужно несколько раз повторить всю последовательность операций. Чтобы не писать один и тот же код многократно, можно создать простую функцию-интерфейс. В этой функции нужно объединить все выполненные выше операции для получения информации из любой группы свойств объекта, а не только из группы с кодом 10.

Пример:

;;; Возвращает любую группу, значение кода которой;;; содержится в списке свойств объекта;;; Параметрами функции являются имя сущности и код группы(defun Get-A-Group-Code (EntityName GroupCode)(cdr (assoc GroupCode (entget EntityName))))

Определяемая функция является функцией с аргументом. Параметры, стоящие в скобках, - это формальные параметры. Вместо них могут быть подставлены фактические параметры. Проверьте, например, работу этой функции, используя определенную ранее переменную LineEntity:

(Get-A-Group-Code LineEntity 10)↵(5.0 5.0 0.0)

Можно специализировать этот интерфейс, определив специально функцию, извлекающую данные только из группы с кодом 10. Для такой функции понадобится лишь один параметр - имя сущности. Код группы будет включен в вызов функции:

((defun Get-A-Group-10-Code (anEntityName)(Get-A-Group-10-Code anEntityName 10))

Проверьте работу этой функции, используя определенную ранее переменную LineEntity:

(Get-A-Group-Code LineEntity)↵(5.0 5.0 0.0)

Изменить свойства объекта можно с помощью функций CONS, SUBST, ENTMOD. Функция CONS создает новый список, добавляя в него первый элемент. Ее используют, если хотят присвоить группе с определенным кодом значения заданного списка. Ведите, например, в окне Console такой код:

(setq NewStartPoint (cons 10 (0 0 0)))↵Среда AutoLISP возвратит следующее:(10 0 0 0)

Используя переменные NewStartPoin и LinePropertyList, можно подставить вновь созданный список в группу с кодом 10. Этоделаетсяспомощьюфункции SUBST:

(Setq AcadLinePropertyList (subst NewStartPoin (assoc 10 AcadLinePropertyList)))

Чтобы внести выполненные в списках изменения в реальный объект AutoCAD, можно воспользоваться функцией ENTMOD:

(entmod LinePropertyList)↵

Создадим функцию- интерфейс, которая модифицирует группу с любым кодом для произвольного объекта:

(defun put-group-code-value (Entityname Groupcode Value / PropertyList)(setq PropertyList (entget Entityname))(setq PropertyList (subst(cons GroupCode Value)(assoc GroupCode PropertyList)PropertyList);_ завершение subst);_ завершение setq(entmod PropertyList));_ завершение put-group-code-value

В данной функции применены все выполнявшиеся ранее действия. Рассмотрим работу этой функции.

В первой и второй строках определяется функция put-group-code-value с тремя аргументами. В качестве первого выступает имя сущности Entityname, код группы Groupcode и новое значение группы с этим кодом Value. Здесь же определена локальная переменная PropertyList, предназначенная для хранения списка свойств объекта.

В третьей строке переменной PropertyList присваивается список свойств объекта, получаемый с помощью функции ENTGET.

В строке 4 описан процесс присвоения новых значений указанной группе списка.

В строках 5-8 выполняется подстановка новой группы, созданной функцией (cons GroupCode Value), на место текущих значений группы в списке свойств PropertyList.

В строке 11 база данных чертежа модифицируется с помощью функции ENTMOD.

Эта функция позволяет существенно упростить модификацию любой группы списка свойств. Теперь с помощью функции put-group-code-value можно модифицировать группу с кодом 10 для нашего отрезка.

Введите и загрузите функцию. Проверьте ее работу, введя в Visual LISP следующий код:

(put-group-code-value LineEntity 10 '(5 5 0))↵

Функция изменит координаты начальной точки отрезка.

По этому принципу можно определить отдельную функцию, которая модифицирует группу с кодом 10 или с любым другим кодом.

(defun put-group-10-code (Entityname Value)(put-a-group-code-value Entityname 10 Value)

Введите и загрузите эту функцию. Затем в окне CONSOLE введите следующий код, чтобы изменить координаты начальной точки отрезка на 15, -5,0.

(put-group-10-code LineEntity '(15 -5 0))

В окне AutoCAD убедитесь, что начальная точка отрезка изменилась.


Поделиться с друзьями:

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.011 с.