Author Topic: Change attribute prompts  (Read 517 times)

0 Members and 1 Guest are viewing this topic.

Offline fixo

  • Full Member
  • ***
  • Posts: 135
  • Karma: +4/-0
  • Gender: Male
    • prefered language: C
    • Prog expertise: Good
    • View Profile
Change attribute prompts
« on: March 13, 2012, 11:21:34 AM »
Code: [Select]
        [CommandMethod("CHPROMPTS")]
        static public void ChangePrompts()
        {

            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            Editor ed = doc.Editor;
            try
            {
                using (Transaction tr = db.TransactionManager.StartTransaction())
                {
                    BlockReference bref = tr.GetObject(ed.GetEntity("\nSelect block").ObjectId, OpenMode.ForRead) as BlockReference;

                    if (bref == null)
                    {
                        Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Nothing or wrong object selected");
                        return;
                    }
                    BlockTable bt = (BlockTable)(tr.GetObject(db.BlockTableId, OpenMode.ForRead));
                    BlockTableRecord btrec = null;
                    if (bref.IsDynamicBlock)
                    {
                        btrec = tr.GetObject(bref.DynamicBlockTableRecord, OpenMode.ForRead, false) as BlockTableRecord;
                    }
                    else
                    {
                        btrec = tr.GetObject(bref.BlockTableRecord, OpenMode.ForRead, false) as BlockTableRecord;
                    }

                    var adeftype = RXObject.GetClass(typeof(AttributeDefinition));

                    var tags =
                        (from ObjectId id in btrec
                         where id.ObjectClass.IsDerivedFrom(adeftype)
                         select (id.GetObject(OpenMode.ForRead, false) as AttributeDefinition).Tag).ToList<string>();

                    var prompts =
                        (from ObjectId id in btrec
                         where id.ObjectClass.IsDerivedFrom(adeftype)
                         select (id.GetObject(OpenMode.ForRead, false) as AttributeDefinition).Prompt).ToList<string>();

                    string info = "  ---   For info   ---\nUsed Tags / Prompts:\n----------------------\n";
                    for (int n = 0; n < tags.Count; n++)
                    {
                        info += tags[n] + "\t" + prompts[n] + "\n";
                    }

                    Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(info);

                    for (int n = 0; n < tags.Count; n++)
                    {
                        string newprompt = "";

                        string question =
                            ("\nEnter a new Prompt for tag [ " + tags[n] + " ] instead of [ " + prompts[n] + " ] (hit Enter to keep old value): ");
                        PromptStringOptions pso = new PromptStringOptions(question);
                        pso.AllowSpaces = true;

                        // to bypass empty input
                        try
                        {
                            newprompt = ed.GetString(pso).StringResult;
                        }
                        catch
                        {
                        }

                        if (newprompt != string.Empty)
                        {
                            AttributeDefinition attdef =
                                (from ObjectId id in btrec
                                 where ((id.ObjectClass.IsDerivedFrom(adeftype) &&
                                 (id.GetObject(OpenMode.ForRead, false) as AttributeDefinition).Tag == tags[n]))
                                 select id.GetObject(OpenMode.ForWrite, false)).First() as AttributeDefinition;
                            attdef.Prompt = newprompt;
                        }
                    }

                    tr.Commit();
                }

            }
            catch (System.Exception ex)
            {
                ed.WriteMessage("\n{0}\n{1}", ex.Message, ex.StackTrace);
            }
        }

~'J'~