コード例 #1
0
        /// <summary>
        /// 一个多边形和另外一个多边形之间的关系
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PolygonInsideTestBtn_Click(object sender, RoutedEventArgs e)
        {
            List <Geometry2D>     gss   = this.drawingKernel.GeometryShapes;
            List <List <Line2D> > lines = new List <List <Line2D> >();

            foreach (var g in gss)
            {
                if (g is PolygonGeometry)
                {
                    List <Line2D>   nlines = new List <Line2D>();
                    PolygonGeometry poly   = g as DrawingKernel.Geometries.Primitives.PolygonGeometry;
                    g.FillColor = Colors.Azure;
                    g.Opacity   = 0.3;
                    poly.Update();
                    nlines.AddRange(poly.Lines);
                    lines.Add(nlines);
                }
                if (g.GeometryId == "tp")
                {
                    this.drawingKernel.RemoveGeometryShape(g);
                }
            }

            //计算多边形和多边形之间的关系
            if (lines.Count == 2)
            {
                List <List <Line2D> > ins = new List <List <Line2D> >();
                var result = GraphicAlgorithm.PolygonInsideOfRegion(lines[0], lines[1], ins);

                if (result == 1)
                {
                    ins.ForEach(x => {
                        PolygonGeometry pg = new PolygonGeometry();
                        x.ForEach(y => { pg.PPoints.Add(y.Start); });
                        pg.FillColor  = Colors.Green;
                        pg.GeometryId = "tp";
                        this.drawingKernel.AddShape(pg);
                    });
                }
                else if (result == 0)
                {
                    ins.ForEach(x => {
                        PolygonGeometry pg = new PolygonGeometry();
                        x.ForEach(y => { pg.PPoints.Add(y.Start); });
                        pg.FillColor  = Colors.Red;
                        pg.GeometryId = "tp";
                        this.drawingKernel.AddShape(pg);
                    });
                }
                else
                {
                    MessageBox.Show("相离");
                }
            }
            else
            {
                MessageBox.Show("不表现多个多边形的情况");
            }
        }
コード例 #2
0
        /// <summary>
        /// 线和多边形的关系
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PInsideTestBtn_Click(object sender, RoutedEventArgs e)
        {
            List <Geometry2D> gss   = this.drawingKernel.GeometryShapes;
            List <Line2D>     lines = new List <Line2D>();

            List <Line2D> vts = new List <Line2D>();

            foreach (var g in gss)
            {
                if (g is PolygonGeometry)
                {
                    PolygonGeometry poly = g as DrawingKernel.Geometries.Primitives.PolygonGeometry;
                    g.FillColor = Colors.Azure;
                    g.Opacity   = 0.3;
                    poly.Update();
                    lines.AddRange(poly.Lines);
                }
                if (g is DrawingKernel.Geometries.Primitives.LineGeometry)
                {
                    DrawingKernel.Geometries.Primitives.LineGeometry l = g as DrawingKernel.Geometries.Primitives.LineGeometry;
                    vts.Add(Line2D.Create(l.Start, l.End));
                }
                if (g.GeometryId == "tp")
                {
                    this.drawingKernel.RemoveGeometryShape(g);
                }
            }

            if (vts != null)
            {
                for (int i = 0; i < vts.Count; i++)
                {
                    var rs = GraphicAlgorithm.LineInsideOfRegion(vts[i], lines, null);
                    if (rs == 1)
                    {
                        DrawingKernel.Geometries.Primitives.LineGeometry lg = new DrawingKernel.Geometries.Primitives.LineGeometry();
                        lg.Start      = vts[i].Start;
                        lg.End        = vts[i].End;
                        lg.PenColor   = Colors.Blue;
                        lg.GeometryId = "tp";
                        this.drawingKernel.AddShape(lg);
                    }
                    else if (rs == 0)
                    {
                        DrawingKernel.Geometries.Primitives.LineGeometry lg = new DrawingKernel.Geometries.Primitives.LineGeometry();
                        lg.PenColor   = Colors.Red;
                        lg.Start      = vts[i].Start;
                        lg.End        = vts[i].End;
                        lg.GeometryId = "tp";
                        this.drawingKernel.AddShape(lg);
                    }
                    else
                    {
                        DrawingKernel.Geometries.Primitives.LineGeometry lg = new DrawingKernel.Geometries.Primitives.LineGeometry();
                        lg.PenColor   = Colors.Black;
                        lg.Start      = vts[i].Start;
                        lg.End        = vts[i].End;
                        lg.GeometryId = "tp";
                        this.drawingKernel.AddShape(lg);
                    }
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// 检测一个点是否在一个多边形内部
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void InsideTestBtn_Click(object sender, RoutedEventArgs e)
        {
            List <Geometry2D> gss   = this.drawingKernel.GeometryShapes;
            List <Line2D>     lines = new List <Line2D>();

            List <Vector2D> vts = new List <Vector2D>();

            foreach (var g in gss)
            {
                if (g is PolygonGeometry)
                {
                    PolygonGeometry poly = g as DrawingKernel.Geometries.Primitives.PolygonGeometry;
                    g.FillColor = Colors.Azure;
                    g.Opacity   = 0.3;
                    poly.Update();
                    lines.AddRange(poly.Lines);
                }
                if (g is DrawingKernel.Geometries.Primitives.LineGeometry)
                {
                    DrawingKernel.Geometries.Primitives.LineGeometry l = g as DrawingKernel.Geometries.Primitives.LineGeometry;
                    vts.Add(l.Start);
                    vts.Add(l.End);
                }
                if (g.GeometryId == "tp")
                {
                    this.drawingKernel.RemoveGeometryShape(g);
                }
            }

            if (vts != null)
            {
                int resultP = 0;
                for (int i = 0; i < vts.Count; i++)
                {
                    resultP = GraphicAlgorithm.InsideOfRegion(vts[i], lines);
                    if (resultP == 0)
                    {
                        CircleGeometry c = new DrawingKernel.Geometries.Primitives.CircleGeometry();
                        c.FillColor  = Colors.Red;
                        c.Start      = vts[i];
                        c.End        = Vector2D.Create(vts[i].X + 5, vts[i].Y);
                        c.GeometryId = "tp";
                        this.drawingKernel.AddShape(c);
                    }
                    else if (resultP == 1)
                    {
                        CircleGeometry c = new DrawingKernel.Geometries.Primitives.CircleGeometry();
                        c.FillColor  = Colors.Green;
                        c.Start      = vts[i];
                        c.End        = Vector2D.Create(vts[i].X + 5, vts[i].Y);
                        c.GeometryId = "tp";
                        this.drawingKernel.AddShape(c);
                    }
                    else
                    {
                        CircleGeometry c = new DrawingKernel.Geometries.Primitives.CircleGeometry();
                        c.FillColor  = Colors.Yellow;
                        c.Start      = vts[i];
                        c.End        = Vector2D.Create(vts[i].X + 5, vts[i].Y);
                        c.GeometryId = "tp";
                        this.drawingKernel.AddShape(c);
                    }
                }
            }
        }