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(); }
решило проблему! :)
Навигация
Перейти к полной версии