Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Топ:
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Интересное:
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Дисциплины:
2021-06-30 | 37 |
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:
|
Можно специализировать этот интерфейс, определив специально функцию, извлекающую данные только из группы с кодом 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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!