Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Топ:
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Интересное:
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Рассмотрим на простом примере, как свойства объектов 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 убедитесь, что начальная точка отрезка изменилась.
|
|
|
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!