Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Некорректно отображаются изменения атрибутов блока

Некорректно отображаются изменения атрибутов блока

Ответ
Поиск в этой теме
Непрочитано 19.09.2018, 13:49 #1
Некорректно отображаются изменения атрибутов блока
Cren
 
Регистрация: 17.02.2016
Сообщений: 11

Пакетная обработка чертежей. Пользователь изменяет значение и/или коэффициент сжатия выбранных атрибутов блока через форму.
При просмотре блоков после обработки некорректно отображается коэффициент сжатия атрибута (текст растянутый), либо смещаются тексты атрибутов, выравнивание которых имеет значение "Центр".
Нужно обновить отображение


При последующем (ручном) выполнении команды "_ATTSYNC" для этого блока отображение становиться корректным, но этот вариант мне не подходит.

Заранее спасибо!

Код:
[Выделить все]
db.ReadDwgFile(FileNameOut, System.IO.FileShare.ReadWrite, true, null);
using (ACAD_DS.Transaction tr = db.TransactionManager.StartTransaction())
{
         ACAD_DS.BlockTable BT = tr.GetObject(db.BlockTableId, ACAD_DS.OpenMode.ForRead) as ACAD_DS.BlockTable;
         foreach (ACAD_DS.ObjectId ObjID in BT)
         {
                    ACAD_DS.BlockTableRecord BTR = tr.GetObject(ObjID, ACAD_DS.OpenMode.ForRead) as ACAD_DS.BlockTableRecord;
                    if (!(BTR.Name == "УСП_РАМКА_АЛЬБОМ" || BTR.Name == "УСП_РАМКА_КНИГА" ||
                           BTR.Name == "УСП_ОЗУР" || BTR.Name != "УФАНИПИ_КНИГА" || BTR.Name != "УФАНИПИ_АЛЬБОМ")) continue;
                    List<ACAD_DS.AttributeDefinition> AD_list = new List<ACAD_DS.AttributeDefinition>();
                    foreach (ACAD_DS.ObjectId objID in BTR)
                    {
                             ACAD_DS.DBObject obj = tr.GetObject(objID, ACAD_DS.OpenMode.ForRead) as ACAD_DS.DBObject;
                             if (!(obj is ACAD_DS.AttributeDefinition)) continue;
                             AD_list.Add(obj as ACAD_DS.AttributeDefinition);
                    }
                    foreach (sAttribut attr in Attributes)
                    {
                             ACAD_DS.AttributeDefinition ad = AD_list.Find(x => x.Tag == attr.Name);
                             if (ad == null) continue;
                             ad.UpgradeOpen();
                             ad.WidthFactor = attr.Compression;
                    }
                    ACAD_DS.ObjectIdCollection AnonymousID = BTR.GetAnonymousBlockIds();
                    foreach (ACAD_DS.ObjectId AnonymousBTRID in AnonymousID)
                    {
                             ACAD_DS.BlockTableRecord AnonymousBTR = tr.GetObject(AnonymousBTRID, ACAD_DS.OpenMode.ForRead) as ACAD_DS.BlockTableRecord;
                             ACAD_DS.ObjectIdCollection BRefID = AnonymousBTR.GetBlockReferenceIds(true, true);
                             foreach (ACAD_DS.ObjectId id in BRefID)
                             {
                                       ObjIDCol.Add(id);
                                       ACAD_DS.BlockReference BRef = tr.GetObject(id, ACAD_DS.OpenMode.ForRead) as ACAD_DS.BlockReference;
                                       ACAD_DS.AttributeCollection AttCol = BRef.AttributeCollection;
                                       List<ACAD_DS.AttributeReference> AR_list = new List<ACAD_DS.AttributeReference>();
                                       foreach (ACAD_DS.ObjectId Attr in AttCol)
                                                    AR_list.Add(tr.GetObject(Attr, ACAD_DS.OpenMode.ForRead) as ACAD_DS.AttributeReference);
                                       foreach (sAttribut attr in Attributes)
                                       {
                                                    ACAD_DS.AttributeReference ar = AR_list.Find(x => x.Tag == attr.Name);
                                                    if (ar == null) continue;
                                                    ar.UpgradeOpen();
                                                    ar.TextString = attr.Value;
                                       }
                             }
                             AnonymousBTR.UpdateAnonymousBlocks();                    
                      }
                      //BTR.UpdateAnonymousBlocks();                   // эту строка нормализует отображение коэффициента сжатия, но и приводит к смещению текста атрибутов, выравнивание которых имеет значение "Центр".
         }
         tr.Commit();
}
file.Count = ObjIDCol.Count;
db.SaveAs(FileNameOut, ACAD_DS.DwgVersion.Current);
Просмотров: 2403
 
Непрочитано 19.09.2018, 15:23
#2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Реализация AttSync на .Net: https://sites.google.com/site/bushma...metki/attsynch
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Некорректно отображаются изменения атрибутов блока

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP-функция для изменения значения атрибутов в блоке r7800m LISP 2 06.04.2016 13:16
Как настроить отображение атрибутов блока в панели "Свойства"? Taurustau AutoCAD 3 26.11.2014 16:45
При печати не отображаются изменения на чертеже Olya_Kursk AutoCAD 1 18.05.2012 20:09
Сбой подсказок атрибутов динамического блока gool Динамические блоки 5 26.10.2011 09:29
Баг: сбрасывается аннотативность атрибутов блока + атрибуты не отображаются во вхождениях блока hwd Баги и пожелания в Autodesk 0 15.11.2009 14:55