После выполнения на чертеже атрибуты исчезают, но при выборе блока все равно вызывается _eattedit вместо _bedit. Один атрибут все же остается. Как удалить все атрибуты из блока?Нужно удалить атрибуты у конкретной вставки блока.
АТРОБНОВИТЬНе помогает. Не тот ли это баг (http://adn-cis.org/forum/index.php?topic=625.msg2168#msg2168)
Нет, вообще из определения блокаС моей стороны был не вопрос, а утверждение. В своём коде ты показываешь, что удаляешь определения атрибутов из описания блока. Потом показываешь картинку, на которой вставка с одним атрибутом. Кстати у атрибута флажок удаленности (This entity is currently erased).
Нахожу блок (по имени или выбираю вставку нужного блока в чертеже), перехожу в определение этого блока и удаляю все определения атрибутов. Картинка чтобы показать что после всех манипуляций в блоке все равно остается атрибут.После этого ты делал вставку этого блока? И на картинке результат вставки?
Нет, все вставки остаются без изменений.Ты меня запутал окончательно.
да вот собственно код, ничего особенного:Особенное как раз есть. Это:
BlockTableRecordExtensionMethods.AttSync(blockFind, true, true, true);Как я понимаю, это код Андрея Бушмана: https://sites.google.com/site/bushmansnetlaboratory/moi-zametki/attsynch , который как раз и модифицирует атрибуты вставки блоков. Вот тут то и нужно разбираться в чем дело.
Но, кстати, без кода Андрея Бушмана, та же ситуация.Так она и с твоим кодом не связана. Атрибутов у вставки блока нет, а значение группы DXF 66 равно 1, чего быть не должно.
заменой значения группы DXF 66 на 0Это только на LISP или С++?
Это только на LISP или С++?Нет. Это еще и P/Invoke в .NET
Может небольшой примерчик завалялся, или ссылка?Это только на LISP или С++?Нет. Это еще и P/Invoke в .NET
Может небольшой примерчик завалялся, или ссылка?Примерчик не завалялся - нужно сделать. Можешь сам попробовать из этого скомбинировать: http://habrahabr.ru/post/154591/
Может что-то с приведенным выше кодом?С кодом всё нормально. Я проверил в AutoCAD 2014 - группу 66 таким образом установить не удается (в ObjectARX/Lisp аналогично).
Получается дело за тем чтобы корректно обновить атрибуты после удаления определения атрибутов из определения блока.Очень может быть. И мне кажется что проблема в том, что BlockReference br в момент когда мы удаляем атрибуты открыт на запись. Возможно нужно предварительно закрыть BlockReference, а возможно нужно поиграться и заменить транзакцию на эмуляцию транзакции.
даже если штатными средствами AutoCAD удалить определение атрибута, который стоит первым в списке атрибутов, и при этом если в блоке останется хотя бы одно определение атрибута, то у всех вставок этого блока атрибут, который был первым в списке будет помечен как "This entity is currently erasedЕсли это так, то это просто баг.
а при удалении вообще всех определений атрибутов из блока атрибуты удаляются полностью, никаких флагов не остается. Неужели никак нельзя программно удалить все атрибуты?А вот тут я уже не понял. Если есть баг, то его врядли можно так просто обойти.
даже если штатными средствами AutoCAD удалить определение атрибута, который стоит первым в списке атрибутов, и при этом если в блоке останется хотя бы одно определение атрибута, то у всех вставок этого блока атрибут, который был первым в списке будет помечен как "This entity is currently erased"Что-то ты меня снова запутал. Я проверил гипотезу с багом в "штатных средствах" и она у меня не подтвердилась:
Только вот не слишком ли долго все это будет выполняться, если в чертеже будет много блоков?Думаю что это не принципиальное увеличение времени, т.к. это не то, что должно выполнятся в реальном времени. Если вместо 10 секунд этот код будет работать 20 секунд, то ничего страшного в этом не вижу.
(и это единственное определение блока в чертеже)Точно, тоже наблюдал эту ситуацию!
Но, кстати, без кода Андрея Бушмана, та же ситуация. Я просто думал что этот атрибут сидит потому что нужно запустить атробновить, но как оказалость дело не в этомТак. А теперь начнем с начала. Без кода Андрея получить такой результат (как видишь из роликов) не получается.
еще один момент: удаляю определения атрибутов из определения блока, вставки блока вообще не трогаю. потом запускаю _attsync и при запросе выбираю опцию "Имя", а не выбрать - тогда сообщение о том что не найден блок с атрибутами. если выбрать опцию "Выбрать" то блок успешно обновляется.Ну это тоже всё растёт из того что в случае "Имя" проверяется определение блока по имени, а в нём определения атрибутов нет. А в случае указания сначала проверяется вставка блока и, при наличии в ней атрибутов, наличие определения атрибутов в определении блока не учитывается. Как-то так.