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();
        }
Ejemplo n.º 2
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());
        }