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