| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
22.03.2021, 18:31 | #1 | |
Как получить формулу поля атрибута блока посредством lisp?
Инженер-проектировщик ОВиК
Томск
Регистрация: 11.03.2020
Сообщений: 7
|
||
Просмотров: 5688
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
Поставь это дело вручную и проанализируй формулу поля - там обычно показывается все что необходимо.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Инженер-проектировщик ОВиК Регистрация: 11.03.2020
Томск
Сообщений: 7
|
Кулик Алексей aka kpblc, Да я прекрасно понимаю, что хочу вытащить, а именно идентификатор атрибута, если его можно так назвать, некий порядковый номер.
Например, есть блок, шаровой кран и у него есть атрибут "Позиция", формула для поля данного атрибута выглядит следующим образом "%<\AcObjProp Object(%<\_ObjId 4591463040>%).TextString>%", исхидя из формулы, я понимаю, что мне необходимо получить индетификатор 4591463040, вот каким образом его получить, не могу понять, сначала думал, что поможет метод FieldCode, но что-то не получилось, как я понял, он вытягивает поля только из текстовых элементов... пробовал через методы ActiveX, но знаний, видимо, пока не хватает...тоже не вышло получить данную информацию. Методы и функции разбираю по Полещуку. |
|||
|
||||
Регистрация: 07.05.2013
Сообщений: 48
|
вот тут у Алексея почитайте, может поможет - https://autolisp.ru/2010/05/30/field-proceed-2/
|
|||
|
||||
ух какая веселая задачка.
Код:
В целом задача решена, в частностях: надо переписывать указание объекта и прочие взаимодействия с пользователем и проверки корректности ввода. з.ы. переписал что бы повеселей выглядело, но над обработкой ESC еще нужно поколдовать.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 23.03.2021 в 12:09. |
||||
|
||||
Инженер-проектировщик ОВиК Регистрация: 11.03.2020
Томск
Сообщений: 7
|
AndruxaZ, Спасибо! Посмотрел, но при попытке реализовать у себя рассмотренные коды ActiveX выдает ошибку "ошибка: ActiveX Server возвратил ошибку: неизвестное имя: FieldCode", такое же было, когда пытался применить методы...пробовал примеры из учебника Полещука и из справочной документации по AciveX...но скорее всего я что-то делаю не так...
----- добавлено через ~1 мин. ----- Vladimir_Sergeevich, Спасибо за код, почти то что надо, буду его рабирать, чтобы понять, как это работает. Может добавлю возможность указывать конкретную точку вставки выноски и полочки. |
|||
|
||||
Цитата:
По хорошему, надо бы обернуть строку 28 в (if (sad-parse-ml-line... и на ветку else повесить удаление созданной мультивыноски. Совсем в идеале, надо крепко переписать sad-parse-ml-line что бы она корректно обрабатывала в ПСК.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Инженер-проектировщик ОВиК Регистрация: 11.03.2020
Томск
Сообщений: 7
|
Спасибо всем, кто ответил в теме и давал полезные материалы! Особая балгодарность Vladimir_Sergeevich
С кодом более менее разобрался, для моих целей решение оказалось чуть короче, может конечно я что-то упустил, но вроде как все работает, всего навсего соединил два кода и получил результат. код оставлю здесь, вдруг кому пригодится...или может опытные пользователи ткнут меня в неверное решение или какое-либо упущение. Код:
|
|||
|
||||
Bamka70, код может и короче (по сути вырезаны функции рисовки и интерактивного редактирования реализованные через VisualLisp) и вся красота заменена на (command "_.mleader"...
В своей практике я сталкивался с тем, что быстродействие командных методов оставляет желать лучшего (вот прям до выбешивания). В результате у меня развилось религиозное неприятие командных методов программирования. С одной стороны понято, что command кушает в более понятном для инженера-непрограммиста виде, с другой моя sad-addMleader не намного сложнее. До кучи, есть лишний тычок мышкой и не видно как сядет выноска. з.ы. а где короче? как было 35 строк, так 35 строк и осталось Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Bamka70,
зачем вообще циклиться на выборе блока, первом атрибуте... атрибут ведь видимый - почему не тыкнуть сразу в него? Код:
Последний раз редактировалось koMon, 25.03.2021 в 12:23. |
||||
|
||||
Bamka70,
ну если скрытые, то ↑ |
||||
|
||||
koMon, посмотри ссылку из поста #4 и описание функции get-ObjectId из #5 или #9
на современной оси vla-get-objectid вернет не то значение, и надо стучаться через vla-GetObjectIdString я сначала тоже долго думал, почему же оно не хочет работать, пока AndruxaZ не подсказал где списать
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
|
||||
|
||||
koMon, грузить не буду, так отвечу.
vla-GetObjectIdString возвращает 1007938000 и поле нормально работает, vla-get-ObjectId возвращает 37 и поле не понимает что от него хотят. з.ы. Цитата:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
|
||||
Vladimir_Sergeevich,
ну на нет и суда нет! но как говорится, почувствуй разницу Код:
|
||||
|
||||
думать это полезно, читать мануалы полезней вдвойне
----- добавлено через ~8 мин. ----- да потому что vla-get-objectid возвращает не десятичное число а Long_PTR Последний раз редактировалось koMon, 26.03.2021 в 09:52. |
||||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Создание поля (field), ссылающегося на текстовое значение ячейки таблицы. | skkkk | Готовые программы | 141 | 24.11.2023 15:49 |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
LISP. Получение значения ID пользовательского атрибута динамического блока | modest-bp | LISP | 23 | 03.09.2020 11:40 |
Использование Поля в Атрибуте Блока | 128500 | AutoCAD | 3 | 02.11.2012 18:42 |
Как с помощью lisp получить список всех состояний видимости динамического блока | crosandr | LISP | 4 | 11.04.2012 22:33 |