コード例 #1
0
        private void AddSineCurveLayers(Map map, LabelLayerMode mode,
                                        LabelStyle.HorizontalAlignmentEnum hzAlign,
                                        LabelStyle.VerticalAlignmentEnum vtAlign)
        {
            string text;

            switch (mode)
            {
            case LabelLayerMode.SineCurveExtended:
                text =
                    "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam";    //", quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
                break;

            default:
                text = "Lorem ipsum olor sit amet, consectetur adipisici elit";
                break;
            }

            var fdt = new SharpMap.Data.FeatureDataTable();

            fdt.BeginInit();
            fdt.Columns.Add(new System.Data.DataColumn("ID", typeof(int)));
            fdt.Columns.Add(new System.Data.DataColumn("LABEL", typeof(string)));
            fdt.PrimaryKey = new[] { fdt.Columns[0] };
            fdt.EndInit();
            fdt.BeginLoadData();
            var fdr = (SharpMap.Data.FeatureDataRow)fdt.LoadDataRow(new object[] { 1, text }, true);

            fdr.Geometry = CreateSineLine(new GeoAPI.Geometries.Coordinate(10, 10));
            fdt.EndLoadData();

            var vLyr = new SharpMap.Layers.VectorLayer("Geometry", new GeometryFeatureProvider(fdt));

            vLyr.Style.Line    = new System.Drawing.Pen(System.Drawing.Color.Black, 4);
            vLyr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            vLyr.SRID          = map.SRID;
            map.Layers.Add(vLyr);

            var lLyr = new SharpMap.Layers.LabelLayer("Label")
            {
                DataSource = vLyr.DataSource, LabelColumn = "LABEL"
            };

            lLyr.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
            lLyr.Style.ForeColor   = System.Drawing.Color.Cyan;
            lLyr.Style.BackColor   = new SolidBrush(Color.FromArgb(128, Color.LightSlateGray));
            //lLyr.Style.Halo = new Pen(Color.Yellow, 4);
            lLyr.Style.IgnoreLength        = mode == LabelLayerMode.SineCurveExtended;
            lLyr.Style.HorizontalAlignment = hzAlign;
            lLyr.Style.VerticalAlignment   = vtAlign;
            //ll.Style.IsTextOnPath = textOnPath;
            map.Layers.Add(lLyr);
        }
コード例 #2
0
        public void LabelLayer_AffectedArea(LabelLayerMode mode, bool testRotations)
        {
            using (var map = new Map())
            {
                ConfigureMap(map);

                Envelope extents = null;
                switch (mode)
                {
                case LabelLayerMode.BasicLabel:
                case LabelLayerMode.BasicLabelRot:
                    AddBasicLabelLayers(map, mode);
                    extents = map.GetExtents();
                    extents.ExpandBy(0.125);
                    break;

                case LabelLayerMode.TextOnPath:
                    AddTextOnPathLayers(map);
                    extents = map.GetExtents();
                    break;

                case LabelLayerMode.PathOnLabel:
                    AddPathOnLabelLayers(map);
                    extents = map.GetExtents();
                    extents.ExpandBy(0.125);
                    break;
                }

                foreach (var rot in _rotations)
                {
                    SetMapTransform(map, rot);
                    map.ZoomToBox(extents, true);

                    var affectedArea = GetAffectedArea(map, (Layer)map.Layers[1]);
                    AddAffectedAreaLayer(map, affectedArea);

                    using (var img = map.GetMap())
                        img.Save(
                            Path.Combine(UnitTestsFixture.GetImageDirectory(this),
                                         $"LabelLayer_{mode}_{rot:000}.png"),
                            System.Drawing.Imaging.ImageFormat.Png);

                    // remove affected area layer
                    map.Layers.RemoveAt(2);
                    if (!testRotations)
                    {
                        break;
                    }
                }
            }
        }
コード例 #3
0
        private void AddBasicLabelLayers(Map map, LabelLayerMode mode)
        {
            var fdt = new FeatureDataTable();

            fdt.Columns.Add(new DataColumn("ID", typeof(int)));
            fdt.Columns.Add(new DataColumn("LABEL", typeof(string)));

            var factory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(4236);
            var fdr     = fdt.NewRow();

            fdr[0]       = 1;
            fdr[1]       = "Test Label";
            fdr.Geometry = factory.CreatePoint(new Coordinate(99, 13));
            fdt.AddRow(fdr);

            var vLyr = new VectorLayer("Basic Point", new GeometryFeatureProvider(fdt));

            map.Layers.Add(vLyr);

            var lLyr = new LabelLayer("Basic Point Labels")
            {
                DataSource  = vLyr.DataSource,
                Enabled     = true,
                LabelColumn = "LABEL",
                Style       = new LabelStyle
                {
                    Offset = new PointF(20, -20),
                    HorizontalAlignment = LabelStyle.HorizontalAlignmentEnum.Left,
                    VerticalAlignment   = LabelStyle.VerticalAlignmentEnum.Bottom,
                    Halo      = new Pen(Color.Yellow, 5f),
                    BackColor = Brushes.Orange
                }
            };

            if (mode == LabelLayerMode.BasicLabelRot)
            {
                lLyr.Style.Rotation = 330;
            }

            map.Layers.Add(lLyr);
        }
コード例 #4
0
        public void PathLabel_AffectedArea(LabelLayerMode mode, bool testRotations, bool testHzAlign, bool testVtAlign)
        {
            var hzAlgins = new[]
            {
                LabelStyle.HorizontalAlignmentEnum.Center,
                LabelStyle.HorizontalAlignmentEnum.Left,
                LabelStyle.HorizontalAlignmentEnum.Right
            };

            var vtAlgins = new[]
            {
                LabelStyle.VerticalAlignmentEnum.Top,
                LabelStyle.VerticalAlignmentEnum.Middle,
                LabelStyle.VerticalAlignmentEnum.Bottom
            };

            foreach (var hzAlign in hzAlgins)
            {
                foreach (var vtAlign in vtAlgins)
                {
                    using (var map = new Map())
                    {
                        ConfigureMap(map);

                        AddSineCurveLayers(map, mode, hzAlign, vtAlign);

                        if (mode == LabelLayerMode.SineCurveClipped)
                        {
                            map.ZoomToExtents();
                            map.Center = new Coordinate(map.Center.X - map.Envelope.Width * 0.25, map.Center.Y);
                            map.Zoom  *= 0.65;
                        }

                        foreach (var rot in _rotations)
                        {
                            SetMapTransform(map, rot);

                            switch (mode)
                            {
                            case LabelLayerMode.SineCurve:
                                map.ZoomToExtents();
                                map.Zoom *= 1.25;
                                break;

                            case LabelLayerMode.SineCurveClipped:
//                            map.ZoomToExtents();
//                            map.Zoom *= 0.6;
                                break;

                            case LabelLayerMode.SineCurveExtended:
                                map.ZoomToExtents();
                                map.Zoom *= 1.25;
                                break;
                            }

                            var affectedArea = GetAffectedArea(map, (Layer)map.Layers[1]);
                            if (affectedArea == null)
                            {
                                continue;
                            }

                            AddAffectedAreaLayer(map, affectedArea);

                            using (var img = map.GetMap())
                                img.Save(
                                    Path.Combine(UnitTestsFixture.GetImageDirectory(this),
                                                 $"PathLabel_{mode}_Hz{hzAlign}_Vt{vtAlign}_{rot:000}.png"),
                                    System.Drawing.Imaging.ImageFormat.Png);

                            // remove affected area layer
                            map.Layers.RemoveAt(2);
                            if (!testRotations)
                            {
                                break;
                            }
                        }
                    }
                    if (!testVtAlign)
                    {
                        break;
                    }
                }
                if (!testHzAlign)
                {
                    break;
                }
            }
        }