| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
ПРосто в поиске гугла или яндекса, да даже этого сайта, вбей свой вопрос "извлечь значения атрибута из блока" и читай, изучай
Offtop: обалдеть, когда я начинал изучать ЛИСП, то скачал много разных учебников, перерыл этот сайт и другие схожие... что за лень у человека? По поводу справки - есть в автокаде главное меню -> Справка -> Дополнительные ресурсы -> Справка для разработчиков. ВОт ееродимую и изучай, ЛИСП, потом объектную модель. Конкретно для тебя - объект BlockRef (т.е. вставка блока). Там прописаны возможные методы и свойства этого объекта. Один из методов - getAttributes. Но прописано для VBA. В лиспе ты добавляешь vla- к таким методам. И будет у тебя vla-getAttributes. А аргументы этой функции уже сам найдешь при поиске. Второй момент - тебе нужно, чтобы вставлялся блок с именем, соответствующим значению атрибута. Здесь возможны разные варианты вставки блока. Так же ищи в поиске "вставить блок". Также советую эту тему с первых страниц читать, не обязательно всю, но первые страниц 10-20 тебе будут полезны. |
|||
|
||||
Регистрация: 11.12.2011
Сообщений: 32
|
Гораздо легче было бы изучать имея перед собой кусок кода, выполняющий конкретно эти действия, а в информации, которую нахожу через гугл черт ногу сломит. А изучать весь автолиса ради такой элементарной узкой задачки не очень хочется, но похоже придется(
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
Никита Ремизов, в поиске по vla-getattributes примеров полно. Всяких и разных. Я ж ссылку давал!
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 11.12.2011
Сообщений: 32
|
Кулик Алексей aka kpblc, так я ведь и не говорю, что там недостаточно примеров, просто вы на секундочку представьте, как человеку не владеющему лиспом в них быстро разобраться (когда там vla-getattributes где-нибудь в середине находится и бог его знает, что происходило до и происходит после). В любом случае спасибо всем за помощь
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
Последний раз: http://forum.dwg.ru/showthread.php?t=22653 + http://forum.dwg.ru/showthread.php?t=54116
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 05.09.2011
Сообщений: 38
|
Всем привет! Есть ли способ процедурно взорвать объекты MagiCAD с сохранением оригинала на лиспе?
Есть комманда "_magiexplode", но не нравится, что каждый раз выскакивает модальное окно с ворнингом, объекты будут удаленны и т.д, а потом просит выбрать объекты. Заранее выбрать объекты, а потом использовать комманду тоже не получается. Есть ли способы решения какие-то? |
|||
|
||||
проектировщик CТБ Регистрация: 03.03.2009
Сообщений: 28
|
Доброго всем времени суток!
Господа, вопрос, пожалуй, дурацкий, но чайникам можно и такое. Есть у меня блок, который я посредством автолиспа explode-ом разбиваю на линии и пытаюсь найти его геометрический центр. При разбитии получаю вариант с безопасным массивом, который преобразую в список сылок на объекты. Потом мне надо из эотого списка выделить сключительно линии, проигнорировав атрибуты и тексты. То есть все выглядит просто - берем каждый элемент списка и проверяем его на причастность к линиям. Но найти функцию такую в Axtive-X не могу. Текст, написанный на лиспе - длинный и пугающий, приходится применять функции преобразования. (setq temp (vla-explode (vlax-ename->vla-object (entlast)))) (setq temp_list (vlax-safearray->list (vlax-variant-value temp))) (setq points_list nil) (foreach s temp_list (if (= (cdr(assoc 0 (entget (vlax-vla-object->ename s)))) "LINE")) (progn (setq p1 (cdr(assoc 10 (entget (vlax-vla-object->ename s))))) (setq p2 )cdr(assoc 12 (entget (vlax-vla-object->ename s)))) (setq point_list (list point_list p1 p2)))))) Есть ли vla-функции, которые идеентичны " (= (assoc 0 (entget (vlax-vla-object->ename s))) (0. "LINE"))" т.е. позволяют вытащить тип т вла-объекта? Последний раз редактировалось Aminka, 26.09.2012 в 17:11. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
(= (strcase (vla-get-objectname s)) "ACDBLINE")
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
+ к тому если вдруг окажется что нужны все же не только линии, а какая-либо группа объектов, то, как вариант, использовать (vlax-property-available-p ...)
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Регистрация: 29.09.2012
Сообщений: 3
|
Доброго всем дня (ночи)!
Прошу помощи в разъяснении странной ситуации, которая не дает мне спать уже вторую неделю. В своих «лиспах» я использую обработчик ошибок: Код:
Может, кто встречался с подобной ситуацией? Сейчас пытаюсь заменить функцию *error* на vl-catch-all-error-message (может это поможет), переварил кучу информации, но не могу сообразить, как ее сделать одинаковой для всех моих лиспов. Например, свою функцию *error*, я тупо копирую из одной программы в другую, мне достаточно только, чтобы восстановились перечисленные выше системные переменные при нажатии клавиши “Esc”. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Offtop: за исключением пятницы 13-го?
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Serg57, Используй *error* как локальную функцию, тогда отпадет необходимость восстанавливать старый обработчик ошибок
http://autolisp.ru/2009/09/13/error-catch/ http://www.lee-mac.com/errorhandling.html
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
А что собственно не работает?
|
|||
|
||||
Регистрация: 29.09.2012
Сообщений: 3
|
VVA спасибо, в понедельник попробую на работе, так как дома у меня АМД (еще раз простите, что не в тему) и функция *error* работает и в таком виде, как я прислал.
gomer Ситуация, например, такая: я черчу белыми линиями (основные линии) на черном экране, линии разрезов красные линии (тонкие). На линии разрезов написал программку, которая перед простановкой разреза переключает цвет на красный и устанавливает определенные привязки, а после выполнения команды восстанавливает исходные привязки и цвет.[/FONT] [FONT=Times New Roman]Так вот, если в момент запроса точки нажать кдавишу «Esc», то привязки и цвет не восстанавливаются (это на рабочем компьютере), а на домашнем все нормально *ERROR* срабатывает. Последний раз редактировалось Serg57, 29.09.2012 в 23:42. |
|||
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
у меня к сожалению амд, а на работе автокада нет, причины глюка могут быть самые разные, но все ошибки элементарно проверяются с помощью alert, если уж vlide не используется для отладки
Код:
Последний раз редактировалось gomer, 30.09.2012 в 02:57. |
|||
|
||||
МК, ЖБК Регистрация: 14.09.2012
Киров
Сообщений: 33
|
Есть код ЛИСП, написанный Кулик Алексей aka kpblc. Создания вспомогательных линий в отдельном слое. Помогите разобраться, как работает.
Возможно в теме и есть подобные примеры, но 100 стр форума - это очень много. С книгами Полещука знаком. Читаю. Описание всех функций все нашел, но как они все вместе работают, я не понял. Например: не понял, как условием функции IF может быть отрицание NOT. А функция "vl-catch-all-error-p" возвращает T или NILL. (if (not (vl-catch-all-error-p... - это получается что: (если (не (истина/лож)... Не понятно. Хотелось бы построчный комментарий. Зачем тут Lambda? Код:
Код:
Последний раз редактировалось Alexg-12, 04.10.2012 в 14:47. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
if имеет 3 (или 2) аргумента - условие, действие если да, [действие если нет], соответственно если действие_ДА должно выполняться при не "выполнении" условия, его "оборачивают" в (not....). В автолиспе нет как таковых отдельных булевых типов, вместо них используються в качестве false - пустой список - это "синонимы" (), '(), nil или любой не определенный символ, а в качестве true - используется любое другое значение.
Цитата:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |