|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
10.11.2015, 10:27 | #1 | |
Как выбрать объект методами автолисп по имени?
Регистрация: 27.01.2012
Сообщений: 240
|
||
Просмотров: 5594
|
|
||||
Команда: (entget (car (entsel)))
Выберите объект : ((-1 . <Имя объекта: 7ffffb06540>) (0 . "LINE") (330 . <Имя объекта: 7ffffb03990>) (5 . "238A") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 7) (6 . "Continuous") (100 . "AcDbLine") (10 1.2212 3.1366 0.0) (11 6.90465 7.1618 0.0) (210 0.0 0.0 1.0)) Выбор объекта по его метке (5 . "238A") (setq Ob (handent "238A")) |
||||
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Вы пытаетесь добавить объект к уже существующему набору. Какой смысл выбирать один примитив по фильтру, если вас есть указатель на него?
Воспользуйтесь командой vla-AddItems и не ищите сложных путей. Вот еще вопрос. Вы действительно добавляете объект к набору или же вам просто нужно выбрать один объект и работать с ним?
__________________
Автоматизация должна быть автоматической. Последний раз редактировалось ProPeller, 10.11.2015 в 11:19. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Тоже теперь вдруг стало любопытно. Странно, почему не работает конструкция типа (слету не смекну, как использовать в фильтре тип ENAME, поэтому использовал handle (STR)):
Код:
Код:
|
|||
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Скорее не методы, а именно фильтры. Может быть потому что с таким фильтром можно выбрать только лишь один объект? Как вы уже правильно сказали, практического смысла это не имеет.
__________________
Автоматизация должна быть автоматической. |
|||
|
||||
Регистрация: 27.01.2012
Сообщений: 240
|
Такой выбор понятен....
но можно ли передать команде ssadd <имя объекта> без указания на него интерактивно (car (entsel)) , то есть передать непосредственно значение <имя объекта: 7ffdee4234> ? |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Ну да, корявенько выразился, хотел выпендриться - только опозорился (с)
Цитата:
При попытке использовать фильтр по хэндлу ошибки не возникает (типа "неверный список ssget"), а просто выдается nil как будто такого объекта и нет вовсе. Мне, конечно, остается только догадываться о внутренней реализации механизмов лиспа и фильтров в частности, но думалось, что там все идет по одному определенному алгоритму, и возможжно, получается, что фильтр по хэндлу специально исключили из функционала, потому что посчитали, что это не имеет практического значения? Непонятно. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Можно. Сначала запомни ename-указатель на примитив в отдельную переменную, а потом ее и используй. Другой вопрос, что не факт, что такой подход сработает (можно в переменную загнать указатель на примитив внутри блока, например).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 27.01.2012
Сообщений: 240
|
|
|||
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Работает он правильно, просто функция pl:obj-filter-select-manual подразумевает под собой использование фильтра, а фильтр с подобными условиями работать не будет в силу особенностей ЯП. До сих пор не понимаю, с какой целью вы используете pl:obj-filter-select-manual.
Хотя, вопрос как "загонять". Расскажите как вы это делаете?
__________________
Автоматизация должна быть автоматической. Последний раз редактировалось Кулик Алексей aka kpblc, 10.11.2015 в 13:44. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Offtop: Хотя я правил не это
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Цитата:
__________________
Автоматизация должна быть автоматической. |
|||
|
||||
Цитата:
Цитата:
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
|
||||
Регистрация: 15.11.2022
Сообщений: 10
|
Цитата:
Во всей литературе единственным примером работы с entget является код вида: (enget (entlast)) или (entget (entnext)). Понятно, что эти примеры прекрасно работают, но ведь и entlast, и entnext используют имя объекта или какую-то иную "метку". Так почему же невозможно использовать эту метку сразу, если она мне известна? |
|||
|
||||
Регистрация: 10.01.2020
Сообщений: 185
|
Функция entget как раз и служит для получения информации в списочном виде из объекта ENTITY - смотри справку тут
То есть ты предварительно получаешь объект и передаешь его как аргумент в entget. Если хочешь, то можешь сделать свою функцию и передавать в нее хоть ENTITY, хоть HANDLE и уже внутри нее реализовать что-то Или я не правильно понял что тебе нужно... |
|||
|
||||
Регистрация: 15.11.2022
Сообщений: 10
|
Или я правильно объяснить не могу)
В примере хелпа: (entget (entlast)) Я хочу знать, можно ли: (entget (-1 . <Entity name: slk0dsl1>)) или какой-то другой синтаксис, но напрямую в entget передать Entity name или другой уникальный идентификатор. Без промежуточного присваивания, entsel и т. п. |
|||
|
||||
Регистрация: 10.01.2020
Сообщений: 185
|
Думаю, что ты не очень понимаешь суть entsel/entnext и какой аргумент нужен entget.
entsel/entnext позволяют получить ОБЪЕКТ (он же entity). Напрямую изменить/прочесть его параметры ты не можешь, чтобы это сделать, надо как представить его в "читабельном" виде. Для этого и нужен entget - он получает ОБЪЕКТ, а возвращает СПИСОК из точечных пар, соответствующих свойствам объекта. И вот как раз этот СПИСОК ты можешь изменить, что в свою очередь повлияет на ОБЪЕКТ. Что в принципе и отражено в названии языка List Processing language — «язык обработки списков» |
|||
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470
|
Цитата:
(entget (cdr(-1 . <Entity name: slk0dsl1>))) Всю-то "точечную пару" зачем функции (entget) скармливать?
__________________
Счастливо, Алексей! |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Revit 2012: не отображаются некоторые объекты в плане, видимость включена. | Rudy | Revit | 3 | 04.12.2017 22:41 |
Объединение дуг, линий в единый объект, Как объединить? | Vladimir.P | AutoCAD | 41 | 25.01.2015 08:03 |
Как выбрать объект через командную строку или программно? | OSIP | Программирование | 12 | 25.09.2014 17:48 |
Можно ли выбрать объект модели из листа не активируя видовой экран? | mkung | Программирование | 24 | 25.06.2014 09:31 |
Как зная точку выбрать объект и получить его свойства? | Zaghim | Программирование | 6 | 13.09.2010 09:07 |