Esempio n. 1
0
        private void CreateLayouts(IBordersCollectionBuilder bordersBuilder)
        {
            InitialUserInteraction initial = new InitialUserInteraction();

            initial.GetInitialData();
            if (initial.InitialDataStatus == PromptResultStatus.Cancelled)
            {
                return;
            }
            initial.FillPlotInfoManager();
            bordersBuilder.InitialBorderIndex = initial.Index;
            DrawingBorders[] borders = bordersBuilder.GetDrawingBorders();
            if (borders.Length == 0)
            {
                acad.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\nНе выбран ни один чертёж");
                return;
            }
            LayoutCreator layoutCreator = new LayoutCreator();

            foreach (DrawingBorders border in borders)
            {
                layoutCreator.CreateLayout(border);
            }

            Configuration.AppConfig cfg = Configuration.AppConfig.Instance;
            // Если в конфигурации отмечено "возвращаться в модель" - то переходим в модель
            if (cfg.TilemodeOn)
            {
                acad.SetSystemVariable("TILEMODE", 1);
            }

            // Если в конфигурации отмечено "удалять неинициализированные листы" - удаляем их
            if (cfg.DeleteNonInitializedLayouts)
            {
                layoutCreator.DeleteNoninitializedLayouts();
                acad.DocumentManager.MdiActiveDocument.Editor.Regen();
            }
        }
        /// <summary>
        /// Запрос пользователя для выбора файла шаблона
        /// </summary>
        /// <returns>True, если был выбран корректный файл шаблона, иначе false</returns>
        private bool SelectTemplate()
        {
            Configuration.AppConfig cfg  = Configuration.AppConfig.Instance;
            PromptOpenFileOptions   pofo = new PromptOpenFileOptions(CP.TemplateFileQuery);

            pofo.Filter          = CP.TemplateFileQueryFilter;
            pofo.InitialFileName = cfg.TemplatePath;

            PromptFileNameResult templateName = ed.GetFileNameForOpen(pofo);

            if (templateName.Status == PromptStatus.OK)
            {
                if (!System.IO.File.Exists(templateName.StringResult))
                {
                    throw new System.IO.FileNotFoundException(templateName.StringResult);
                }
                cfg.TemplatePath = templateName.StringResult;
                cfg.Save();
                return(true);
            }

            return(false);
        }
        /// <summary>
        /// Заполнение коллекции настроек печати
        /// </summary>
        public void FillPlotInfoManager()
        {
            Configuration.AppConfig        cfg     = Configuration.AppConfig.Instance;
            IEnumerable <PlotSettingsInfo> psinfos = null;

            if (this.useTemplate)
            {
                psinfos = PlotSettingsInfoBuilder.CreatePlotSettingsInfos(cfg.TemplatePath);
                ed.WriteMessage("\n" + CP.UsingTemplate + cfg.TemplatePath);
            }
            else
            {
                psinfos = PlotSettingsInfoBuilder.CreatePlotSettingsInfos();
            }

            PlotSettingsManager psm = PlotSettingsManager.Current;

            psm.Clear();

            foreach (PlotSettingsInfo psi in psinfos)
            {
                psm.Add(psi);
            }
        }
Esempio n. 4
0
        public DrawingBorders[] GetDrawingBorders()
        {
            List <DrawingBorders> borders = new List <DrawingBorders>();

            // Выставляем osmode в 1 - ENDpoint
            using (AcadSystemVariableSwitcher varSW = new AcadSystemVariableSwitcher("OSMODE", 1))
            {
                Configuration.AppConfig cfg = Configuration.AppConfig.Instance;
                // Крутимся, пока нужны новые масштабы (а один раз он точно нужен)
                bool needNewScale = true;

                BorderDrawer drawer = new BorderDrawer();

                while (needNewScale)
                {
                    // Получаем масштаб
                    double scale = GetScale(cfg.ReferenceDimension);
                    if (scale == 0)
                    {
                        return(borders.ToArray());
                    }

                    needNewScale = false;

                    // Крутимся, пока нужны новые рамки
                    bool needNewBorder = true;
                    while (needNewBorder)
                    {
                        BorderPromptResult borderRes = GetBorderPoints();
                        switch (borderRes.QueryStatus)
                        {
                        case PromptResultStatus.Cancelled:
                            // Пользователь нажал escape, запускаем процесс создания листов
                            needNewBorder = false;
                            break;

                        case PromptResultStatus.Keyword:
                            // Использованы параметры ком. строки

                            // Нужен новый масштаб
                            if (borderRes.StringResult.Equals(CO.NewScale, StringComparison.InvariantCulture))
                            {
                                needNewBorder = false;
                                needNewScale  = true;
                            }

                            // Запускаем процесс создания листов
                            if (borderRes.StringResult.Equals(CO.Process, StringComparison.InvariantCulture))
                            {
                                needNewBorder = false;
                            }

                            // Отменяем последний введённый чертёж
                            if (borderRes.StringResult.Equals(CO.Undo, StringComparison.InvariantCulture))
                            {
                                if (borders.Count > 0)
                                {
                                    borders.RemoveAt(borders.Count - 1);
                                    InitialBorderIndex--;

                                    drawer.ClearData();
                                    foreach (DrawingBorders b in borders)
                                    {
                                        b.Accept(drawer);
                                    }
                                }
                                else
                                {
                                    ed.WriteMessage("\nНечего возвращать");
                                }
                            }

                            // Выходим из команды
                            if (borderRes.StringResult.Equals(CO.Cancel, StringComparison.InvariantCulture))
                            {
                                ed.WriteMessage("\nОтмена!");
                                drawer.ClearData();
                                borders.Clear();
                                return(borders.ToArray());
                            }

                            break;

                        case PromptResultStatus.OK:
                            // Введены точки
                            string         bordername = string.Format("{0}{1}{2}", cfg.Prefix, InitialBorderIndex++, cfg.Suffix);
                            DrawingBorders border     =
                                DrawingBorders.CreateDrawingBorders(borderRes.FirstPoint,
                                                                    borderRes.SecondPoint,
                                                                    bordername,
                                                                    scale);
                            ed.WriteMessage("\nДобавляем лист {0}. Формат листа: {1}", bordername, border.PSInfo.Name);
                            borders.Add(border);
                            border.Accept(drawer);

                            break;

                        default:
                            throw new Exception("Invalid value for BorderQueryResultStatus");
                        }
                    }
                }
                drawer.ClearData();
                // Возвращаем osmode в исходное состояние
            }
            return(borders.ToArray());
        }