|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Cчитывание свойств ACAD_PROXY_ENTITY из VBA
Регистрация: 16.07.2013
Сообщений: 4
|
||
Просмотров: 7403
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Я бы сначала снял дамп объекта.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 16.07.2013
Сообщений: 4
|
Вот дамп объекта:
_$ (entget(car(entsel))'("*")) ((-1 . <Имя объекта: 7ee5b4f8>) (0 . "TESTENTITY") (330 . <Имя объекта: 7ee59cf8>) (5 . "217") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (48 . 100.0) (100 . "TESTENTITY") (100 . "TESTENTITY") (90 . 1) (301 . "Name") (300 . "тестовый объект") (301 . "Info") (300 . "тестовый объект") (301 . "Scale") (40 . 100.0) (301 . "Text") (300 . "Text field") (301 . "ClassID") (300 . "8d0ac8b1-0d5f-423f-abc9-958ea9c11ed0") (301 . "IsTempObject") (290 . 1) (301 . "DbEntity") (300 . "Multicad.DatabaseServices.McDbEntity") (301 . "ID")) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Константин Селикатов, дамп (в смысле - свойства и методы) можно обычно смотреть не только в лиспе. Ты ж работаешь в VBA? Вот там и смотри свойства объекта.
P.S. Лично у меня нет никакой возможности ковыряться.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
В порядке бреда - через SendCommand послать лисп, который выберет нужное значение и запишет в текстовую переменную, например USERS1. Потом значение прочитать в VBA. Может будет полезно
LISP & VBA. Передача данных и Vlax.cls concerns
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Подниму тему так как решения не было, а вопрос остался открытый.
Как не пробовал у AcadEntity нет прямых свойств получения (301 . "Text"). Лисп работает, но связка лиспа с VBA - это мягко выражаясь нехорошо. Кто знает, как получить значения 301, 310 свойств ? Хотябы вектор в каком направлении двигаться. |
||||
![]() |
|
||||
Нормально получить dxf-коды можно только в AutoLisp/ObjectARX, через одно место (называемое P/Invoke) в .NET. А вот в VBA (точнее средствами только VBA) - никак.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
VBA - это уже "мягко выражаясь нехорошо". Так что использование Auto-VisualLISP картины уже не испортит, ятд.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
![]() |
|
||||
|
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Ну можно еще кривее - запомнить дескриптор (Handle) примитива, сохранить файл в dxf - там его найти и ....
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
В этом коде есть использование функции из ObjectARX с именем acdbEntGet, которая является аналогом (entget) в AutoLisp'е:
Зеркальное отображение примитива однострочного текста (DBText) ----- добавлено через ~3 мин. ----- Цитата:
Только с lisp'ом явно будет проще - как минимум от версии и платформы AutoCAD не зависит. ----- добавлено через ~12 мин. ----- Еще вариант. Поищи VLAX.CLS - он может помочь обойтись без лиспа в явном виде.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
|
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Все нижеизложенное воспринимать не как инструкция к приминению, а что-то вроде, что всегда можно придумать как.
Из "чистого" VBA (или Net) получить текстовую строку по DXF 310 - да пожалуйста - он dxf читать не умеет, но задавать их в качестве критерия выборки SelectionSet (FilterType, FilterData) - может. Выбираем все примитивы (301 . "") - смотрим есть-ли с нашим Handle (если мне память не изменяет задать фильтр на DXF 5 - нельзя), если есть - то значит строка пустая, если нет, то ищем с (301 . "*") - соответственно есть такие или нет в принципе - а далее в цикле прогоняем все значения (симовлов 1-255) по каждой букве (учитывая что * и ? надо "маскировать") то есть "a*", "b*"... пока не поймаем 1-ую букву - допустим выдаст совпадение "X*". Далее проверяем на просто "X" и если нет то идем дальше "Xa*", "Xb"... (под a и b - имеются в виду начало алфавита). В итоге получим-таки всю строку (в наихудшем случае за X*255 обращений - где X длинна строки). з.ы. Я сам против таких методов - любую работу надо делать предназначенным на то инструментом, но...
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
|
||||
![]() |
|
||||
Цитата:
Код:
Насколько мне не изменяет память по группе 301 отфильтровать не получится (могу ошибаться). Кстати, в примитиве таких групп может быть несколько.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
У 5-ти мы проверим есть-ли там наш - по handle - что может быть несколько 301 - это я не учел - тогда нада для каждого примитива проверять всегда (а не до 1-го совпадения) весь алфавит, то есть выделить вначале все первые буквы, потом все вторые и пр - количество обращений "геометрически немного" вырастет и небудет понятно где какая строка (в каком порядке) - это минус....
з.ы. внимание на этом методе я бы не акцентировал
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Цитата:
Выбрал через фильтр 5 примитивов у которых есть группа 301, и у каждого есть такое: ....... (301 . "Text1") (300 . "Text field1") (301 . "Text2") (300 . "Text field2") (301 . "Text3") (300 . "Text field3") ....... 38 шт таких строк Мне нужно найти программно значение (300 . "Text field2"), я же не знаю что там "Text field2", если Вы говорите про перебор группы (301 . ...) и сравнением с искомым, то тут и непонятно как получить 301 а следом и 300 ? Фильтр внутри примитива - фантастика, тогда как ? |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DwgRuLispLib: Функции чтения и установки свойств рисунка (_dwgprops) | VVA | Библиотека функций | 15 | 14.12.2013 10:04 |
Прикрепить к примитиву (полилинии) данные, которые отобразит окно свойств (Properties, OPM) | Ax3 | Программирование | 25 | 06.04.2013 23:52 |
Устраненние просадочных свойств грунта при II-м типе просадочности - только по всей толще? | engineer_a | Основания и фундаменты | 16 | 10.12.2012 18:26 |
Ошибка 0xC0000005 (access violation) при импорте свойств динамических блоков | Ax3 | Программирование | 17 | 24.12.2010 09:43 |
зависание меню свойств єлементов в AutoCad 2010 rus x86 при работе в Windows 7 | micropyhcher | Баги и пожелания в Autodesk | 3 | 21.11.2009 11:05 |