Example #1
0
        /// <summary>Обработка выборки в документе _document</summary>
        /// <param name="_document"></param>
        internal static void HandleSelectedFDO(Document _document)
        {
            PromptSelectionResult sel_result;

            // для обработки случая, когда Editor.SelectImplied() вызывает сбой во время операции _PASTECLIP
            // AutoCAD меняет акт.документ на тот откуда берется копия.
            try
            {
                sel_result = _document.Editor.SelectImplied();
            }
            catch (System.Exception)
            {
                return;
            }


            if (sel_result.Status != PromptStatus.OK)
            {
                Core.ClearDataGridView();
                return;
            }

            MgSelectionBase selection_base = AcMapFeatureEntityService.GetSelection(sel_result.Value);

            if (selection_base.GetLayers() == null)
            {
                Core.ClearDataGridView();
            }
            else
            {
                Core.SelectionToDataGridView(selection_base);
            }
        }
Example #2
0
        public void FDOSelectCrossingPoint()
        {
            Core.ClearImpliedSelection();

            PromptPointOptions pnt_opts = new PromptPointOptions("Укажите точку для выбора объктов карты (FDO) (Esc или Enter чтобы отказаться):");

            pnt_opts.AllowNone = true;

            PromptPointResult point_result = Core.current_editor.GetPoint(pnt_opts);             // выбор точки

            if (point_result.Status == PromptStatus.OK)
            {
                PromptSelectionResult sel_result = Core.current_editor.SelectCrossingWindow(point_result.Value, point_result.Value);                 // выбор объектов
                if (sel_result.Status == PromptStatus.OK)
                {
                    // преобразование SelectionSet'а AutoCAD'а в выборку MgSelectionBase (только объекты FDO)
                    MgSelectionBase selection_base = AcMapFeatureEntityService.GetSelection(sel_result.Value);

                    // установка активной выборки
                    SelectionSet new_sel_set = AcMapFeatureEntityService.AddFeaturesToSelectionSet(null, selection_base);
                    Core.current_editor.SetImpliedSelection(new_sel_set);
                }
            }
            Core.WriteMessage("\n");
        }
Example #3
0
        public void FDOSelectSingle()
        {
            Core.ClearImpliedSelection();

            PromptSelectionOptions std_opts = new PromptSelectionOptions();

            std_opts.MessageForAdding  = "Выберите объекты карты (FDO) (Esc для выхода):";
            std_opts.MessageForRemoval = std_opts.MessageForAdding;

            std_opts.SingleOnly = true;
            //std_opts.SetKeywords("[вЫход]", "eXit");
            //std_opts.Keywords.Default = "eXit";

            PromptSelectionResult sel_result = Core.current_editor.GetSelection(std_opts);             // выбор объектов

            if (sel_result.Status == PromptStatus.OK)
            {
                // преобразование SelectionSet'а AutoCAD'а в выборку MgSelectionBase (только объекты FDO)
                MgSelectionBase selection_base = AcMapFeatureEntityService.GetSelection(sel_result.Value);

                // установка активной выборки
                SelectionSet new_sel_set = AcMapFeatureEntityService.AddFeaturesToSelectionSet(null, selection_base);
                Core.current_editor.SetImpliedSelection(new_sel_set);
            }
            Core.WriteMessage("\n");
        }
Example #4
0
        /// <summary>Очистка выборки</summary>
        internal static void ClearImpliedSelection()
        {
            MgSelectionBase sel_base    = new MgSelectionBase(AcMapMap.GetCurrentMap());
            SelectionSet    new_sel_set = AcMapFeatureEntityService.AddFeaturesToSelectionSet(null, sel_base);

            Core.current_editor.SetImpliedSelection(new_sel_set);
            AcMapMap.ForceScreenRefresh();
        }
Example #5
0
        /// <summary>
        /// Установка активной выборки без зумирования.
        /// </summary>
        /// <param name="sel_base"></param>
        internal static void SetImpliedSelectionBySelectionBase(MgSelectionBase sel_base)
        {
            Core.no_handle_selection = true;                                                                // чтобы изменение выборки не обрабатывалось

            internal_saved_selection = AcMapFeatureEntityService.AddFeaturesToSelectionSet(null, sel_base); // преобразование в SelectionSet

            Core.current_editor.SetImpliedSelection(internal_saved_selection);
            AcMapMap.ForceScreenRefresh();
        }
Example #6
0
        /// <summary>
        /// Установка зумирования и активной выборки (запуск через командную строку - отсюда название)
        /// </summary>
        /// <param name="sel_base">выборка, которую следует отобразить</param>
        internal static void ThroughAssZoomAndSelection(MgSelectionBase sel_base)
        {
            internal_saved_selection = AcMapFeatureEntityService.AddFeaturesToSelectionSet(null, sel_base);             // преобразование в SelectionSet и обратно,

            sel_base = AcMapFeatureEntityService.GetSelection(internal_saved_selection);                                // иначе дает сбой метод GetSelectedFeatures()

            MgEnvelope extents = new MgEnvelope();

            MgReadOnlyLayerCollection layers = sel_base.GetLayers();

            foreach (MgLayerBase layer in layers)
            {
                MgFeatureReader ftr_reader     = sel_base.GetSelectedFeatures(layer, layer.FeatureClassName, false);
                string          geom_prop_name = ftr_reader.GetClassDefinition().DefaultGeometryPropertyName;

                while (ftr_reader.ReadNext())
                {
                    MgByteReader      byte_reader       = ftr_reader.GetGeometry(geom_prop_name);
                    MgAgfReaderWriter agf_reader_writer = new MgAgfReaderWriter();
                    MgGeometry        curr_geom         = agf_reader_writer.Read(byte_reader);
                    extents.ExpandToInclude(curr_geom.Envelope());
                }
            }



            // зумирование и вызов функции выбора через командную строку

            Core.no_handle_selection = true;             // чтобы изменение выборки не обрабатывалось

            string zoom_str;

            if ((extents.Width == 0) && (extents.Width == extents.Height))
            {
                zoom_str = "'_zoom _c "
                           + extents.LowerLeftCoordinate.X.ToString() + "," + extents.LowerLeftCoordinate.Y.ToString() + " ";
            }
            else
            {
                zoom_str = "'_zoom _w "
                           + (extents.LowerLeftCoordinate.X - extents.Width / 2).ToString()
                           + ","
                           + (extents.LowerLeftCoordinate.Y - extents.Height / 2).ToString()
                           + " "
                           + (extents.UpperRightCoordinate.X + extents.Width / 2).ToString()
                           + ","
                           + (extents.UpperRightCoordinate.Y + extents.Height / 2).ToString();
            }


            Core.SendStringToExecute(zoom_str + "\n"
                                     + "ThroughAssZoomAndSelectionHelperFunction\n"
                                     , true, false, false);
        }