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