Ejemplo n.º 1
0
        public static void SaveAsPDF(ResultBuffer rbArgs)
        {
            var editor = Acad.DocumentManager.MdiActiveDocument.Editor;

            editor.WriteMessage("Процесс экспорта чертежей в формат PDF начинается...");
            // Получение директории и параметров поиска
            if (rbArgs != null)
            {
                string str     = "";
                bool   subDirs = false;
                foreach (TypedValue rb in rbArgs)
                {
                    if (rb.TypeCode == (int)Autodesk.AutoCAD.Runtime.LispDataType.Text)
                    {
                        if (rb.Value.ToString() == "true")
                        {
                            subDirs = true;
                        }
                        else if (rb.Value.ToString() == "false")
                        {
                            subDirs = false;
                        }
                        else
                        {
                            str += rb.Value.ToString();
                        }
                    }
                }
                Acad.DocumentManager.MdiActiveDocument.Editor.WriteMessage("Путь к чертежам: " + str);
                // Получение списка файлов с учетом заданного пути и параметров поиска
                try
                {
                    str = str.Replace('/', '\\');
                    System.IO.DirectoryInfo rootDir = new System.IO.DirectoryInfo(str);
                    System.IO.FileInfo[]    dirs    = rootDir.GetFiles("*.dwg", subDirs ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
                    //Список листов найденных чертежей
                    foreach (FileInfo dir in dirs)
                    {
                        editor.WriteMessage(Environment.NewLine + dir);
                        using (Database dwgDB = new Database(false, true))
                        {
                            dwgDB.ReadDwgFile(dir.FullName, System.IO.FileShare.ReadWrite, false, "");
                            Acad.SetSystemVariable("BACKGROUNDPLOT", 1);
                            //Далее манипуляции с базой данных чертежа
                            using (Transaction acTrans = dwgDB.TransactionManager.StartTransaction())
                            {
                                List <Layout> layouts    = new List <Layout>();
                                DBDictionary  layoutDict = (DBDictionary)acTrans.GetObject(dwgDB.LayoutDictionaryId, OpenMode.ForRead);
                                editor.WriteMessage("Листы чертежа " + dir + ":");
                                foreach (DBDictionaryEntry id in layoutDict)
                                {
                                    if (id.Key != "Model")
                                    {
                                        Layout ltr = (Layout)acTrans.GetObject((ObjectId)id.Value, OpenMode.ForRead);
                                        layouts.Add(ltr);
                                        editor.WriteMessage(Environment.NewLine + ltr.LayoutName);
                                    }
                                }
                                layouts.Sort((l1, l2) => l1.TabOrder.CompareTo(l2.TabOrder));
                                string filename = Path.ChangeExtension(dwgDB.Filename, "pdf");

                                MultiSheetsPdf plotter = new MultiSheetsPdf(filename, layouts);
                                plotter.Publish();
                                editor.WriteMessage(Environment.NewLine + dwgDB.Filename + " успешно экспортирован");
                                acTrans.Commit();
                            }
                        }
                    }
                }
                catch (Autodesk.AutoCAD.Runtime.Exception e)
                {
                    editor.WriteMessage("\nError: {0}\n{1}", e.Message, e.StackTrace);
                }
            }
        }
Ejemplo n.º 2
0
        public static void SaveAsPDF(ResultBuffer rbArgs)//Основная функция плагина (Требуется корректировка и тестирование)
        {
            var editor = Acad.DocumentManager.MdiActiveDocument.Editor;

            editor.WriteMessage("Процесс экспорта чертежей в формат PDF начинается...");
            // Получение директории и параметров поиска
            if (rbArgs != null)
            {
                string str     = "";
                bool   subDirs = false;
                foreach (TypedValue rb in rbArgs)
                {
                    if (rb.TypeCode == (int)LispDataType.Text)
                    {
                        if (rb.Value.ToString() == "true")
                        {
                            subDirs = true;
                        }
                        else if (rb.Value.ToString() == "false")
                        {
                            subDirs = false;
                        }
                        else
                        {
                            str += rb.Value.ToString();
                        }
                    }
                }
                Acad.DocumentManager.MdiActiveDocument.Editor.WriteMessage("Путь к чертежам: " + str);
                // Получение списка файлов с учетом заданного пути и параметров поиска
                try
                {
                    str = str.Replace('/', '\\');
                    DirectoryInfo   rootDir = new DirectoryInfo(str);
                    List <FileInfo> files   = new List <FileInfo>();
                    short           bgp     = (short)Acad.GetSystemVariable("BACKGROUNDPLOT");
                    Acad.SetSystemVariable("BACKGROUNDPLOT", 0);
                    GetFiles(rootDir, files, subDirs);
                    //Список листов найденных чертежей
                    foreach (FileInfo file in files)
                    {
                        editor.WriteMessage(Environment.NewLine + file);
                        using (Database dwgDB = new Database(false, true))
                        {
                            dwgDB.ReadDwgFile(file.FullName, FileShare.ReadWrite, false, "");


                            //Далее манипуляции с базой данных чертежа
                            using (Transaction acTrans = dwgDB.TransactionManager.StartTransaction())
                            {
                                List <Layout> layouts    = new List <Layout>();
                                DBDictionary  layoutDict = (DBDictionary)acTrans.GetObject(dwgDB.LayoutDictionaryId, OpenMode.ForRead);
                                editor.WriteMessage("Листы чертежа " + file + ":");
                                foreach (DBDictionaryEntry id in layoutDict)
                                {
                                    if (id.Key != "Model")
                                    {
                                        Layout                ltr    = (Layout)acTrans.GetObject((ObjectId)id.Value, OpenMode.ForRead);
                                        PlotConfig            config = PlotConfigManager.SetCurrentConfig("AutoCAD PDF (High Quality Print).pc3");
                                        PlotSettingsValidator psv    = PlotSettingsValidator.Current;
                                        PlotSettings          ps     = new PlotSettings(ltr.ModelType);
                                        psv.SetPlotConfigurationName(ps, "AutoCAD PDF (High Quality Print).pc3", null);
                                        psv.RefreshLists(ps);
                                        layouts.Add(ltr);
                                        editor.WriteMessage(Environment.NewLine + ltr.LayoutName);
                                        editor.WriteMessage(Environment.NewLine + ltr.PlotPaperSize.ToString());
                                        editor.WriteMessage(Environment.NewLine + ltr.PlotSettingsName);
                                    }
                                }
                                layouts.Sort((l1, l2) => l1.TabOrder.CompareTo(l2.TabOrder));
                                string filename = Path.ChangeExtension(dwgDB.Filename, "pdf");

                                MultiSheetsPdf plotter = new MultiSheetsPdf(filename, layouts);
                                plotter.Publish();
                                editor.WriteMessage(Environment.NewLine + dwgDB.Filename + " успешно экспортирован");
                                acTrans.Commit();
                            }
                        }
                    }
                    Acad.SetSystemVariable("BACKGROUNDPLOT", bgp);
                }
                catch (Autodesk.AutoCAD.Runtime.Exception e)
                {
                    editor.WriteMessage("\nError: {0}\n{1}", e.Message, e.StackTrace);
                }
            }
            else
            {
            }
        }