예제 #1
0
        ///// <summary>
        ///// Initializes a new, empty features layer
        ///// which handles <see cref="FeatureDataTable.SelectRequested"/>
        ///// events from <see cref="Features"/>.
        ///// </summary>
        //protected FeatureLayer(IFeatureProvider dataSource)
        //    : this(String.Empty, dataSource) { }

        ///// <summary>
        ///// Initializes a new features layer with the given name and datasource
        ///// and which handles <see cref="FeatureDataTable.SelectRequested"/>
        ///// events from <see cref="Features"/>.
        ///// </summary>
        ///// <param name="layername">Name of the layer.</param>
        ///// <param name="dataSource">Data source.</param>
        //protected FeatureLayer(String layername, IFeatureProvider dataSource)
        //    : this(layername, new FeatureStyle(), dataSource) { }

        /// <summary>
        /// Initializes a new features layer with the given name, style and datasource
        /// and which handles <see cref="FeatureDataTable.SelectRequested"/>
        /// events from <see cref="Features"/>.
        /// </summary>
        /// <param name="layername">Name of the layer.</param>
        /// <param name="style">Style to apply to the layer.</param>
        /// <param name="dataSource">Data source.</param>
        protected FeatureLayer(String layername,
                               FeatureStyle style,
                               IFeatureProvider dataSource)
            : base(layername, style, dataSource)
        {
            //ShouldHandleFeaturesNotFoundEvent = handleFeatureDataRequest;

            // We need to get the schema of the feature table.
            DataSource.Open();
            _features = DataSource.CreateNewTable()
                        ?? new FeatureDataTable(dataSource.GeometryFactory);
            GeometryFactory = dataSource.GeometryFactory;
            DataSource.Close();

            // We generally want spatial indexing on the feature table...
            _features.IsSpatiallyIndexed = true;

            // handle the request on the feature data table for features
            _features.SelectRequested += handleFeaturesSelectRequested;

            // setup selected and highlighted views
            _selectedFeatures = new FeatureDataView(_features,
                                                    (FeatureQueryExpression)null,
                                                    "",
                                                    DataViewRowState.CurrentRows);
            _selectedFeatures.IsViewDefinitionExclusive = true;

            _highlightedFeatures = new FeatureDataView(_features,
                                                       (FeatureQueryExpression)null,
                                                       "",
                                                       DataViewRowState.CurrentRows);
            _highlightedFeatures.IsViewDefinitionExclusive = true;
        }
예제 #2
0
        private void SetItemInternal(object item, double previewScale, int themeCategory)
        {
            m_prt  = item as IPointRule;
            m_lrt  = item as ILineRule;
            m_art  = item as IAreaRule;
            m_comp = item as ICompositeRule;

            try
            {
                m_isUpdating = true;
                if (m_prt != null)
                {
                    RuleCondition.Text = m_prt.Filter;
                    LegendLabel.Text   = m_prt.LegendLabel;
                    Image w2d = null;
                    if (m_prt.PointSymbolization2D != null)
                    {
                        //Determine if this is a w2d symbol style
                        if (m_prt.PointSymbolization2D.Symbol.Type == PointSymbolType.W2D)
                        {
                            var sym = (IW2DSymbol)m_prt.PointSymbolization2D.Symbol;
                            w2d = SymbolPicker.GetSymbol(_conn, sym.W2DSymbol.ResourceId, sym.W2DSymbol.LibraryItemName);
                        }
                    }
                    FeatureStyle.SetItem(m_prt, m_prt.PointSymbolization2D, w2d, previewScale, themeCategory);
                    LabelStyle.SetItem(m_prt, m_prt.Label, previewScale, themeCategory);
                    LabelStyle.Visible = true;
                }
                else if (m_lrt != null)
                {
                    RuleCondition.Text = m_lrt.Filter;
                    LegendLabel.Text   = m_lrt.LegendLabel;
                    FeatureStyle.SetItem(m_lrt, m_lrt.Strokes, previewScale, themeCategory);
                    LabelStyle.SetItem(m_lrt, m_lrt.Label, previewScale, themeCategory);
                    LabelStyle.Visible = true;
                }
                else if (m_art != null)
                {
                    RuleCondition.Text = m_art.Filter;
                    LegendLabel.Text   = m_art.LegendLabel;
                    FeatureStyle.SetItem(m_art, m_art.AreaSymbolization2D, previewScale, themeCategory);
                    LabelStyle.SetItem(m_art, m_art.Label, previewScale, themeCategory);
                    LabelStyle.Visible = true;
                }
                else if (m_comp != null)
                {
                    RuleCondition.Text = m_comp.Filter;
                    LegendLabel.Text   = m_comp.LegendLabel;
                    FeatureStyle.SetItem(m_comp, m_comp.CompositeSymbolization, previewScale, themeCategory);
                    LabelStyle.Visible = false;
                }
            }
            finally
            {
                m_isUpdating = false;
            }
        }
예제 #3
0
 void layer_BeforePointRender(object sender, FeatureRenderEventArgs e)
 {
     if (_useExtesion)
     {
         FeatureStyle fs = GetStyle(e.Feature);
         e.Feature.PointStyle = fs.PointStyle;
         e.Feature.TitleStyle = fs.TitleStyle;
     }
 }
예제 #4
0
    public StyleEditor(FeatureStyle style)
        : base()
    {
        this.filterStyleEditors = new List <FilterStyleEditor>();
        this.style = style;

        foreach (var filterStyle in style.FilterStyles)
        {
            filterStyleEditors.Add(new FilterStyleEditor(filterStyle));
        }
    }
예제 #5
0
    void OnEnable()
    {
        featureStyle = (FeatureStyle)target;
        styleEditor  = featureStyle.Editor as StyleEditor;

        if (styleEditor == null)
        {
            styleEditor         = new StyleEditor(featureStyle);
            featureStyle.Editor = styleEditor;
        }
    }
예제 #6
0
 private void processRules(XmlNode rules)
 {
     foreach (XmlNode node in rules.ChildNodes)
     {
         if (node.Name == "rule")
         {
             string       value = node.Attributes["value"].Value;
             FeatureStyle fs    = new FeatureStyle();
             processPointStyle(node, fs.PointStyle);
             processPolygonStyle(node, fs.PolygonStyle);
             processPolylineStyle(node, fs.PolylineStyle);
             processTitleStyle(node, fs.TitleStyle);
             _rules.Add(value, fs);
         }
     }
 }
예제 #7
0
        protected override void NotifyLayersChanged(ListChangedType listChangedType, int oldIndex, int newIndex, PropertyDescriptor propertyDescriptor)
        {
            switch (listChangedType)
            {
            case ListChangedType.ItemChanged:
                if (propertyDescriptor.Name == Layer.EnabledProperty.Name)
                {
                    ILayer layer = Map.Layers[newIndex];
                    IEnumerable <ILayer> layers = layer as IEnumerable <ILayer>;

                    if (layers != null)
                    {
                        foreach (ILayer child in layers)
                        {
                            if (child.Enabled)
                            {
                                View.EnableLayer(child.LayerName);
                            }
                            else
                            {
                                View.DisableLayer(child.LayerName);
                            }
                        }
                    }
                    else if (layer.Enabled)
                    {
                        View.EnableLayer(layer.LayerName);
                    }
                    else
                    {
                        View.DisableLayer(layer.LayerName);
                    }
                }
                else if (propertyDescriptor.Name == LayerGroup.ShowChildrenProperty.Name)
                {
                    ILayer layer = Map.Layers[newIndex];

                    if ((Boolean)layer.GetPropertyValue(LayerGroup.ShowChildrenProperty))
                    {
                        View.EnableChildLayers(layer.LayerName);
                    }
                    else
                    {
                        View.DisableChildLayers(layer.LayerName);
                    }
                }
                else if (propertyDescriptor.Name == FeatureLayer.AreFeaturesSelectableProperty.Name)
                {
                    ILayer       layer = Map.Layers[newIndex];
                    FeatureStyle style = layer.Style as FeatureStyle;

                    if (style != null && style.AreFeaturesSelectable)
                    {
                        View.SetFeaturesSelectable(layer.LayerName, true);
                    }
                    else
                    {
                        View.SetFeaturesSelectable(layer.LayerName, false);
                    }
                }
                break;

            // The following are taken care of by data binding:
            //case ListChangedType.ItemMoved:
            //case ListChangedType.ItemAdded:
            //case ListChangedType.ItemDeleted:
            default:
                break;
            }

            base.NotifyLayersChanged(listChangedType, oldIndex, newIndex, propertyDescriptor);
        }
예제 #8
0
 internal void SetThemeOffset(int offset)
 {
     FeatureStyle.SetThemeOffset(offset);
 }
 private  void processRules(XmlNode rules)
 {
     foreach (XmlNode node in rules.ChildNodes)
     {
         if (node.Name=="rule")
         {
             string value = node.Attributes["value"].Value;
             FeatureStyle fs = new FeatureStyle();
             processPointStyle(node,fs.PointStyle);
             processPolygonStyle(node, fs.PolygonStyle);
             processPolylineStyle(node,fs.PolylineStyle);
             processTitleStyle(node, fs.TitleStyle);
             _rules.Add(value,fs);
         }
     }
 }
예제 #10
0
        protected override void RenderFeatureLayer(IFeatureLayer layer, RenderPhase phase)
        {
            IFeatureRenderer renderer = GetRenderer <IFeatureRenderer>(layer);

            renderer.RenderTransform = ToViewTransform;

            Debug.Assert(renderer != null);

            Debug.Assert(layer.Style is FeatureStyle);
            FeatureStyle layerStyle = layer.Style as FeatureStyle;

            switch (phase)
            {
            case RenderPhase.Normal:
                IEnumerable <FeatureDataRow> features
                    =
                        EnumerateWhileMonitoringClientConnection(layer.Features.Select(ViewEnvelopeInternal.ToGeometry()));

                foreach (FeatureDataRow feature in features)
                {
                    FeatureStyle style = getStyleForFeature(layer, feature, layerStyle);

                    IEnumerable renderedFeature = renderer.RenderFeature(feature,
                                                                         style,
                                                                         RenderState.Normal,
                                                                         layer);
                    View.ShowRenderedObjects(renderedFeature);
                }
                break;

            case RenderPhase.Selected:
                IEnumerable <FeatureDataRow> selectedRows =
                    EnumerateWhileMonitoringClientConnection(layer.SelectedFeatures);

                foreach (FeatureDataRow selectedFeature in selectedRows)
                {
                    FeatureStyle style = getStyleForFeature(layer, selectedFeature, layerStyle);

                    IEnumerable renderedFeature = renderer.RenderFeature(selectedFeature,
                                                                         style,
                                                                         RenderState.Selected,
                                                                         layer);
                    View.ShowRenderedObjects(renderedFeature);
                }
                break;

            case RenderPhase.Highlighted:
                IEnumerable <FeatureDataRow> highlightedRows =
                    EnumerateWhileMonitoringClientConnection(layer.HighlightedFeatures);

                foreach (FeatureDataRow highlightedFeature in highlightedRows)
                {
                    FeatureStyle style = getStyleForFeature(layer, highlightedFeature, layerStyle);

                    IEnumerable renderedFeature = renderer.RenderFeature(highlightedFeature,
                                                                         style,
                                                                         RenderState.Highlighted,
                                                                         layer);
                    View.ShowRenderedObjects(renderedFeature);
                }
                break;

            default:
                break;
            }

            renderer.CleanUp();
        }