| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как программно получить свойства прокси объекта

Как программно получить свойства прокси объекта

Ответ
Поиск в этой теме
Непрочитано 19.11.2014, 12:20 #1
Как программно получить свойства прокси объекта
zvyagaaa
 
Регистрация: 11.08.2011
Сообщений: 41

Есть в файле прокси объекты стороннего приложения. В автокадовском окне "свойства" нужные мне свойства отображаются. Подскажите, как можно программно их получать? Желательно на VBA. Куда копать?
Просмотров: 9250
 
Непрочитано 19.11.2014, 12:34
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


Получаешь указатель на объект, а потом obj.Layer, obj.Color и теде.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.11.2014, 13:23
#3
zvyagaaa


 
Регистрация: 11.08.2011
Сообщений: 41


я не пойму, как в коде показать, что нужно выбирать только proxy объекты. Вот для линий пожалуйста -
If sset.Item(ItemI).ObjectName = "AcDbLine" Then

а какое имя объекта у прокси объекта?

И еще, как бы получить имена этих свойств полностью? Вот я приложил скрин окна свойств. Они же не документированы.
Миниатюры
Нажмите на изображение для увеличения
Название: magi.PNG
Просмотров: 125
Размер:	25.9 Кб
ID:	138975  
zvyagaaa вне форума  
 
Непрочитано 19.11.2014, 13:35
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


Насколько я помню (сейчас нет ни одного файла с прокси) - "ACAD_PROXY_ENTITY" или "AcDbZombieEntity". Выбери прокси да посмотри его Name, в чем трудность-то?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.11.2014, 14:48
#5
zvyagaaa


 
Регистрация: 11.08.2011
Сообщений: 41


это все понятно, мне не ясно, как можно отобразить все свойства у объекта, которые он отображает в окне "свойства" автокада, как получить к ним доступ?
чтобы не в слепую подбирать названия свойств, а можно было получить их список?
Вот я к примеру выше, подобрал, что свойства sset.Item(0).DuctSystem отображают ID системы, sset.Item(0).PartType тип, а как получить весь список? Может быть есть хак? Как-то же автокад понимает, что нужно отображать в этом окне?
zvyagaaa вне форума  
 
Непрочитано 19.11.2014, 14:50
#6
trir


 
Регистрация: 18.12.2010
Сообщений: 5,057


Acad не использует VBA, а ObjectARX
trir вне форума  
 
Автор темы   Непрочитано 19.11.2014, 14:52
#7
zvyagaaa


 
Регистрация: 11.08.2011
Сообщений: 41


trir - проходим мимо. Разговоры о смерти VBA в автокаде идут уже какую пятилетку, однако сейчас работаю в 2014 версии, и VBA есть. По существу вопроса есть что ответить?
zvyagaaa вне форума  
 
Непрочитано 19.11.2014, 14:55
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


zvyagaaa, в AutoCAD нет понятия ни ID системы, ни типа - ничего подобного. Похоже, ты работаешь либо не в чистом ACAD, либо у тебя есть соответствующие ObjectEnabler. Следовательно, это уже явно не прокси-объекты.
Мораль: читай документацию по своей версии вертикалки
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.11.2014, 14:58
#9
zvyagaaa


 
Регистрация: 11.08.2011
Сообщений: 41


Документации по вертикалке нет. ObjectEnabler да, есть. Как-то список названий параметров все-таки можно выдернуть из объекта или нет?
zvyagaaa вне форума  
 
Непрочитано 19.11.2014, 14:59
#10
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


zvyagaaa, не хамите. Вам по существу и ответили.
Если Вы не поняли, автор ответа не виноват.

Попробую развернуть ответ: Автокад смотрит на объект через objARX (включая енаблеры) и видит ВСЕ свойства, Вы смотрите через VBA и видите только то, что компания Аутодеск сочла нужным.
Boxa вне форума  
 
Автор темы   Непрочитано 19.11.2014, 15:06
#11
zvyagaaa


 
Регистрация: 11.08.2011
Сообщений: 41


Boxa как написано, так и понял.
в качестве офтопа, на любой вопрос как сделать то-то и то-то в VBA обязательно находится человек, который говорит, что VBA нафиг - бери ObjARX, поэтому так и ответил.
тогда как я получаю доступ к свойствам, которые описал выше?
zvyagaaa вне форума  
 
Непрочитано 19.11.2014, 15:13
#12
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от zvyagaaa Посмотреть сообщение
тогда как я получаю доступ к свойствам, которые описал выше?
Как Вы и написали выше, методом тыка, смотрите и сами сопоставляете, что за что отвечает..

А если Вам нужно больше помощи, то не ленитесь выложить сам файл с примером объекта, ссылкой на енаблер и не забудте фрагмент кода с которым работаете. В противном случае будет гадание.

Offtop: В ответе trir нет призыва выбросить вба и начать пользоваться ARX, это Вы себе напридумывали
Boxa вне форума  
 
Непрочитано 19.11.2014, 15:16
#13
trir


 
Регистрация: 18.12.2010
Сообщений: 5,057


Цитата:
тогда как я получаю доступ к свойствам
Потому что COM?
trir вне форума  
 
Автор темы   Непрочитано 19.11.2014, 15:47
#14
zvyagaaa


 
Регистрация: 11.08.2011
Сообщений: 41



да СОМ интерфейс есть в программе, но к нему тоже документации нет. Постараюсь, собрать инфо, чтобы получить более квалифицированную помощь.
zvyagaaa вне форума  
 
Непрочитано 19.11.2014, 15:53
#15
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Может я "со свиным рылом в калашный ряд", но все же рискну напомнить о LISP-функции vlax-dump-object. Для исследования объектов - самое то. Не знаю, есть ли аналог в VBA.
Цитата:
я не пойму, как в коде показать, что нужно выбирать только proxy объекты
"AcDbProxyEntity" в DXF-группе 100 показывает, что объект является "проксей". Если не достучитесь непосредственно из VBA, кажется, можно вызывать LISP-выражения из VBA

Offtop:
Цитата:
да СОМ интерфейс есть в программе, но к нему тоже документации нет.
MagiCAD неоднократно обсуждался на форуме, может, чего найдете...и разрабы вроде присутствовали, хотя не уверен

Последний раз редактировалось kp+, 19.11.2014 в 16:28.
kp+ вне форума  
 
Автор темы   Непрочитано 20.11.2014, 10:12
#16
zvyagaaa


 
Регистрация: 11.08.2011
Сообщений: 41


MagiCAD разрабы могут дать документацию к COM интерфейсу за денежку только.
zvyagaaa вне форума  
 
Непрочитано 20.11.2014, 13:40
1 | #17
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


1) То, о чем ты говоришь, не является прокси-объектами. Прокси-объекты - это объекты-заместители, которые появляются в том случае, когда не загружено основное приложение или ObjectEnabler. Судя по скрину с Панели Свойств - это не прокси-объект, а объект MagiCAD.
2) Попробуй для начала воспользоваться лисп-функцией (progn(vl-load-com)(vlax-dump-object(vlax-ename->vla-object(car(entsel)))t)) для анализа того, что это за примитив. То, что увидишь в текстовом окне AutoCAD, выложи сюда.
Александр Ривилис вне форума  
 
Непрочитано 20.11.2014, 13:56
#18
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Offtop:
Цитата:
Сообщение от zvyagaaa Посмотреть сообщение
MagiCAD разрабы могут дать документацию к COM интерфейсу за денежку только.
Вот жадины!
kp+ вне форума  
 
Автор темы   Непрочитано 20.11.2014, 17:22
#19
zvyagaaa


 
Регистрация: 11.08.2011
Сообщений: 41


Александр Ривилис
1) это я уже понял спасибо
2) да, это то, что надо
Код:
[Выделить все]
; IMCDuct: IMCDuct Interface
; Значения свойств:
;   AbsorptionSerieName (RO) = ""
;   AbsorptionSerieThicknessMM (RO) = 0
;   ActiveRoom (RO) = " "
;   ActiveStorey (RO) = "1 \"Этаж 1\""
;   Application (RO) = Ошибка
;   BottomOfPartFCSMM (RO) = 3875.0
;   CenterOfPartFCSMM (RO) = 4000.0
;   Description (RO) = ""
;   Document (RO) = #<VLA-OBJECT IAcadDocument 000000006d44da58>
;   DuctConnectionSize (RO) = 3
;   DuctProductCode (RO) = ""
;   DuctSeries (RO) = 0
;   DuctSystem (RO) = 10
;   EntityTransparency = "ПоСлою"
;   FlowLS (RO) = 213.889
;   Handle (RO) = "1366"
;   HasExtensionDictionary (RO) = 0
;   Hyperlink (RO) = ""
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 00000000475c5408>
;   IFCGuid (RO) = ""
;   InsulationSerieDescription (RO) = ""
;   InsulationSerieMaterial (RO) = ""
;   InsulationSerieNationalCode (RO) = ""
;   InsulationSeries (RO) = ""
;   InsulationSerieThicknessMM (RO) = 0
;   Layer = "DUCT-В1"
;   LengthRDMM (RO) = 759
;   Linetype = "CenterLine"
;   LinetypeScale = 1.0
;   Lineweight = -3
;   Material = "ByLayer"
;   NationalCodeHPV (RO) = ""
;   ObjectID (RO) = ""
;   ObjectID (RO) = 57803
;   ObjectID32 (RO) = 57803
;   ObjectName (RO) = "MAGIPathwaySegment"
;   ObjectStatus (RO) = -1
;   OwnerID (RO) = 48515
;   OwnerID32 (RO) = 48515
;   P1 (RO) = ""
;   P10 (RO) = ""
;   P11 (RO) = ""
;   P12 (RO) = ""
;   P13 (RO) = ""
;   P14 (RO) = ""
;   P15 (RO) = ""
;   P2 (RO) = ""
;   P3 (RO) = ""
;   P4 (RO) = ""
;   P5 (RO) = ""
;   P6 (RO) = ""
;   P7 (RO) = ""
;   P8 (RO) = ""
;   P9 (RO) = ""
;   PartType (RO) = "Воздуховод"
;   PlotStyleName = "Цвет_5"
;   PV (RO) = ""
;   RunningIndex (RO) = "-"
;   SerieDescription (RO) = "Circ"
;   SerieMaterial (RO) = "Zn"
;   SizeIsLocked (RO) = 0
;   SizeIsSwapped (RO) = 0
;   StaticPressurePA (RO) = 0.0
;   SystemUserCode (RO) = "В1"
;   TopOfPartFCSMM (RO) = 4125.0
;   TotalPressureDropPA (RO) = 0.0
;   TotalPressurePA (RO) = 0.0
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 00000000475c5400>
;   UserCode (RO) = "Circ"
;   UserVar1 (RO) = ""
;   UserVar2 (RO) = ""
;   UserVar3 (RO) = ""
;   UserVar4 (RO) = ""
;   VelocityMS (RO) = 4.36
;   Visible = -1
; Поддерживаемые методы:
;   ArrayPolar (3)
;   ArrayRectangular (6)
;   Copy ()
;   Delete ()
;   GetBoundingBox (2)
;   getDefaultNrDigits (2)
;   GetExtensionDictionary ()
;   getPartTypeID ()
;   getSupportedAppIDs ()
;   GetXData (3)
;   Highlight (1)
;   IntersectWith (2)
;   Mirror (2)
;   Mirror3D (3)
;   Move (2)
;   Rotate (2)
;   Rotate3D (3)
;   ScaleEntity (2)
;   SetXData (2)
;   TransformBy (1)
;   Update ()
zvyagaaa вне форума  
 
Непрочитано 27.04.2015, 19:00
#20
scad2015


 
Регистрация: 18.02.2015
Сообщений: 90


Александр Ривилис, или кто-нибудь понимающий в Лиспе и модели arx,

Как можно переделать это выражение на Lisp чтобы вывести все свойства всех типов в чертеже, особенно те которые не возможно выбрать в модели или на листе (но они есть в файле =))? (Ситуация точно такая же как описано выше, тоже объекты стороннего приложения)

Помогите, пожалуйста!
scad2015 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как программно получить свойства прокси объекта

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить свойства layout луки Программирование 2 23.06.2009 10:50
Как получить свойства 3dSolid Box в VB... 99garry Программирование 8 22.06.2009 20:58
ADT. Программно получить значение храктеристики. игорёк Программирование 10 25.08.2008 10:39
как получить из примитива его свойства paradoxvaha Программирование 5 24.07.2007 22:24
Можно ли получить список реакторов объекта? kos Программирование 1 13.01.2005 13:28