Тема: Изменение значения атрибута блока по умолчанию.

Уважаемые форумчане, подскажите, как можно изменить значение атрибута блока по умолчанию. Как изменить значение в текущем пространстве модели я знаю, но мне необходимо чтобы новое значение также распространялось на новые вхождения. Заранее благодарю)

Re: Изменение значения атрибута блока по умолчанию.

Типа этого?

        [CommandMethod("cda", CommandFlags.Redraw)]
        public static void ChangeBlockDefault()
        {
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;

            Editor ed = doc.Editor;

            Database db = HostApplicationServices.WorkingDatabase;
            string blkName = "PART";
            string mytag = "JOBNO";
            string myvalue = "New Attribute Value";
            using (DocumentLock dlock = doc.LockDocument())
            {
                using (Transaction trans = db.TransactionManager.StartTransaction())
                {
                    doc.TransactionManager.EnableGraphicsFlush(true);
                    try
                    {
                        BlockTable bt = (BlockTable)(trans.GetObject(db.BlockTableId, OpenMode.ForRead));
                        
                        if (!bt.Has(blkName)) return;
                        BlockTableRecord bdef = trans.GetObject(bt[blkName], OpenMode.ForRead) as BlockTableRecord;
                        if (bdef == null) return;
                        bt.UpgradeOpen();
                        bdef.UpgradeOpen();
                        foreach (ObjectId id in bdef)
                        {
                            if (id.ObjectClass.IsDerivedFrom(RXClass.GetClass(typeof(AttributeDefinition))))
                            {
                                AttributeDefinition atdef = trans.GetObject(id, OpenMode.ForWrite) as AttributeDefinition;
                                if (atdef.Tag == mytag)
                                {
                                    atdef.TextString = myvalue;
                                    trans.TransactionManager.QueueForGraphicsFlush();
                                    break;
                                }
                            }
                        }
                        bdef.DowngradeOpen();
                        bt.DowngradeOpen();
                        ObjectIdCollection brids = bdef.GetBlockReferenceIds(true, true);
                        foreach (ObjectId brid in brids)
                        {
                            DBObject obj = trans.GetObject(brid, OpenMode.ForWrite);
                            BlockReference bref = (BlockReference)obj;
                            AttributeCollection atcol = bref.AttributeCollection;
                            foreach (ObjectId attid in atcol)
                            {
                                AttributeReference atref = trans.GetObject(attid, OpenMode.ForRead) as AttributeReference;
                                if (atref.Tag == mytag)
                                {
                                    if (!atref.IsWriteEnabled) atref.UpgradeOpen();
                                    atref.TextString = myvalue;
                                }
                            }
                            bref.RecordGraphicsModified(true);
                            trans.TransactionManager.QueueForGraphicsFlush();
                        }


                    }
                    catch (Autodesk.AutoCAD.Runtime.Exception ex)
                    {
                        Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(ex.Message);
                    }
                    doc.TransactionManager.FlushGraphics();
                    trans.Commit();
                }
            }
        }

Re: Изменение значения атрибута блока по умолчанию.

Да точно, то что нужно, спасибо. Теперь мне предстоит все это по полочкам разобрать)

Re: Изменение значения атрибута блока по умолчанию.

Удачи :)