/// <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); } }
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"); }
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"); }
/// <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); }