Сообщество программистов Autodesk в СНГ

ADN Club => VBA => Тема начата: DMuzer от 14-09-2019, 15:59:54

Название: Копирование атрибутов в блок
Отправлено: DMuzer от 14-09-2019, 15:59:54
Добрый день!
Передо мной стоит задача: есть два блока, в одном из них есть атрибуты. Мне нужно второй блок обеспечить такими же атрибутам как в первом.
Можно ли описания атрибутов скопировать в блок? В каком направлении лучше двигаться?
Название: Re: Копирование атрибутов в блок
Отправлено: Александр Ривилис от 14-09-2019, 20:41:17
Можно ли описания атрибутов скопировать в блок? В каком направлении лучше двигаться?
Можно. Двигаться в направлении Document.CopyObjects. Нужно отобрать определеня атрибутов в одном из блоков и скопировать во второй. Если второй блок уже имел вставки, то необходимо будет выполнить команду _ATTSYNC
Название: Re: Копирование атрибутов в блок
Отправлено: DMuzer от 15-09-2019, 11:04:24
Да, получилось, я вместо AttributeDefinition пытался скопировать AttributeReference, у меня это не получалось, можно ли как то имея ссылку на AttributeReference получить ссылку на AttributeDefinition?
Название: Re: Копирование атрибутов в блок
Отправлено: Александр Ривилис от 15-09-2019, 12:11:22
можно ли как то имея ссылку на AttributeReference получить ссылку на AttributeDefinition?
Прямой связи между ними нет. Если из вставки блока не удалялись и не добавлялись AttributeReference'ы, которым нет соответствующих AttributeDefinition, то они должны совпадать по порядку (с учетом пропуска константных атрибутов - для них во вставке блока нет атрибутов). Т.е. первый AttributeReference соответствует первому AttributeDefinition, второй - второму, и т.д.
Название: Re: Копирование атрибутов в блок
Отправлено: DMuzer от 16-09-2019, 10:42:16
А как правильно отправить команду на обновление атрибутов из программы?
Я использовал SendCommand и передачу имени блока в качестве аргумента. Это работает, но до тех пор, пока в блоке есть атрибуты.
Если получается так, что я удалил из блока все атрибуты, то выскакивает ошибка - Блок отсутствует в словаре атрибутов или типа того (Если атрибуты в блоке есть, то вроде все ок). Если я вручную команду передаю и вместо имени блока делаю выбор блока, тогда все обновляется и я вижу что в блоке атрибуты отсутствуют.
Как нужно сформировать строку команды, чтобы ее отправить в SendCommand?
Название: Re: Копирование атрибутов в блок
Отправлено: Александр Ривилис от 16-09-2019, 10:52:26
Если получается так, что я удалил из блока все атрибуты, то выскакивает ошибка - Блок отсутствует в словаре атрибутов или типа того (Если атрибуты в блоке есть, то вроде все ок). Если я вручную команду передаю и вместо имени блока делаю выбор блока, тогда все обновляется и я вижу что в блоке атрибуты отсутствуют.
Как нужно сформировать строку команды, чтобы ее отправить в SendCommand?
Не уверен, что это сработает. Поэтому проще найти все вставки этого блока и удалить из них все вставки атрибутов.
Название: Re: Копирование атрибутов в блок
Отправлено: DMuzer от 16-09-2019, 16:10:55
Понятно, спасибо большое!