Exemple #1
0
        /// <summary>
        /// returns a random VectorStyle with symbols.
        /// </summary>
        /// <returns></returns>
        public IVectorStyle RandomVectorStyle()
        {
            IVectorStyle vs = RandomStyle.RandomVectorStyleNoSymbols();

            vs.Symbol = RandomSymbol();
            return(vs);
        }
Exemple #2
0
        public ExplodeThemeDialog(IEditorService editor, IVectorScaleRange parentRange, IVectorStyle style, ILayerDefinition parentLayer)
            : this()
        {
            if (style.StyleType == StyleType.Composite)
            {
                throw new NotSupportedException(Strings.ErrorExplodingCompositeStyleNotSupported);
            }

            _editor      = editor;
            _style       = style;
            _parentRange = parentRange;
            _parentLayer = parentLayer;

            txtLayersCreate.Text    = style.RuleCount.ToString(CultureInfo.InvariantCulture);
            txtLayerNameFormat.Text = "{0} - {1} - {2}"; //NOXLATE
            EvaluateStates();

            if (!_editor.IsNew)
            {
                txtLayerPrefix.Text = ResourceIdentifier.GetName(_editor.ResourceID);
            }
            else
            {
                txtLayerPrefix.Text = "Theme"; //NOXLATE
            }
        }
        public void Init(IEditorService edSvc, IVectorScaleRange parentRange, IVectorStyle style)
        {
            try
            {
                _init  = true;
                _edSvc = edSvc;
                _style = style;
                var p2 = style as IPointVectorStyle2;
                var l2 = style as ILineVectorStyle2;
                var a2 = style as IAreaVectorStyle2;
                var c2 = style as ICompositeTypeStyle2;
                btnShowInLegend.Visible = !(p2 == null && l2 == null && a2 == null && c2 == null);
                if (btnShowInLegend.Visible)
                {
                    if (p2 != null)
                    {
                        btnShowInLegend.Checked = p2.ShowInLegend;
                    }
                    else if (l2 != null)
                    {
                        btnShowInLegend.Checked = l2.ShowInLegend;
                    }
                    else if (a2 != null)
                    {
                        btnShowInLegend.Checked = a2.ShowInLegend;
                    }
                    else if (c2 != null)
                    {
                        btnShowInLegend.Checked = c2.ShowInLegend;
                    }
                }

                var pts = style as IPointVectorStyle;
                if (pts != null)
                {
                    btnAllowOverpost.Checked = pts.AllowOverpost;
                    btnDisplayAsText.Checked = pts.DisplayAsText;
                }
                else
                {
                    btnAllowOverpost.Visible     =
                        btnDisplayAsText.Visible = false;
                }

                InitGrid(style is ICompositeTypeStyle);
                _editedLayer      = (ILayerDefinition)_edSvc.GetEditedResource();
                _parentScaleRange = parentRange;
                ReSyncRulesToBindingList(style);
            }
            finally
            {
                _init = false;
            }
        }
        private void ReSyncRulesToBindingList(IVectorStyle style)
        {
            _rules.Clear();
            if (style != null)
            {
                switch (style.StyleType)
                {
                case StyleType.Point:
                {
                    for (int i = 0; i < style.RuleCount; i++)
                    {
                        IPointRule pr = (IPointRule)style.GetRuleAt(i);
                        _rules.Add(new PointRuleModel(pr, i));
                    }
                }
                break;

                case StyleType.Line:
                {
                    for (int i = 0; i < style.RuleCount; i++)
                    {
                        ILineRule lr = (ILineRule)style.GetRuleAt(i);
                        _rules.Add(new LineRuleModel(lr, i));
                    }
                }
                break;

                case StyleType.Area:
                {
                    for (int i = 0; i < style.RuleCount; i++)
                    {
                        IAreaRule ar = (IAreaRule)style.GetRuleAt(i);
                        _rules.Add(new AreaRuleModel(ar, i));
                    }
                }
                break;

                case StyleType.Composite:
                {
                    for (int i = 0; i < style.RuleCount; i++)
                    {
                        ICompositeRule cr = (ICompositeRule)style.GetRuleAt(i);
                        _rules.Add(new CompositeRuleModel(cr, i));
                    }
                }
                break;
                }
            }
            else
            {
                _rules.Clear();
            }
        }
Exemple #5
0
        public ExplodeThemeDialog(IEditorService editor, IVectorScaleRange parentRange, IVectorStyle style, ILayerDefinition parentLayer)
            : this()
        {
            if (style.StyleType == StyleType.Composite)
                throw new NotSupportedException(Strings.ErrorExplodingCompositeStyleNotSupported);

            _editor = editor;
            _style = style;
            _parentRange = parentRange;
            _parentLayer = parentLayer;

            txtLayersCreate.Text = style.RuleCount.ToString(CultureInfo.InvariantCulture);
            txtLayerNameFormat.Text = "{0} - {1} - {2}"; //NOXLATE
            EvaluateStates();

            if (!_editor.IsNew)
            {
                txtLayerPrefix.Text = ResourceIdentifier.GetName(_editor.ResourceID);
            }
            else
            {
                txtLayerPrefix.Text = "Theme"; //NOXLATE
            }
        }
        private void ReSyncBindingListToRules(IVectorStyle style)
        {
            if (style != null)
            {
                switch (style.StyleType)
                {
                case StyleType.Point:
                {
                    IPointVectorStyle pts = style as IPointVectorStyle;
                    pts.RemoveAllRules();
                    for (int i = 0; i < _rules.Count; i++)
                    {
                        ILabeledRuleModel rule = (ILabeledRuleModel)_rules[i];
                        IPointRule        pr   = (IPointRule)rule.UnwrapRule();
                        pts.AddRule(pr);
                        rule.SetIndex(i);
                    }
                }
                break;

                case StyleType.Line:
                {
                    ILineVectorStyle lts = style as ILineVectorStyle;
                    lts.RemoveAllRules();
                    for (int i = 0; i < _rules.Count; i++)
                    {
                        ILabeledRuleModel rule = (ILabeledRuleModel)_rules[i];
                        ILineRule         lr   = (ILineRule)rule.UnwrapRule();
                        lts.AddRule(lr);
                        rule.SetIndex(i);
                    }
                }
                break;

                case StyleType.Area:
                {
                    IAreaVectorStyle ats = style as IAreaVectorStyle;
                    ats.RemoveAllRules();
                    for (int i = 0; i < _rules.Count; i++)
                    {
                        ILabeledRuleModel rule = (ILabeledRuleModel)_rules[i];
                        IAreaRule         ar   = (IAreaRule)rule.UnwrapRule();
                        ats.AddRule(ar);
                        rule.SetIndex(i);
                    }
                }
                break;

                case StyleType.Composite:
                {
                    ICompositeTypeStyle cts = style as ICompositeTypeStyle;
                    cts.RemoveAllRules();
                    for (int i = 0; i < _rules.Count; i++)
                    {
                        IRuleModel     rule = (IRuleModel)_rules[i];
                        ICompositeRule cr   = (ICompositeRule)rule.UnwrapRule();
                        cts.AddCompositeRule(cr);
                        rule.SetIndex(i);
                    }
                }
                break;
                }
            }
        }
        private void CreateThemeButton_Click(object sender, EventArgs e)
        {
            try
            {
                IVectorStyle owner = null;

                if (m_point != null)
                {
                    owner = m_point;
                }
                else if (m_line != null)
                {
                    owner = m_line;
                }
                else if (m_area != null)
                {
                    owner = m_area;
                }
                else if (m_comp != null)
                {
                    owner = m_comp;
                }

                if (owner is ICompositeTypeStyle)
                {
                    MessageBox.Show(Strings.CannotCreateThemeForCompositeStyleClassicEditor);
                    return;
                }

                ILayerDefinition       layer = (ILayerDefinition)m_owner.Editor.GetEditedResource();
                IVectorLayerDefinition vl    = (IVectorLayerDefinition)layer.SubLayer;
                if (string.IsNullOrEmpty(vl.FeatureName))
                {
                    MessageBox.Show(Strings.NoFeatureClassAssigned);
                    return;
                }
                var cls = m_owner.Editor.CurrentConnection.FeatureService.GetClassDefinition(vl.ResourceId, vl.FeatureName);
                if (cls == null)
                {
                    MessageBox.Show(string.Format(Strings.FeatureClassNotFound, vl.FeatureName));
                    return;
                }
                ThemeCreator dlg = new ThemeCreator(
                    m_owner.Editor,
                    layer,
                    m_owner.SelectedClass,
                    owner);
                if (dlg.ShowDialog(this) == DialogResult.OK)
                {
                    var area  = owner as IAreaVectorStyle;
                    var point = owner as IPointVectorStyle;
                    var line  = owner as ILineVectorStyle;
                    if (area != null)
                    {
                        SetItem(m_parent, area);
                    }
                    else if (point != null)
                    {
                        SetItem(m_parent, point);
                    }
                    else if (line != null)
                    {
                        SetItem(m_parent, line);
                    }

                    m_owner.HasChanged();
                    m_owner.UpdateDisplay();
                }
            }
            catch (Exception ex)
            {
                string msg = NestedExceptionMessageProcessor.GetFullMessage(ex);
                m_owner.SetLastException(ex);
                MessageBox.Show(this, string.Format(Strings.GenericError, msg), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        public void RenderLayer(IVectorLayer layer, Map map, System.Drawing.Graphics g)
        {
            if (map.Center == null)
            {
                throw (new ApplicationException("Cannot render map. View center not specified"));
            }

            g.SmoothingMode = layer.SmoothingMode;
            SharpMap.Geometries.BoundingBox envelope = map.Envelope; //View to render
            if (layer.CoordinateTransformation != null)
            {
                envelope = GeometryTransform.TransformBox(
                    envelope,
                    layer.CoordinateTransformation.MathTransform.Inverse());
            }

            //List<SharpMap.Geometries.Geometry> features = this.DataSource.GetGeometriesInView(map.Envelope);

            if (layer.DataSource == null)
            {
                throw (new ApplicationException("DataSource property not set on layer '" + layer.LayerName + "'"));
            }

            //If thematics is enabled, we use a slighty different rendering approach
            if (layer.Theme != null)
            {
                SharpMap.Data.FeatureDataSet ds = new SharpMap.Data.FeatureDataSet();
                layer.DataSource.Open();
                layer.DataSource.ExecuteIntersectionQuery(envelope, ds);
                layer.DataSource.Close();

                FeatureDataTable features = (FeatureDataTable)ds.Tables[0];

                if (layer.CoordinateTransformation != null)
                {
                    for (int i = 0; i < features.Count; i++)
                    {
                        features[i].Geometry = GeometryTransform.TransformGeometry(features[i].Geometry, layer.CoordinateTransformation.MathTransform);
                    }
                }

                //Linestring outlines is drawn by drawing the layer once with a thicker line
                //before drawing the "inline" on top.
                if (layer.Style.EnableOutline)
                {
                    //foreach (SharpMap.Geometries.Geometry feature in features)
                    for (int i = 0; i < features.Count; i++)
                    {
                        SharpMap.Data.FeatureDataRow feature = features[i];
                        //Draw background of all line-outlines first
                        if (feature.Geometry is SharpMap.Geometries.LineString)
                        {
                            IVectorStyle outlinestyle1 = layer.Theme.GetStyle(feature);
                            if (outlinestyle1.Enabled && outlinestyle1.EnableOutline)
                            {
                                SharpMap.Rendering.VectorRenderer.DrawLineString(g, feature.Geometry as LineString, outlinestyle1.Outline, map);
                            }
                        }
                        else if (feature.Geometry is SharpMap.Geometries.MultiLineString)
                        {
                            IVectorStyle outlinestyle2 = layer.Theme.GetStyle(feature);
                            if (outlinestyle2.Enabled && outlinestyle2.EnableOutline)
                            {
                                SharpMap.Rendering.VectorRenderer.DrawMultiLineString(g, feature.Geometry as MultiLineString, outlinestyle2.Outline, map);
                            }
                        }
                    }
                }

                for (int i = 0; i < features.Count; i++)
                {
                    SharpMap.Data.FeatureDataRow feature = features[i];
                    IVectorStyle style = layer.Theme.GetStyle(feature);
                    RenderGeometry(g, map, layer.ClippingEnabled, feature.Geometry, style);
                }
            }
            else
            {
                layer.DataSource.Open();

                Collection <Geometry> geoms = layer.DataSource.GetGeometriesInView(envelope);
                layer.DataSource.Close();

                if (layer.CoordinateTransformation != null)
                {
                    for (int i = 0; i < geoms.Count; i++)
                    {
                        geoms[i] = GeometryTransform.TransformGeometry(geoms[i], layer.CoordinateTransformation.MathTransform);
                    }
                }

                //Linestring outlines is drawn by drawing the layer once with a thicker line
                //before drawing the "inline" on top.
                if (layer.Style.EnableOutline)
                {
                    foreach (SharpMap.Geometries.Geometry geom in geoms)
                    {
                        if (geom != null)
                        {
                            //Draw background of all line-outlines first
                            switch (geom.GetType().FullName)
                            {
                            case "SharpMap.Geometries.LineString":
                                SharpMap.Rendering.VectorRenderer.DrawLineString(g, geom as LineString, layer.Style.Outline, map);
                                break;

                            case "SharpMap.Geometries.MultiLineString":
                                SharpMap.Rendering.VectorRenderer.DrawMultiLineString(g, geom as MultiLineString, layer.Style.Outline, map);
                                break;

                            default:
                                break;
                            }
                        }
                    }
                }

                for (int i = 0; i < geoms.Count; i++)
                {
                    if (geoms[i] != null)
                    {
                        RenderGeometry(g, map, layer.ClippingEnabled, geoms[i], layer.Style);
                    }
                }
            }


            //base.Render(g, map);
        }
        private void RenderGeometry(System.Drawing.Graphics g, Map map, bool clipLayer, Geometry feature, IVectorStyle style)
        {
            switch (feature.GetType().FullName)
            {
            case "SharpMap.Geometries.Polygon":
                if (style.EnableOutline)
                {
                    SharpMap.Rendering.VectorRenderer.DrawPolygon(g, (Polygon)feature, style.Fill, style.Outline, clipLayer, map);
                }
                else
                {
                    SharpMap.Rendering.VectorRenderer.DrawPolygon(g, (Polygon)feature, style.Fill, null, clipLayer, map);
                }
                break;

            case "SharpMap.Geometries.MultiPolygon":
                if (style.EnableOutline)
                {
                    SharpMap.Rendering.VectorRenderer.DrawMultiPolygon(g, (MultiPolygon)feature, style.Fill, style.Outline, clipLayer, map);
                }
                else
                {
                    SharpMap.Rendering.VectorRenderer.DrawMultiPolygon(g, (MultiPolygon)feature, style.Fill, null, clipLayer, map);
                }
                break;

            case "SharpMap.Geometries.LineString":
                SharpMap.Rendering.VectorRenderer.DrawLineString(g, (LineString)feature, style.Line, map);
                break;

            case "SharpMap.Geometries.MultiLineString":
                SharpMap.Rendering.VectorRenderer.DrawMultiLineString(g, (MultiLineString)feature, style.Line, map);
                break;

            case "SharpMap.Geometries.Point":
                SharpMap.Rendering.VectorRenderer.DrawPoint(g, (Point)feature, style.Symbol, style.SymbolScale, style.SymbolOffset, style.SymbolRotation, map);
                break;

            case "SharpMap.Geometries.MultiPoint":
                SharpMap.Rendering.VectorRenderer.DrawMultiPoint(g, (MultiPoint)feature, style.Symbol, style.SymbolScale, style.SymbolOffset, style.SymbolRotation, map);
                break;

            case "SharpMap.Geometries.GeometryCollection":
                foreach (Geometries.Geometry geom in (GeometryCollection)feature)
                {
                    RenderGeometry(g, map, clipLayer, geom, style);
                }
                break;

            default:
                break;
            }
        }