Тема: Получение свойств прокси объектов

Требуется разработать функцию получения свойств прокси объектов(объектов созданных в СПДС-графикс и AutoCAD Structural Detailing).
Требуется для получения спецификации металлоонструкций.
Дело в том что через dxf до объектов AutoCAD Structural Detailing не удалось добраться.
А хотелось бы сделать програмку на Лиспе или VBA для составления Технической специфиации металла.
В принципе нужна функция которая выводит список свойств указанного объета.
Несколько сумбурно по моему но буду рад любому ответу. :D

(изменено: Александр Ривилис, 15 июня 2009г. 20:26:29)

Re: Получение свойств прокси объектов

Прокси-объекты - это объекты заместители, которые присутствуют если нет соответствующего arx/dbx-приложения. Их свойства ничего общего со свойствами оригинальных объектов не имеют. Что же касается AutoCAD Structural Detailing - то возможно они поддерживают COM/.NET-интерфейсы (не в курсе). Так что смотри в эту сторону. ObjectARX тебе не поможет.

Re: Получение свойств прокси объектов

Угу не вполне корректно высказался, данные объекты не прокси, приложения под автокад установлены.
Но в окне свойств объекта и через DXF с помощью лиспа к сожалению не получается получить Все свойства объекта. Не ужели ObjectARX нету функции оторая бы считывала свойства объекта.
Просто думал есть функция типа (entget (car (entsel))) (как в лиспе) которая возвращает свойства объекта.

Re: Получение свойств прокси объектов

Дамир Зидбаев пишет:

Не ужели ObjectARX нету функции оторая бы считывала свойства объекта.

В общем случае нет.

Re: Получение свойств прокси объектов

Пытался рыть в этом направлении с помощью VBA... При подключении в References соответствующих библиотек - объектную модель ASD в Object browser можно увидеть, все классы объектов с методами/свойствами. Теоретически - значит можно работать с ней из под VBA, если знать как? Но на практике применить - видимо не хватает знаний. Элементарный пример: примитив ASD "Профиль" (в русской версии). В окне свойств Автокада по нему информации минимум: то, что имеется у всех примитивов (слой, вес линий и т.п.), немногим больше можно увидеть через (entget (car (entsel))), или применив в VBA

ThisDrawing.Utility.GetEntity obj, varPoint, "Выбери профиль..."
Stop

Можно определить, что объект в переменной obj принадлежит классу "IRbCSMdlProfile".
Но, если объявить "ASD-шную" переменную и "тупо" присвоить ей значение obj, то уже можно работать с ней, используя ее свойства, причем хотя в окне Locals этих свойств не видно, но в выпадающем списке после имени переменной с точкой (в редакторе кода VBA)они есть..(см. рисунок) Получение свойств прокси объектов

Dim RbCSM As RbCSMdlProfile
Set RbCSM = obj

Если бы у переменной класса RbCSMdlProfile были свойства, содержащие длину, массу, тип профиля (или какие-либо ссылки на них), то уже можно было бы их считывать программно. Но с нее удалось "выдоить" полезного - только координаты ключевых точек осевой линии .Coordinate да .GetBoundingBox (уже, конечно, что-то; используя эти свойства, написал утилитку, убивающую объекты-дубликаты ASD). Есть в объектной модели класс "RbCSDOProfile", там уже имеется свойство "Length", методы типа "GetUIMaterialName", но "...Dim RbCSM As RbCSDOProfile:Set RbCSM = obj..." выдает ошибку "несовпадение типов".
Вобщем, метод тыка мне в VBA, а Дамиру в Lisp пока больших успехов не принес. Может, посоветуете, куда двигаться?

Re: Получение свойств прокси объектов

Если программистами не предусмотрено получение свойств этих объектов, то никаким способом (в том числе и при помощи ObjectARX) ты их не получишь. Для того, чтобы эти свойства можно было получить они (программисты) должны были сделать или COM/.NET-обертки для объектов или предоставить h и lib-файлы. Второго нет точно, а по поводу первого не в курсе.

Re: Получение свойств прокси объектов

Да, но ведь получилось же объявить переменную ... As RbCSMdlProfile? И примитив в нее запихать, и свойства именно класса RbCSMdlProfile выцепить и использовать? И еще некоторые типы оказалось возможным объявить... Ощущение такое, что должна быть все-таки возможность через COM-интерфейс добраться... Ладно, Дамир вроде собирался с связаться с разработчиками на эту и другие темы...