Удалить определение атрибута

Автор Тема: Удалить определение атрибута  (Прочитано 30350 раз)

0 Пользователей и 5 Гостей просматривают эту тему.

Оффлайн Константин СоковАвтор темы

  • ADN Club
  • **
  • Сообщений: 56
  • Карма: 0
Здравствуйте.
Пытаюсь удалить все определения атрибута из определения блока
Код - C# [Выбрать]
  1. BlockTableRecord blockFind = (BlockTableRecord)bt[name].GetObject(OpenMode.ForWrite);
  2. foreach (ObjectId ent in blockFind)
  3. {
  4.    if (ent.ObjectClass.Name == "AcDbAttributeDefinition")
  5.    {
  6.        AttributeDefinition attr = (AttributeDefinition)trans.GetObject(ent, OpenMode.ForWrite);
  7.        attr.Erase(true);
  8.     }
  9. }
После выполнения на чертеже атрибуты исчезают, но при выборе блока все равно вызывается _eattedit вместо _bedit. Один атрибут все же остается. Как удалить все атрибуты из блока?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Удалить определение атрибута
« Ответ #1 : 03-12-2014, 00:05:21 »
После выполнения на чертеже атрибуты исчезают, но при выборе блока все равно вызывается _eattedit вместо _bedit. Один атрибут все же остается. Как удалить все атрибуты из блока?
Нужно удалить атрибуты у конкретной вставки блока.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Константин СоковАвтор темы

  • ADN Club
  • **
  • Сообщений: 56
  • Карма: 0
Re: Удалить определение атрибута
« Ответ #2 : 03-12-2014, 00:35:04 »
Нет, вообще из определения блока

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 475
  • Карма: 63
Re: Удалить определение атрибута
« Ответ #3 : 03-12-2014, 07:10:51 »
АТРОБНОВИТЬ

Оффлайн Константин СоковАвтор темы

  • ADN Club
  • **
  • Сообщений: 56
  • Карма: 0
Re: Удалить определение атрибута
« Ответ #4 : 03-12-2014, 08:11:30 »
АТРОБНОВИТЬ
Не помогает. Не тот ли это баг

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Удалить определение атрибута
« Ответ #5 : 03-12-2014, 11:17:30 »
Нет, вообще из определения блока
С моей стороны был не вопрос, а утверждение. В своём коде ты показываешь, что удаляешь определения атрибутов из описания блока. Потом показываешь картинку, на которой вставка с одним атрибутом. Кстати у атрибута флажок удаленности (This entity is currently erased).
Возможно это и указанный тобой баг. Но это можно будет понять только после того как ты опишешь всю цепочку действий. Я увидел только то, что ты удаляешь у определения блока определения атрибутов. Откуда появилась вставка блока с удаленным атрибутом - загадка.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Константин СоковАвтор темы

  • ADN Club
  • **
  • Сообщений: 56
  • Карма: 0
Re: Удалить определение атрибута
« Ответ #6 : 03-12-2014, 11:49:42 »
Нахожу блок (по имени или выбираю вставку нужного блока в чертеже), перехожу в определение этого блока и удаляю все определения атрибутов. Картинка чтобы показать что после всех манипуляций в блоке все равно остается атрибут.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Удалить определение атрибута
« Ответ #7 : 03-12-2014, 12:30:11 »
Нахожу блок (по имени или выбираю вставку нужного блока в чертеже), перехожу в определение этого блока и удаляю все определения атрибутов. Картинка чтобы показать что после всех манипуляций в блоке все равно остается атрибут.
После этого ты делал вставку этого блока? И на картинке результат вставки?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Константин СоковАвтор темы

  • ADN Club
  • **
  • Сообщений: 56
  • Карма: 0
Re: Удалить определение атрибута
« Ответ #8 : 03-12-2014, 12:33:36 »
Нет, все вставки остаются без изменений.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Удалить определение атрибута
« Ответ #9 : 03-12-2014, 12:58:45 »
Нет, все вставки остаются без изменений.
Ты меня запутал окончательно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Константин СоковАвтор темы

  • ADN Club
  • **
  • Сообщений: 56
  • Карма: 0
Re: Удалить определение атрибута
« Ответ #10 : 03-12-2014, 13:03:58 »
На картинке, результат вставки блока после выполнения команды, но она (вставка блока) была создана до выполнения команды (удаление определения атрибутов)  ???

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Удалить определение атрибута
« Ответ #11 : 03-12-2014, 13:21:32 »
А теперь всё по порядку.
1) В чертеже было определение блока с атрибутами и одна (или несколько) вставок этого блока.
2) Ты запустил свой код, который удаляет из этого определения блока определения атрибутов. Где код? Я вижу только его обрывок.
3) В результате ты во вставке блока видишь атрибут, причем помеченный как удаленный?
Но ведь удаление определений атрибутов в определении блока не влияет на атрибуты во вставке блока! Точнее влияет только на постоянные (константные) атрибуты, которые одинаковы во всех вставках блока. 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Константин СоковАвтор темы

  • ADN Club
  • **
  • Сообщений: 56
  • Карма: 0
Re: Удалить определение атрибута
« Ответ #12 : 03-12-2014, 17:00:07 »
да вот собственно код, ничего особенного:
Код - C# [Выбрать]
  1. public static void DeleteAttribute(string nameBtr)
  2. {
  3.     Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  4.     Database db = doc.Database;
  5.     Editor ed = doc.Editor;
  6.  
  7.     using (Transaction trans = db.TransactionManager.StartTransaction())
  8.     {
  9.         try
  10.         {
  11.             BlockTable bt = (BlockTable)db.BlockTableId.GetObject(OpenMode.ForWrite);
  12.             if (bt.Has(nameBtr))
  13.             {
  14.                 BlockTableRecord blockFind = (BlockTableRecord)bt[nameBtr].GetObject(OpenMode.ForWrite);
  15.                 foreach (ObjectId ent in blockFind)
  16.                 {
  17.                     if (ent.ObjectClass.Name == "AcDbAttributeDefinition")
  18.                     {
  19.                         AttributeDefinition attr = (AttributeDefinition)trans.GetObject(ent, OpenMode.ForWrite);
  20.                         attr.Erase(true);
  21.                     }
  22.                 }
  23.                 BlockTableRecordExtensionMethods.AttSync(blockFind, true, true, true);
  24.             }
  25.             else
  26.                 ed.WriteMessage("\nНе найдено опеределение блока \"{0}\"", nameBtr);
  27.  
  28.             trans.Commit();
  29.         }
  30.         catch (Autodesk.AutoCAD.Runtime.Exception ex)
  31.         {
  32.             ed.WriteMessage("\n{0}", ex.Message);
  33.         }
  34.     }                          
  35. }

Где BlockTableRecordExtensionMethods.AttSync(blockFind, true, true, true) _attsync на .Net

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Удалить определение атрибута
« Ответ #13 : 03-12-2014, 17:08:52 »
да вот собственно код, ничего особенного:
Особенное как раз есть. Это:
BlockTableRecordExtensionMethods.AttSync(blockFind, true, true, true);
Как я понимаю, это код Андрея Бушмана: https://sites.google.com/site/bushmansnetlaboratory/moi-zametki/attsynch , который как раз и модифицирует атрибуты вставки блоков. Вот тут то и нужно разбираться в чем дело.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Удалить определение атрибута
« Ответ #14 : 03-12-2014, 17:22:15 »
И если это действительно тот, указанный выше, баг, то его обойти можно только одним способом - заменой значения группы DXF 66 на 0.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение