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); } }
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()); }