Author Topic: Convert meters to inches  (Read 599 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
Convert meters to inches
« on: June 25, 2012, 06:24:36 PM »
Code: [Select]
        [CommandMethod("metinch")]
        public static void ConvertMetersToInches()
        {

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

            var db = doc.Database;

            var ed = doc.Editor;

            var fact = UnitsConverter.GetConversionFactor(UnitsValue.Meters, UnitsValue.Inches);

            int decs = db.Dimdec;

            var sf = new SelectionFilter(new TypedValue[] { new TypedValue(0, "TEXT,MTEXT,INSERT") });

            var pso = new PromptSelectionOptions();

            pso.MessageForAdding = "Select texts / mtexts / blocks : ";

            pso.AllowDuplicates = false;

            var psr = ed.GetSelection(pso, sf);

            // make sure that the selection isn't empty
            if (psr.Status == PromptStatus.OK && psr.Value.Count > 0)
            {
                using (var tr = db.TransactionManager.StartTransaction())
                {
                    foreach (SelectedObject so in psr.Value)
                    {
                        var ent = (Entity)tr.GetObject(so.ObjectId, OpenMode.ForRead);

                        if (ent == null) return;

                        if (ent.GetRXClass().DxfName == "TEXT")
                        {
                            var dtxt = ent as DBText;

                            var strval = dtxt.TextString;

                            double dim;

                            if (double.TryParse(strval, out dim))
                            {
                                dim = dim * fact;

                                if (!dtxt.IsWriteEnabled) dtxt.UpgradeOpen();

                                dtxt.TextString = Math.Round(dim, decs).ToString();
                            }
                        }
                        else if (ent.GetRXClass().DxfName == "MTEXT")
                        {
                            var mtxt = ent as MText;

                            var strval = mtxt.Contents;

                            double dim;

                            if (double.TryParse(strval, out dim))
                            {
                                dim = dim * fact;

                                if (!mtxt.IsWriteEnabled) mtxt.UpgradeOpen();

                                mtxt.Contents = Math.Round(dim, decs).ToString();
                            }
                        }
                        else if (ent.GetRXClass().DxfName == "INSERT")
                        {
                            var bref = ent as BlockReference;

                            if (!bref.IsWriteEnabled) bref.UpgradeOpen();

                            // process attributes here
                            var atts = bref.AttributeCollection;

                            // iterate through the list of attributes
                            foreach (ObjectId aid in atts)
                            {
                                var atref = tr.GetObject(aid, OpenMode.ForRead) as AttributeReference;

                                var strval = atref.TextString;

                                double dim;

                                if (double.TryParse(strval, out dim))
                                {
                                    dim = dim * fact;

                                    if (!atref.IsWriteEnabled) atref.UpgradeOpen();

                                    atref.TextString = Math.Round(dim, decs).ToString();
                                }
                            }
                        }
                    }
                    tr.Commit();
                }
            }
        }

~'J'~