ADN Club > AutoCAD .NET API

Скрытие фона под AttributeReference

(1/1)

Николай Коломоец:
Доброго времени суток!

Возникла следующая проблема: решил упростить себе жизнь и одной командой скрыть фон под всеми выбранными объектами, которые в моем случае - блоки с атрибутами (многострочными).

Ниже код программы.


--- Код - C# [Выбрать] ---        // скрытие фона под выбранными пользователем вхождениями многострочных атрибутов во вставках блоков        [CommandMethod("attbackgrhide",CommandFlags.UsePickSet)]        public void HideAttributeBackground()        {            Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;             PromptSelectionOptions prSelOpt = new PromptSelectionOptions();            prSelOpt.MessageForAdding = "\nВыберите объекты для скрытия фона: ";            PromptSelectionResult prSelRes = ed.GetSelection(prSelOpt);            if (prSelRes.Status == PromptStatus.OK)            {                using (Transaction trans = db.TransactionManager.StartTransaction())                {                    foreach (SelectedObject selObj in prSelRes.Value)                    {                        DBObject obj = trans.GetObject(selObj.ObjectId, OpenMode.ForRead);                         if (obj is BlockReference)                        {                            BlockReference br = (BlockReference)obj;                            foreach (ObjectId attrRefObjId in br.AttributeCollection)                            {                                AttributeReference attrRef = (AttributeReference)trans.GetObject(attrRefObjId, OpenMode.ForRead);                                if (attrRef.IsMTextAttribute)                                {                                    attrRef.UpgradeOpen();                                    attrRef.MTextAttribute.BackgroundFill = true;                                    attrRef.MTextAttribute.BackgroundScaleFactor = 1.1;                                    attrRef.MTextAttribute.UseBackgroundColor = true;                                }                            }                        }                         if (obj is MText)                        {                            MText mtxt = (MText)obj;                            mtxt.UpgradeOpen();                            mtxt.BackgroundFill = true;                            mtxt.BackgroundScaleFactor = 1.1;                            mtxt.UseBackgroundColor = true;                        }                     }                     trans.Commit();                }            }        } 
Проблема в том, что программа выполняется, находит нужный атрибут, вроде меняет ему фон, но это ничего не дает. Что я забыл?

ElpanovEvgeniy:
может "_attsync" или программный аналог?

Алексей Кулик:
Я, к сожалению, не спец по .NET, поэтому могу только предполагать: для модифицируемого примитива не надо выполнять его принудительное обновление?
На крайний случай - сделать полную регенерацию хотя бы активного видового экрана.

Александр Ривилис:
attrRef.MTextAttribute возвращает временную копию. Модифицируй ее и присвой attrRef.MTextAttribute

Николай Коломоец:
Спасибо всем, разобрался. Все оказалось просто в итоге - надо добавить обновление значения атрибута, именно для мультитекста:

--- Код - C# [Выбрать] ---                                AttributeReference attrRef = (AttributeReference)trans.GetObject(attrRefObjId, OpenMode.ForRead);                                if (attrRef.IsMTextAttribute)                                {                                    attrRef.UpgradeOpen();                                    attrRef.MTextAttribute.BackgroundFill = true;                                    attrRef.MTextAttribute.BackgroundScaleFactor = 1.1;                                    attrRef.MTextAttribute.UseBackgroundColor = true;                                    attrRef.UpdateMTextAttribute();                                                              } 
решило проблему!  :)

Навигация

[0] Главная страница сообщений

Перейти к полной версии