В работе довольно часто приходится изучать дампы различных объектов из вертикальных приложений. В общем-то, для меня не так уж и сложно быстренько в редакторе накидать лисп для этого. Но тут встала необходимость доступа к списку свойств объектов для людей, которые в программировании на LISP не разбираются. В Civil 3D относительно недавно появился инструмент, позволяющие добавлять наборы характеристик к объектам. В этом инструменте есть возможность использовать COM. Пример такого использования - в этой статье:
https://autodesk.typepad.com/bimtoolbox/2016/02/autodesk-2016-aec-showreel-call-for-submissions.htmlКонечно же, они могут постоянно просить меня помочь, но лучше всё-таки дать какой-то инструмент, чтобы они могли самостоятельно это делать. В сети какого-то COM Reference для Civil 3D мне не удалось найти. Поэтому, у меня появилась идея написать небольшую утилиту, которая могла бы выдавать дамп свойств произвольного объекта. Максимально простую - с запросами и выводами через командную строку. В связи с этим, возникает вопрос: а нет ли где уже готового инструмента для этого? Или может быть, есть возможность раздобыть Civil 3D COM Reference?
Далее, если писать такую утилиту, то:
1. Надо как-то получать объект, который будем исследовать. Больше всего мне нравится идея использовать строковое значение Handle как входной параметр. Получить его можно с помощью команды _LIST, либо через ARXMGD/MGDDBG. Так что, с этим проблем не должно быть.
2. Самое пока непонятное для меня - как организовать получение свойств вложенных объектов? К примеру, у объекта TINSurface надо посмотреть список свойств, найти в нём Statistics, посмотреть список его свойств и найти там Area3D. Запускаем утилиту, в запрос вводим "<Handle>" для TINSurface, выводится дамп его свойств в комстроку, видим там Statistics. Как быть дальше? Есть идея такая: запускаем заново команду и в запрос вводим: "<Handle>.Statistics". Код внутри будет разбивать такую строку и через vlax-get-property запрашивать свойства, отделённые точкой.
Может есть более интересные идеи на этот счёт?