예제 #1
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");
        }
예제 #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");
        }
예제 #3
0
        void CheckSelectionState()
        {
            MgSelectionBase           selection = _viewer.GetSelection();
            MgReadOnlyLayerCollection layers    = selection.GetLayers();

            btnListSelected.Enabled = (layers != null);
        }
예제 #4
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);
            }
        }
예제 #5
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();
        }
예제 #6
0
        private void btnSelectDistrict1_Click(object sender, EventArgs e)
        {
            MgMapBase         map       = _viewer.GetMap();
            MgLayerCollection layers    = map.GetLayers();
            MgLayerBase       districts = layers.GetItem("Districts");
            MgLayerBase       parcels   = layers.GetItem("Parcels");

            //Query the geometry of district 1
            MgFeatureQueryOptions districtQuery = new MgFeatureQueryOptions();

            districtQuery.SetFilter("Autogenerated_SDF_ID = 1");

            MgFeatureReader   reader       = districts.SelectFeatures(districtQuery);
            MgGeometry        districtGeom = null;
            MgAgfReaderWriter agfRw        = new MgAgfReaderWriter();

            try
            {
                reader.ReadNext();
                MgByteReader geomAgf = reader.GetGeometry(districts.GetFeatureGeometryName());
                districtGeom = agfRw.Read(geomAgf);
            }
            finally
            {
                reader.Close();
            }

            //Now use this geometry as the basis of our 2nd query

            MgFeatureQueryOptions parcelQuery = new MgFeatureQueryOptions();

            parcelQuery.SetFilter("RNAME LIKE 'SCHMITT%'");
            parcelQuery.SetSpatialFilter(parcels.GetFeatureGeometryName(), districtGeom, MgFeatureSpatialOperations.Inside);

            //Select the features
            reader = parcels.SelectFeatures(parcelQuery);

            MgSelectionBase selection = _viewer.GetSelection();

            try
            {
                selection.FromXml(""); //Clear existing selection data
                selection.AddFeatures(parcels, reader, 0);
            }
            finally
            {
                reader.Close();
            }

            //Because we manipulated the active selection outside the viewer
            //We need to call UpdateSelection() to instruct the viewer to
            //re-render the active selection. The "true" parameter instructs
            //the viewer to raise the SelectionChanged event as well, so that
            //subscribers like the Property Pane get updated as well.
            _viewer.UpdateSelection(true);
            _viewer.RefreshMap();
        }
예제 #7
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();
        }
예제 #8
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);
        }
예제 #9
0
        private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            MgMapViewerProvider provider  = _viewer.GetProvider();
            MgSelectionBase     selection = _viewer.GetSelection();
            MgMapBase           map       = _viewer.GetMap();
            MgPoint             pt        = map.ViewCenter;
            MgCoordinate        coord     = pt.Coordinate;
            float leftMargin = e.MarginBounds.Left;
            float topMargin  = e.MarginBounds.Top;
            float yPos       = topMargin;
            float pageHeight = e.MarginBounds.Height;

            //Write title
            var titleFont = new Font(FontFamily.GenericSansSerif, 18.0f, GraphicsUnit.Point);
            var sizeTitle = e.Graphics.MeasureString(txtTitle.Text, titleFont);

            e.Graphics.DrawString(txtTitle.Text, titleFont, Brushes.Black, new PointF(leftMargin, yPos));

            yPos += (sizeTitle.Height * 1.1f);

            var scaleFont = SystemFonts.CaptionFont;
            var scaleStr  = string.Format("{0} 1 : {1}", Strings.TextScale, _viewer.GetMap().ViewScale); //NOXLATE
            var sizeScale = e.Graphics.MeasureString(scaleStr, scaleFont);

            //Scale to fit within this page
            var imgHeight = (int)(pageHeight - (sizeTitle.Height * 1.1f) - (sizeScale.Height * 1.1f));
            var imgWidth  = e.MarginBounds.Width;

            using (var state = provider.CreateTransientState())
            {
                var tempState = new MgMapDisplayParameters(coord.X, coord.Y, map.ViewScale, imgWidth, imgHeight, (int)numDPI.Value);
                state.PushState(tempState);
                MgByteReader br = provider.RenderMap(selection, "PNG"); //NOXLATE
                using (MgReadOnlyStream stream = new MgReadOnlyStream(br))
                {
                    Image img = Image.FromStream(stream);
                    e.Graphics.DrawImage(img, leftMargin, yPos, imgWidth, imgHeight);
                    img.Dispose();
                }
            }

            yPos += imgHeight;

            //Render scale
            if (chkScale.Checked)
            {
                e.Graphics.DrawString(scaleStr, scaleFont, Brushes.Black, new PointF(leftMargin, yPos));
            }

            e.HasMorePages = false;
        }
예제 #10
0
        private void CheckSelectionState()
        {
            MgSelectionBase           selection = _viewer.GetSelection();
            MgReadOnlyLayerCollection layers    = selection.GetLayers();

            if (layers != null)
            {
                btnClearSelection.Enabled = true;
            }
            else
            {
                btnClearSelection.Enabled = false;
            }
        }
예제 #11
0
        private void btnListSelected_Click(object sender, EventArgs e)
        {
            // There's two ways to process a selection
            //
            // 1. Iterate through the layers of a MgSelectionSet and process
            // the feature reader for each layer
            //
            // 2. Use an MgSelectionSet helper class
            //
            // This example shows the 2nd way, which is the simpler one
            MgSelectionBase     selection = _viewer.GetSelection();
            MgMapViewerProvider provider  = _viewer.GetProvider();
            MgSelectionSet      sset      = new MgSelectionSet(selection);

            new SelectedFeaturesWindow(sset).ShowDialog();
        }
예제 #12
0
파일: MainForm.cs 프로젝트: achilex/MgDev
        private void mgMapViewer1_SelectionChanged(object sender, EventArgs e)
        {
            MgSelectionBase           selection = mgMapViewer1.GetSelection();
            MgReadOnlyLayerCollection layers    = selection.GetLayers();

            if (layers != null)
            {
                for (int i = 0; i < layers.GetCount(); i++)
                {
                    MgLayerBase layer = layers.GetItem(i);
                    if (layer.Name == "Parcels") //The selected layer is parcels
                    {
                        //Check that we only have one selected object
                        int count = selection.GetSelectedFeaturesCount(layer, layer.FeatureClassName);
                        if (count == 1)
                        {
                            MgFeatureReader reader = null;
                            try
                            {
                                reader = selection.GetSelectedFeatures(layer, layer.FeatureClassName, false);
                                if (reader.ReadNext())
                                {
                                    //Address is in the RPROPAD property
                                    if (reader.IsNull("RPROPAD"))
                                    {
                                        MessageBox.Show("Selected parcel has no address");
                                    }
                                    else
                                    {
                                        MessageBox.Show("Address: " + reader.GetString("RPROPAD"));
                                    }
                                }
                            }
                            finally //Must close all readers, otherwise connections will leak
                            {
                                reader.Close();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Please select only one parcel");
                        }
                        break;
                    }
                }
            }
        }
예제 #13
0
        internal MgSelectionSet(MgSelectionBase selection, MgMapViewerProvider provider)
        {
            _agfRw    = new MgAgfReaderWriter();
            _features = new Dictionary <string, List <MgFeature> >();
            var selLayers = selection.GetLayers();

            if (selLayers != null)
            {
                for (int i = 0; i < selLayers.GetCount(); i++)
                {
                    var layer    = selLayers.GetItem(i);
                    var clsName  = layer.GetFeatureClassName();
                    int selCount = selection.GetSelectedFeaturesCount(layer, clsName);
                    if (selCount == 0)
                    {
                        System.Diagnostics.Trace.TraceWarning("No items in selection set for this layer (" + layer.GetName() + "). Layer shouldn't be here then");
                        continue;
                    }

                    NameValueCollection mappings = (provider != null) ? provider.GetPropertyMappings(layer) : null;
                    _features[layer.Name] = new List <MgFeature>();

                    var reader = selection.GetSelectedFeatures(layer, layer.GetFeatureClassName(), false);
                    while (reader.ReadNext())
                    {
                        var feature = CreateFeatureFromReader(reader);
                        if (mappings != null)
                        {
                            PerformDisplayNameSubstitution(feature, mappings);
                        }
                        _features[layer.Name].Add(feature);
                    }
                    reader.Close();
                }
            }
        }
예제 #14
0
파일: MgMapViewer.cs 프로젝트: kanbang/Colt
 private static int GetSelectionTotal(MgSelectionBase sel)
 {
     int total = 0;
     var layers = sel.GetLayers();
     if (layers != null)
     {
         for (int i = 0; i < layers.GetCount(); i++)
         {
             var layer = layers.GetItem(i);
             total += sel.GetSelectedFeaturesCount(layer, layer.FeatureClassName);
         }
     }
     return total;
 }
예제 #15
0
 public abstract void ClearSelection(MgSelectionBase sel);
예제 #16
0
 protected MgSelectionQueryResult MakeSelectionResult(MgSelectionBase sel) { return new MgSelectionQueryResult(sel); }
예제 #17
0
 internal MgSelectionQueryResult(MgSelectionBase newSelection) { this.Selection = newSelection; }
예제 #18
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MgSelectionSet"/> class.
 /// </summary>
 /// <param name="selection">The selection.</param>
 public MgSelectionSet(MgSelectionBase selection)
     : this(selection, null)
 {
 }
예제 #19
0
 public override MgByteReader RenderMap(MgSelectionBase selection, string format)
 {
     return(_renderSvc.RenderMap(_implMap, (MgdSelection)selection, format));
 }
예제 #20
0
 protected MgSelectionQueryResult MakeSelectionResult(MgSelectionBase sel)
 {
     return(new MgSelectionQueryResult(sel));
 }
예제 #21
0
 internal MgSelectionQueryResult(MgSelectionBase newSelection)
 {
     this.Selection = newSelection;
 }
예제 #22
0
 public abstract MgByteReader RenderDynamicOverlay(MgSelectionBase selection, MgViewerRenderingOptions args);
예제 #23
0
 public abstract void ClearSelection(MgSelectionBase sel);
예제 #24
0
        private void btnCreateBuffer_Click(object sender, EventArgs e)
        {
            MgSelectionBase           selection = _viewer.GetSelection();
            MgReadOnlyLayerCollection layers    = selection.GetLayers();

            if (layers == null)
            {
                MessageBox.Show("Select a parcel");
                return;
            }
            MgLayerBase parcels = null;

            for (int i = 0; i < layers.GetCount(); i++)
            {
                MgLayerBase layer = layers.GetItem(i);
                if (layer.Name == "Parcels")
                {
                    parcels = layer;
                    break;
                }
            }
            if (parcels == null)
            {
                MessageBox.Show("Select a parcel");
                return;
            }

            int bufferRingSize  = 100; // measured in metres
            int bufferRingCount = 5;

            // Set up some objects for coordinate conversion
            MgMapBase           map             = _viewer.GetMap();
            MgLayerCollection   mapLayers       = map.GetLayers();
            MgMapViewerProvider provider        = _viewer.GetProvider();
            MgResourceService   resourceService = (MgResourceService)provider.CreateService(MgServiceType.ResourceService);
            //Casting to MgdFeatureService because we want to use convenience APIs
            MgFeatureService featureService = (MgdFeatureService)provider.CreateService(MgServiceType.FeatureService);

            String                    mapWktSrs               = map.GetMapSRS();
            MgAgfReaderWriter         agfReaderWriter         = new MgAgfReaderWriter();
            MgWktReaderWriter         wktReaderWriter         = new MgWktReaderWriter();
            MgCoordinateSystemFactory coordinateSystemFactory = new MgCoordinateSystemFactory();
            MgCoordinateSystem        srs        = coordinateSystemFactory.Create(mapWktSrs);
            MgMeasure                 srsMeasure = srs.GetMeasure();
            string                    sessionId  = Guid.NewGuid().ToString();

            BufferHelper helper = new BufferHelper();

            // Check for a buffer layer. If it exists, delete
            // the current features.
            // If it does not exist, create a feature source and
            // a layer to hold the buffer.

            MgdLayer bufferLayer = null;
            int      layerIndex  = mapLayers.IndexOf("Buffer");

            if (layerIndex < 0)
            {
                // The layer does not exist and must be created.

                MgResourceIdentifier bufferFeatureResId = new MgResourceIdentifier("Session:" + sessionId + "//Buffer.FeatureSource");
                helper.CreateBufferFeatureSource(featureService, mapWktSrs, bufferFeatureResId);
                bufferLayer = helper.CreateBufferLayer(resourceService, bufferFeatureResId, sessionId);
                mapLayers.Insert(0, bufferLayer);
            }
            else
            {
                bufferLayer = (MgdLayer)map.GetLayers().GetItem(layerIndex);
                bufferLayer.DeleteFeatures("ID like '%'");
            }

            // Get the selected features from the MgSelection object
            MgFeatureReader featureReader = selection.GetSelectedFeatures(parcels, parcels.GetFeatureClassName(), false);

            // Process each item in the MgFeatureReader. Get the
            // geometries from all the selected features and
            // merge them into a single geometry.

            MgGeometryCollection inputGeometries = new MgGeometryCollection();

            while (featureReader.ReadNext())
            {
                MgByteReader featureGeometryData = featureReader.GetGeometry(parcels.GetFeatureGeometryName());
                MgGeometry   featureGeometry     = agfReaderWriter.Read(featureGeometryData);

                inputGeometries.Add(featureGeometry);
            }

            MgGeometryFactory geometryFactory  = new MgGeometryFactory();
            MgGeometry        mergedGeometries = geometryFactory.CreateMultiGeometry(inputGeometries);

            // Add buffer features to the temporary feature source.
            // Create multiple concentric buffers to show area.
            // If the stylization for the layer draws the features
            // partially transparent, the concentric rings will be
            // progressively darker towards the center.
            // The stylization is set in the layer template file, which
            // is used in function CreateBufferLayer().

            for (int bufferRing = 0; bufferRing < bufferRingCount; bufferRing++)
            {
                double     bufferDist     = srs.ConvertMetersToCoordinateSystemUnits(bufferRingSize * (bufferRing + 1));
                MgGeometry bufferGeometry = mergedGeometries.Buffer(bufferDist, srsMeasure);

                MgPropertyCollection properties = new MgPropertyCollection();
                properties.Add(new MgGeometryProperty("BufferGeometry", agfReaderWriter.Write(bufferGeometry)));

                MgFeatureReader fr = bufferLayer.InsertFeatures(properties);
                fr.Close();
            }

            bufferLayer.SetVisible(true);
            bufferLayer.ForceRefresh();
            bufferLayer.SetDisplayInLegend(true);

            MessageBox.Show("Buffer created");
            _viewer.RefreshMap();
            IMapLegend legend = Shell.Instance.Legend;

            if (legend != null)
            {
                legend.RefreshLegend();
            }
        }
예제 #25
0
        internal MgSelectionSet(MgSelectionBase selection, MgMapViewerProvider provider)
        {
            _agfRw = new MgAgfReaderWriter();
            _features = new Dictionary<string, List<MgFeature>>();
            var selLayers = selection.GetLayers();
            if (selLayers != null)
            {
                for (int i = 0; i < selLayers.GetCount(); i++)
                {
                    var layer = selLayers.GetItem(i);
                    var clsName = layer.GetFeatureClassName();
                    int selCount = selection.GetSelectedFeaturesCount(layer, clsName);
                    if (selCount == 0)
                    {
                        System.Diagnostics.Trace.TraceWarning("No items in selection set for this layer (" + layer.GetName() + "). Layer shouldn't be here then");
                        continue;
                    }

                    NameValueCollection mappings = (provider != null) ? provider.GetPropertyMappings(layer) : null;
                    _features[layer.Name] = new List<MgFeature>();
                    
                    var reader = selection.GetSelectedFeatures(layer, layer.GetFeatureClassName(), false);
                    while (reader.ReadNext())
                    {
                        var feature = CreateFeatureFromReader(reader);
                        if (mappings != null)
                            PerformDisplayNameSubstitution(feature, mappings);
                        _features[layer.Name].Add(feature);
                    }
                    reader.Close();
                }
            }
        }
예제 #26
0
        }        //method

        internal static void SelectionToDataGridView(MgSelectionBase _selection_base)
        {
            palette_window.links_control.is_suspended = true;         // информируем о заморозке
            palette_window.links_control.SuspendLayout();             // замораживаем логику
            palette_window.links_control.data_grid.Enabled = false;
            palette_window.links_control.data_grid.SuspendLayout();   // замораживаем логику DataGridView
            palette_window.links_control.layers_list.Enabled = false;

            palette_window.links_control.progressbar_in_status.Visible = true;             // включение ProgressBar
            palette_window.links_control.status_strip.Refresh();



            MgReadOnlyLayerCollection layers = _selection_base.GetLayers();

            int curr_features_count = 0, features_count = 0;

            // подсчет количества выбранных объектов
            foreach (MgLayerBase layer in layers)
            {
                features_count += _selection_base.GetSelectedFeaturesCount(layer, layer.FeatureClassName);
            }

            if (features_count == 0)
            {
                return;
            }

            // заполнение списка слоев
            palette_window.links_control.layers_list.Items.Clear();             // очищаем список

            if (layers.Count > 1)
            {
                palette_window.links_control.layers_list.Items.Add("(Все выбранные)");
            }

            foreach (MgLayerBase layer in layers)
            {
                palette_window.links_control.layers_list.Items.Add(layer.Name);
            }
            palette_window.links_control.layers_list.SelectedIndex = 0;

            // заполнение DataGridView
            palette_window.links_control.data_grid.Rows.Clear();              // очищаем строки

            foreach (MgLayerBase layer in layers)
            {
                int curr_ftr_class_idx = config.IndexOf(layer.FeatureClassName);
                if (curr_ftr_class_idx == -1)
                {
                    curr_features_count += _selection_base.GetSelectedFeaturesCount(layer, layer.FeatureClassName);;
                    palette_window.links_control.UpdateStatusRowCounterLabelAndProgressBar(curr_features_count, features_count);
                    continue;
                }
                FeatureClassLinkInfo curr_link_info = config.link_info_array[curr_ftr_class_idx];

                MgFeatureReader ftr_rdr = _selection_base.GetSelectedFeatures(layer, layer.FeatureClassName, false);

                MgPropertyDefinitionCollection identity_prop_defs = ftr_rdr.GetClassDefinition().GetIdentityProperties();                 // получаем набор идентификационных полей

                while (ftr_rdr.ReadNext())
                {
                    curr_features_count++;

                    DataGridViewRow link_row = new DataGridViewRow();   // новая строка

                    DataGridViewLinkCell link_cell;                     // ячейка

                    // формирование URL
                    link_cell = new DataGridViewLinkCell();

                    string title_str = ResolveLinkStringByValueFromReader(ftr_rdr, curr_link_info.LinkTitle);
                    link_cell.Value       = String.IsNullOrEmpty(title_str)? "<Null>": title_str;
                    link_cell.ToolTipText =
                        curr_link_info.LinkCommandPath
                        + command_splitter
                        + ResolveLinkStringByValueFromReader(ftr_rdr, curr_link_info.LinkURL);
                    link_row.Cells.Add(link_cell);                     // вставка ячейки

                    // формирование ID
                    MgPropertyCollection curr_identity_props = GetPropertiesFromReader(ftr_rdr, identity_prop_defs);

                    SelectedFeatureInfo sel_info = new SelectedFeatureInfo(layer, curr_identity_props);
                    link_cell       = new DataGridViewLinkCell();
                    link_cell.Value = sel_info;
                    link_row.Cells.Add(link_cell);                     // вставка ячейки

                    // добавлени строки в DataGridView
                    palette_window.links_control.data_grid.Rows.Add(link_row);

                    // обновление ProgressBar'а и счетчика строк
                    palette_window.links_control.UpdateStatusRowCounterLabelAndProgressBar(curr_features_count, features_count);
                }                                                                               /// while (ftr_rdr.ReadNext())
            }                                                                                   /// foreach (MgLayerBase layer in layers)

            palette_window.links_control.URL.SortMode = DataGridViewColumnSortMode.NotSortable; // сброс сортировки
            palette_window.links_control.URL.SortMode = DataGridViewColumnSortMode.Automatic;   // на исходную автоматическую

            palette_window.links_control.data_grid.SelectAll();                                 // выбираем все строки

            palette_window.links_control.progressbar_in_status.Visible = false;

            palette_window.links_control.layers_list.Enabled = true;
            palette_window.links_control.data_grid.Enabled   = true;
            palette_window.links_control.data_grid.ResumeLayout();   // размораживаем логику DataGridView
            palette_window.links_control.ResumeLayout();             // размораживаем логику
            palette_window.links_control.is_suspended = false;

            palette_window.links_control.UpdateStatusRowCounterLabel();             // обновляем строку статуса
        }
예제 #27
0
파일: MgMapViewer.cs 프로젝트: kanbang/Colt
        private void OnMapSetOnProvider(object sender, EventArgs e)
        {
            _hasTiledLayers = null;
            _map = _provider.GetMap();
            _mapCs = _provider.GetMapCoordinateSystem();
            _mapMeasure = _mapCs.GetMeasure();
            var bgColor = _map.GetBackgroundColor();
            if (bgColor.Length == 8 || bgColor.Length == 6)
            {
                _mapBgColor = ColorTranslator.FromHtml("#" + bgColor); //NOXLATE
                this.BackColor = _mapBgColor;
            }
            _provider.SetDisplaySize(this.Width, this.Height);
            _selection = _provider.CreateSelectionForMap();

            var env = _map.GetMapExtent();
            var ll = env.LowerLeftCoordinate;
            var ur = env.UpperRightCoordinate;

            _extX1 = _orgX1 = ll.X;
            _extY2 = _orgY2 = ll.Y;
            _extX2 = _orgX2 = ur.X;
            _extY1 = _orgY1 = ur.Y;

            if ((_orgX1 - _orgX2) == 0 || (_orgY1 - _orgY2) == 0)
            {
                _extX1 = _orgX1 = -.1;
                _extY2 = _orgX2 = .1;
                _extX2 = _orgY1 = -.1;
                _extY1 = _orgY2 = .1;
            }

            if (this.ConvertTiledGroupsToNonTiled)
            {
                var groups = _map.GetLayerGroups();
                for (int i = 0; i < groups.GetCount(); i++)
                {
                    var group = groups.GetItem(i);
                    _provider.MakeGroupNormal(group);
                }
            }

#if VIEWER_DEBUG
            CreateDebugFeatureSource();
#endif
            this.Focus();

            //Reset history stack
            _viewHistory.Clear();
            OnPropertyChanged("ViewHistory"); //NOXLATE
            _viewHistoryIndex = -1;
            OnPropertyChanged("ViewHistoryIndex"); //NOXLATE
            
            var handler = this.MapLoaded;
            if (handler != null)
                handler(this, EventArgs.Empty);

            InitialMapView();
        }
예제 #28
0
 public override MgByteReader RenderMap(MgSelectionBase selection, string format)
 {
     return _renderSvc.RenderMap(_implMap, (MgdSelection)selection, format);
 }
예제 #29
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MgSelectionSet"/> class.
 /// </summary>
 /// <param name="selection">The selection.</param>
 public MgSelectionSet(MgSelectionBase selection)
     : this(selection, null)
 {
     
 }
예제 #30
0
파일: MgMapViewer.cs 프로젝트: kanbang/Colt
        /// <summary>
        /// Releases the unmanaged resources used by the <see cref="T:System.Windows.Forms.Control"/> and its child controls and optionally releases the managed resources.
        /// </summary>
        /// <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                base.MouseUp -= OnMapMouseUp;
                base.MouseMove -= OnMapMouseMove;
                base.MouseDown -= OnMapMouseDown;
                base.MouseClick -= OnMapMouseClick;
                base.MouseDoubleClick -= OnMapMouseDoubleClick;
                base.MouseHover -= OnMapMouseHover;
                base.MouseEnter -= OnMouseEnter;
                base.MouseLeave -= OnMapMouseLeave;

                if (renderWorker != null)
                {
                    renderWorker.DoWork -= renderWorker_DoWork;
                    renderWorker.RunWorkerCompleted -= renderWorker_RunWorkerCompleted;
                }

                if (_csFact != null)
                {
                    _csFact.Dispose();
                    _csFact = null;
                }

                if (_resSvc != null)
                {
                    _resSvc.Dispose();
                    _resSvc = null;
                }

                if (_selection != null)
                {
                    _selection.Dispose();
                    _selection = null;
                }

                if (_mapCs != null)
                {
                    _mapCs.Dispose();
                    _mapCs = null;
                }

                if (_agfRW != null)
                {
                    _agfRW.Dispose();
                    _agfRW = null;
                }

                if (_wktRW != null)
                {
                    _wktRW.Dispose();
                    _wktRW = null;
                }

                if (_geomFact != null)
                {
                    _geomFact.Dispose();
                    _geomFact = null;
                }

                if (_mapMeasure != null)
                {
                    _mapMeasure.Dispose();
                    _mapMeasure = null;
                }
            }
            base.Dispose(disposing);
        }
예제 #31
0
        private void btnFindFeaturesInBuffer_Click(object sender, EventArgs e)
        {
            MgSelectionBase           selection      = _viewer.GetSelection();
            MgReadOnlyLayerCollection selectedLayers = selection.GetLayers();

            if (selectedLayers == null)
            {
                MessageBox.Show("Select a parcel");
                return;
            }
            MgLayerBase parcels = null;

            for (int i = 0; i < selectedLayers.GetCount(); i++)
            {
                MgLayerBase layer = selectedLayers.GetItem(i);
                if (layer.Name == "Parcels")
                {
                    parcels = layer;
                    break;
                }
            }
            if (parcels == null)
            {
                MessageBox.Show("Select a parcel");
                return;
            }

            int bufferRingSize = 500; // measured in metres

            // Set up some objects for coordinate conversion

            MgMapBase           map             = _viewer.GetMap();
            MgLayerCollection   mapLayers       = map.GetLayers();
            MgMapViewerProvider provider        = _viewer.GetProvider();
            MgResourceService   resourceService = (MgResourceService)provider.CreateService(MgServiceType.ResourceService);
            //Casting to MgdFeatureService because we want to use convenience APIs
            MgFeatureService featureService = (MgdFeatureService)provider.CreateService(MgServiceType.FeatureService);
            string           sessionId      = Guid.NewGuid().ToString();

            String                    mapWktSrs               = map.GetMapSRS();
            MgAgfReaderWriter         agfReaderWriter         = new MgAgfReaderWriter();
            MgWktReaderWriter         wktReaderWriter         = new MgWktReaderWriter();
            MgCoordinateSystemFactory coordinateSystemFactory = new MgCoordinateSystemFactory();
            MgCoordinateSystem        srs        = coordinateSystemFactory.Create(mapWktSrs);
            MgMeasure                 srsMeasure = srs.GetMeasure();

            // Check for a buffer layer. If it exists, delete
            // the current features.
            // If it does not exist, create a feature source and
            // a layer to hold the buffer.

            BufferHelper helper      = new BufferHelper();
            MgdLayer     bufferLayer = null;
            int          layerIndex  = map.GetLayers().IndexOf("Buffer");

            if (layerIndex < 0)
            {
                // The layer does not exist and must be created.

                MgResourceIdentifier bufferFeatureResId = new MgResourceIdentifier("Session:" + sessionId + "//Buffer.FeatureSource");
                helper.CreateBufferFeatureSource(featureService, mapWktSrs, bufferFeatureResId);
                bufferLayer = helper.CreateBufferLayer(resourceService, bufferFeatureResId, sessionId);
                map.GetLayers().Insert(0, bufferLayer);
            }
            else
            {
                bufferLayer = (MgdLayer)map.GetLayers().GetItem(layerIndex);
                bufferLayer.DeleteFeatures("ID like '%'");
            }

            // Check for a parcel marker layer. If it exists, delete
            // the current features.
            // If it does not exist, create a feature source and
            // a layer to hold the parcel markers.

            MgdLayer parcelMarkerLayer = null;

            layerIndex = map.GetLayers().IndexOf("ParcelMarker");
            if (layerIndex < 0)
            {
                MgResourceIdentifier parcelFeatureResId = new MgResourceIdentifier("Session:" + sessionId + "//ParcelMarker.FeatureSource");
                helper.CreateParcelMarkerFeatureSource(featureService, mapWktSrs, parcelFeatureResId);
                parcelMarkerLayer = helper.CreateParcelMarkerLayer(resourceService, parcelFeatureResId, sessionId);
                map.GetLayers().Insert(0, parcelMarkerLayer);
            }
            else
            {
                parcelMarkerLayer = (MgdLayer)map.GetLayers().GetItem(layerIndex);
                parcelMarkerLayer.DeleteFeatures("ID like '%'");
            }

            // Check each layer in the selection.

            for (int i = 0; i < selectedLayers.GetCount(); i++)
            {
                // Only check selected features in the Parcels layer.

                MgdLayer layer = (MgdLayer)selectedLayers.GetItem(i);

                if (layer.GetName() == "Parcels")
                {
                    string geomName = layer.GetFeatureGeometryName();
                    System.Diagnostics.Trace.TraceInformation("Marking all parcels inside the buffer that are of type 'MFG'");

                    MgFeatureReader featureReader = selection.GetSelectedFeatures(layer, layer.GetFeatureClassName(), false);


                    // Process each item in the MgFeatureReader. Get the
                    // geometries from all the selected features and
                    // merge them into a single geometry.

                    MgGeometryCollection inputGeometries = new MgGeometryCollection();
                    while (featureReader.ReadNext())
                    {
                        MgByteReader featureGeometryData = featureReader.GetGeometry(geomName);
                        MgGeometry   featureGeometry     = agfReaderWriter.Read(featureGeometryData);

                        inputGeometries.Add(featureGeometry);
                    }

                    MgGeometryFactory geometryFactory  = new MgGeometryFactory();
                    MgGeometry        mergedGeometries = geometryFactory.CreateMultiGeometry(inputGeometries);

                    // Create a buffer from the merged geometries

                    double     bufferDist     = srs.ConvertMetersToCoordinateSystemUnits(bufferRingSize);
                    MgGeometry bufferGeometry = mergedGeometries.Buffer(bufferDist, srsMeasure);

                    // Create a filter to select parcels within the buffer. Combine
                    // a basic filter and a spatial filter to select all parcels
                    // within the buffer that are of type "MFG".

                    MgFeatureQueryOptions queryOptions = new MgFeatureQueryOptions();
                    queryOptions.SetFilter("RTYPE = 'MFG'");
                    queryOptions.SetSpatialFilter(geomName, bufferGeometry, MgFeatureSpatialOperations.Inside);

                    featureReader = layer.SelectFeatures(queryOptions);

                    // Get the features from the feature source,
                    // determine the centroid of each selected feature, and
                    // add a point to the ParcelMarker layer to mark the
                    // centroid.
                    // Collect all the points into an MgFeatureCommandCollection,
                    // so they can all be added in one operation.

                    MgFeatureCommandCollection parcelMarkerCommands = new MgFeatureCommandCollection();
                    int inserted = 0;
                    while (featureReader.ReadNext())
                    {
                        MgByteReader byteReader = featureReader.GetGeometry(geomName);
                        MgGeometry   geometry   = agfReaderWriter.Read(byteReader);
                        MgPoint      point      = geometry.GetCentroid();

                        // Create an insert command for this parcel.
                        MgPropertyCollection properties = new MgPropertyCollection();
                        properties.Add(new MgGeometryProperty("ParcelLocation", agfReaderWriter.Write(point)));
                        //parcelMarkerCommands.Add(new MgInsertFeatures("ParcelMarkerClass", properties));
                        MgFeatureReader fr = parcelMarkerLayer.InsertFeatures(properties);
                        fr.Close();
                        inserted++;
                    }
                    featureReader.Close();

                    if (inserted == 0)
                    {
                        MessageBox.Show("No parcels within the buffer area match.");
                        return;
                    }

                    // Create a feature in the buffer feature source to show the area covered by the buffer.

                    MgPropertyCollection props = new MgPropertyCollection();
                    props.Add(new MgGeometryProperty("BufferGeometry", agfReaderWriter.Write(bufferGeometry)));
                    bufferLayer.InsertFeatures(props);

                    // Ensure that the buffer layer is visible and in the legend.

                    bufferLayer.SetVisible(true);
                    bufferLayer.ForceRefresh();
                    bufferLayer.SetDisplayInLegend(true);
                    parcelMarkerLayer.SetVisible(true);
                    parcelMarkerLayer.ForceRefresh();

                    MessageBox.Show("Done");
                    _viewer.RefreshMap();
                    IMapLegend legend = Shell.Instance.Legend;
                    if (legend != null)
                    {
                        legend.RefreshLegend();
                    }
                }
            }
        }
예제 #32
0
 public abstract MgByteReader RenderMap(MgSelectionBase selection, string format);
예제 #33
0
 public abstract MgByteReader RenderDynamicOverlay(MgSelectionBase selection, MgViewerRenderingOptions args);
예제 #34
0
 public abstract MgByteReader RenderMap(MgSelectionBase selection, string format);