コード例 #1
0
ファイル: Example11.cs プロジェクト: Geri-Borbas/Triangle.NET
        private static double[] InterpolateData(Mesh mesh, double[] data, IEnumerable <Point> xy)
        {
            // The interpolated values.
            var values = new double[xy.Count()];

            var qtree = new TriangleQuadTree(mesh);

            int i = 0;

            foreach (var p in xy)
            {
                var tri = qtree.Query(p.X, p.Y);

                // For easy access of the interpolated values.
                p.ID = i;

                if (tri == null)
                {
                    values[i] = float.NaN;
                }
                else
                {
                    values[i] = Interpolation.InterpolatePoint(tri, p, data);
                }

                i++;
            }

            return(values);
        }
コード例 #2
0
        internal void CalcDL(Structure str)
        {
            if (str == null || str.RedPlanning == null || str.RedPlanning.Count == 0)
            {
                return;
            }

            List <Vertex> vrtxs = new List <Vertex>();
            Vertex        vrtx;
            int           i = 1;

            foreach (PlanningVertex item in str.RedPlanning)
            {
                vrtx = new Vertex(item.X, item.Y, item.Number, 2);
                vrtx.Attributes[0] = item.Red;
                vrtx.Attributes[1] = item.Black;
                vrtxs.Add(vrtx);
                i++;
            }

            Contour cnt = new Contour(vrtxs);

            TriangleNet.Geometry.Polygon polygon = new TriangleNet.Geometry.Polygon();
            polygon.Add(cnt);
            GenericMesher     mesher     = new GenericMesher();
            ConstraintOptions constraint = new ConstraintOptions();

            constraint.Convex = true;
            Mesh             meshPlanning = (Mesh)mesher.Triangulate(polygon, constraint);
            TriangleQuadTree meshTree     = new TriangleQuadTree(meshPlanning);

            TriangleNet.Topology.Triangle trgl = (TriangleNet.Topology.Triangle)meshTree.Query(X, Y);
            if (trgl == null)
            {
                Dictionary <Vertex, double> valuePairs = new Dictionary <Vertex, double>();
                Line2d ln;
                foreach (Vertex item in meshPlanning.Vertices)
                {
                    ln = new Line2d(new Point2d(X, Y), new Point2d(item.X, item.Y));
                    valuePairs.Add(item, ln.Length);
                }
                IOrderedEnumerable <KeyValuePair <Vertex, double> > selected = from v in valuePairs // определяем каждый объект как
                                                                               orderby v.Value      // упорядочиваем по возрастанию
                                                                               select v;            // выбираем объект
                List <KeyValuePair <Vertex, double> > lst = selected.ToList();
                foreach (TriangleNet.Topology.Triangle item in meshPlanning.Triangles)
                {
                    if (item.Contains(lst[0].Key) && item.Contains(lst[1].Key))
                    {
                        trgl = item; break;
                    }
                }
            }
            vrtx = new Vertex(X, Y, Number, 2);
            Interpolation.InterpolateAttributes(vrtx, trgl, 1);
            DL = Math.Round(vrtx.Attributes[0], 3);
        }
コード例 #3
0
        private ITriangle FindTriangleAt(float x, float y)
        {
            // Get mesh coordinates
            var p = new System.Drawing.PointF(x, y);

            renderControl.Zoom.ScreenToWorld(ref p);

            topoControlView.SetPosition(p);

            if (tree == null)
            {
                tree = new TriangleQuadTree(mesh, 5, 2);
            }

            return(tree.Query(p.X, p.Y));
        }
コード例 #4
0
        private ITriangle FindTriangleAt(float xr, float yr)
        {
            // Get mesh coordinates
            var p = new System.Drawing.PointF(xr, yr);

            renderControl.Zoom.ScreenToWorld(p, out double x, out double y);

            topoControlView.SetPosition(x, y);

            if (tree == null)
            {
                tree = new TriangleQuadTree(mesh, 5, 2);
            }

            return(tree.Query(x, y));
        }
コード例 #5
0
        public void TestProcessRegionProtected()
        {
            var poly = new Polygon();

            // Outer region.
            poly.Add(Helper.Rectangle(-2d, 2d, 2d, -2d, 2));

            // Inner region.
            poly.Add(Helper.Rectangle(-1d, 1d, 1d, -1d, 1));

            poly.Regions.Add(new RegionPointer(0d, 0d, 1));

            var mesh = (Mesh)poly.Triangulate();

            var iterator = new RegionIterator(mesh);

            var qtree = new TriangleQuadTree(mesh);

            // Find a seeding triangle in region 1.
            var seed = (Triangle)qtree.Query(0.0, 0.0);

            iterator.Process(seed, t => Assert.AreEqual(1, t.Label));
        }
コード例 #6
0
        internal void CalcNL(Mesh blackMesh)
        {
            if (blackMesh == null)
            {
                return;
            }

            Vertex           vrtx;
            TriangleQuadTree meshTree = new TriangleQuadTree(blackMesh);

            TriangleNet.Topology.Triangle trgl = (TriangleNet.Topology.Triangle)meshTree.Query(X, Y);
            if (trgl == null)
            {
                Dictionary <Vertex, double> valuePairs = new Dictionary <Vertex, double>();
                Line2d ln;
                foreach (Vertex item in blackMesh.Vertices)
                {
                    ln = new Line2d(new Point2d(X, Y), new Point2d(item.X, item.Y));
                    valuePairs.Add(item, ln.Length);
                }
                IOrderedEnumerable <KeyValuePair <Vertex, double> > selected = from v in valuePairs // определяем каждый объект как
                                                                               orderby v.Value      // упорядочиваем по возрастанию
                                                                               select v;            // выбираем объект
                List <KeyValuePair <Vertex, double> > lst = selected.ToList();
                foreach (TriangleNet.Topology.Triangle item in blackMesh.Triangles)
                {
                    if (item.Contains(lst[0].Key) && item.Contains(lst[1].Key))
                    {
                        trgl = item; break;
                    }
                }
            }
            vrtx = new Vertex(X, Y, Number, 2);
            Interpolation.InterpolateAttributes(vrtx, trgl, 1);
            NL = Math.Round(vrtx.Attributes[0], 3);
        }