Какой вообще у VBA есть функционал для работы со связанными таблицами AutoCAD, и есть ли он вообще.Ты можешь определить, что в чертеже есть связанные таблицы через ThisDrawing.Dictionaries.Item("ACAD_DATALINK") - если такого словаря нет, то нет и связанных таблиц. Это необходимое условие, но недостаточное.
А почему условие недостаточное ? Ведь мне просто нужно знать, есть ли в чертеже связанные таблицы, если есть, то я его просто закрываю и перехожу к следующему чертежу. Или Вы имеете в виду, что словарь может существовать и без связанных таблиц ?Какой вообще у VBA есть функционал для работы со связанными таблицами AutoCAD, и есть ли он вообще.Ты можешь определить, что в чертеже есть связанные таблицы через ThisDrawing.Dictionaries.Item("ACAD_DATALINK") - если такого словаря нет, то нет и связанных таблиц. Это необходимое условие, но недостаточное.Если же этот словарь есть, ты можешь отобрать все таблицы в чертеже (пройтись по всем блокам ThisDrawing.Blocks и внутри их найти все Table), а затем пройтись по всем ячейкам каждой из таблиц и при помощи метода Table.GetCellState(nRow, nCol) определить состояние ячейки. Если установлен флаг acCellStateLinked, то есть связь.
Перепроверил этот метод - он не работает. Так что похоже только ObjectARX/AutoCAD .NET API
Или Вы имеете в виду, что словарь может существовать и без связанных таблиц ?Именно. Таблицы создали, потом удалили. А информация в словаре осталась...
Ага, теперь я понял, спасибо ВамИли Вы имеете в виду, что словарь может существовать и без связанных таблиц ?Именно. Таблицы создали, потом удалили. А информация в словаре осталась...
А количество записей в словаре я узнать не могу ?Или Вы имеете в виду, что словарь может существовать и без связанных таблиц ?Именно. Таблицы создали, потом удалили. А информация в словаре осталась...
А количество записей в словаре я узнать не могу ?Можешь. Свойство Count.
Получается, если я , допустим, буду проверять кол-во записей в словаре по условию : если в словаре 0 записей, то считаем, что связей нет, а если count>0 , то закрываю файл просто. В этом случае я могу что-то упустить ?А количество записей в словаре я узнать не могу ?Можешь. Свойство Count.
В этом случае я могу что-то упустить ?Упустить что? Если count > 0, то вполне возможно, что связей нет - таблицы, в которых были связи уже удалены. Но если count == 0, то однозначно связей нет.
А могу ли я как-то разорвать все существующие связи в чертеже ?Средствами VBA? Ну можешь попробовать удалить все записи словаря ACAD_DATALINK. Но боюсь, что после этого потребуется проверка (команда _AUDIT) чертежа. Или брось уже VBA. Ты же видишь, что в нём одни ограничения...
Не, не получается так, пробовал. А в контексте данной задачи, в чём разница ? Как бы я мог решить эту задачу средствами .NET API ? Т.е., как я понимаю, взаимодействие остаётся тем же самым, на уровне объектной модели, свойств объектов и их методов. У меня руки уже чешутся перейти на C# , но чтобы время не терять на переписывание кода, хочется уже допилить средствами VBA.А могу ли я как-то разорвать все существующие связи в чертеже ?Средствами VBA? Ну можешь попробовать удалить все записи словаря ACAD_DATALINK. Но боюсь, что после этого потребуется проверка (команда _AUDIT) чертежа. Или брось уже VBA. Ты же видишь, что в нём одни ограничения...
Не, не получается так, пробовал.Т.е.? Что происходит?
А ничего не происходит. Я в словаре прохожу по всем Item'ам и для каждого вызываю метод Delete.Не, не получается так, пробовал.Т.е.? Что происходит?