|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Массивы в AutoCAD через COM. Как обратиться к свойствам?
päällikön suunnittelijat
Pietari, Venäjä
Регистрация: 04.12.2010
Сообщений: 63
|
||
Просмотров: 5836
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426
|
Обычный массив объектов не имеет никакой связи между его составляющими. Это просто копии объектов, располагающиеся в достаточно произвольном порядке. Динамический массив - совершенно другое дело.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 18.12.2010
Сообщений: 5,108
|
Цитата:
![]() Так массив или класс?? Вообще зачем в VS работать с АкАд'ом через COM, когда есть NET API?? ![]() Autodesk.AutoCAD.DatabaseServices.AssocArray? Последний раз редактировалось trir, 23.10.2013 в 21:35. |
|||
![]() |
|
||||
päällikön suunnittelijat Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426
|
Вообще-то я не шутил.
А так, динамический массив - обычный анонимный блок. Вот и все.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
päällikön suunnittelijat Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63
|
Так выглядят кишки массива (если смотреть через ENTGET (SSNAME):
((-1 . <Entity name: 7ffff705bd0>) (0 . "INSERT") (5 . "235") (102 . "{ACAD_REACTORS") (330 . <Entity name: 7ffff705ca0>) (102 . "}") (330 . <Entity name: 7ffff7039f0>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (2 . "*U2") (10 1695.74 1065.64 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) Если получать в COM через SelectionSet, то массив является объектом типа AcadBlockReference. Его свойство IsDynamicBlock= False, метод GetDynamicBlockProperties срабатывает, но возвращает пустой объект (нету свойств). Но ведь хранятся где-то же все эти свойства Код:
Последний раз редактировалось Дмитрий Асташев, 23.10.2013 в 22:23. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Не совсем обычный. Это динамический блок с именем вида "*U21" у которого параметр IsDynamicBlock=False и еще если брать COM модель, то на сколько я понял, массив отличается от динамического блока тем, что у Дин блока EffectiveName ("BlockName") и Name ("*U20") как правило не равны, а у массива эти поля имеют одинаковое значение, вида "*U21"
|
|||
![]() |
|
||||
päällikön suunnittelijat Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63
|
ОК. Массив можно поймать через, например,:
Dim block As AcadBlockReference = entity If block.EffectiveName = block.Name Then далее ищем его в блоках: For Each bl As AcadBlock In doc.Blocks If bl.Name = block.Name Then bl - это наш массив! Сразу можем получить число элементов массива через Dim Count = bl.Count. Интересно, что все элементы массива имеют одинаковые имена вида *U104, но разные handle и objectid. Причем данное поведение на зависит от того, является элемент массива простым примитивом или блоком. Но информации о количестве строк, столбцов и прочем нигде поблизости не наблюдается. Перехожу на прием. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426
|
Дмитрий Асташев, по такой технологии любой анонимный блок будет считаться массивом. Это неверно в принципе: любой динамический блок можно преобразовать в анонимный, у которого EffectiveName будет таким же, как и Name. Так что это в принципе - не критерий.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Нет у меня автокада с дин. массивами (я вобще долго тупил смотря на первые сообщения и не мог ухватить сути - потом понял что это про авктокадовские массивы - вспомнил что такие есть) - но сильно подозреваю что через COM к их свойствам не подобраться (как и ко многому другому). Если в COM свойств нету - то и взяться им неоткуда (если только самому не проонализировать геометрию выделив строки\столбцы - но метод этот будет кривой как турецкая сабля). В общем, скорее всего, тут либо колхоз, либо .Net или DXF на выбор.
Цитата:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Цитата:
P.S. Как вариант, может сделать подгружаемый в AutoCAD NET-плагин, который извлечет нужные данные по массиву? А затем передать эти данные в приложение с помощью внешнего файла/буфера обмена/реестра или другого известного Вам способа. В NET есть инструменты работы с массивами. Запустить плагин через SendCommand возможно, наверное (не пробовал). Думаю, должно получиться. Предложение №2 - возможно, что данные о массивах хранятся где-то в словарях чертежа. Покопать в этом направлении. Как отправная точка - (102 . "{ACAD_REACTORS") (330 . <Entity name: 7ffff705ca0>) (102 . "}")
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) Последний раз редактировалось Do$, 24.10.2013 в 13:35. |
||||
![]() |
|
||||
päällikön suunnittelijat Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63
|
Как жаль. Очень удобная штука - динамические массивы. Но без возможности получения свойств (в случае использования COM) - не такая полезная, как могла бы быть. Заказать бы у разработчиков (как подарок на рождество) такой функционал...
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
1. AutoCAD | Кулик Алексей aka kpblc | FAQ: Часто задаваемые вопросы | 25 | 27.09.2016 13:29 |
Информация по идентификационным кодам программ в сетевых лицензиях Autodesk | KSI | AutoCAD | 1 | 14.09.2009 15:59 |
BIESSEWORKS и AUTOCAD (связь через DXF) | Afonya | Программирование | 1 | 17.12.2008 13:25 |
Доступ к палитре инструментов AutoCAD через объектную модель | remlin | Программирование | 4 | 14.05.2008 22:14 |
Файлы отк-ся и сох-тся только через командную строку AutoCad | Zlobin | AutoCAD | 11 | 21.09.2006 14:59 |