Author Topic: Import multyline styles from source drawing  (Read 668 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
Import multyline styles from source drawing
« on: May 28, 2012, 01:21:00 PM »
Code: [Select]
       [CommandMethod("ImportMlineStyles", "imls", CommandFlags.Modal | CommandFlags.Session)]
        public void MilneStylesList()
        {
            string filename = "C:\\Test\\Mult.dwg";//<-- change a source drawing name here
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Database db = HostApplicationServices.WorkingDatabase;
            Editor ed = doc.Editor;

            // define list of string to store multileader style names
            List<string> mstyleList = new List<string>();

            //define boolean variable for future use
            bool result = true;

            // use LockDocument to avoid eLockViolatioException because we're use CommandFlags.Session
            using (DocumentLock docloc = doc.LockDocument())
            {
                // create new database
                using (Database exdb = new Database(false, true))
                {
                    exdb.ReadDwgFile(filename, FileOpenMode.OpenForReadAndAllShare, false, "");
                    //exdb.ReadDwgFile(filename, System.IO.FileShare.Read, True, "")
                    try
                    {
                        ObjectIdCollection ids = new ObjectIdCollection();
                        // Start a transaction
                        using (Transaction tr = db.TransactionManager.StartTransaction())
                        {
                            // Start a source transaction
                            using (Transaction extr = exdb.TransactionManager.StartTransaction())
                            {
                                // Open the MlineStyle dictionary for read
                                DBDictionary dictms = default(DBDictionary);

                                // Open the MlineStyle dictionary for read                             
                                dictms = (DBDictionary)extr.GetObject(exdb.MLStyleDictionaryId, OpenMode.ForRead);

                                // step through the
                                // get every DictionaryEntry in the dictionary

                                foreach (DictionaryEntry id in dictms)
                                {
                                    // Get every object using Objectid then cast DBobject as MlineStyle
                                    MlineStyle mlst = (MlineStyle)extr.GetObject((ObjectId)id.Value, OpenMode.ForRead);
                                    ids.Add((ObjectId)id.Value);
                                    mstyleList.Add(mlst.Name);
                                    // add multileader style name to the list
                                }
                                IdMapping imap = new IdMapping();
                                // Perform WblockCloneObjects method
                                db.WblockCloneObjects(ids, db.MLStyleDictionaryId, imap, DuplicateRecordCloning.Replace, false);
                                // Commit external transaction
                                extr.Commit();
                            }
                            //  Dispose of the external transaction
                            // Commit transaction
                            tr.Commit();
                        }
                        //  Dispose of the  transaction
                        // handling exception

                    }
                    catch (Autodesk.AutoCAD.Runtime.Exception ex)
                    {
                        // Display error message
                        ed.WriteMessage("\n" + ex.Message + "\n" + ex.StackTrace);
                        // set result to false
                        result = false;
                    }
                    finally
                    {
                        if (result)
                        {
                            ed.WriteMessage("\nProgram ended up with: {0}", result);
                            foreach (string ms in mstyleList)
                            {
                                ed.WriteMessage("\n" + ms);
                            }
                        }
                    }
                }
                //  Dispose external database
            }
            //  Dispose of the LockDocument
        }

~'J'~