Esempio n. 1
0
 public GDI_BrokenLine(List <PointF> pts) : base(pts)
 {
     tools          = new GDIPlusTools(this, this, pts.GetBounds());
     tools.Drawing += Tools_Drawing;
     //tools.Preparing += Tools_Preparing;
     PropertyChanged += GDI_BrokenLine_PropertyChanged;
 }
Esempio n. 2
0
 public void WriteTo(List<CloudTag> tags, Color[] colors = null)
 {
     string outputSourceName = "out.png";
     float width;
     float height;
     tags.GetBounds(out width, out height);
     var random = new Random();
     using (var image = new Bitmap((int)width+1, (int)height+1))
     using (var g = Graphics.FromImage(image))
     {
         foreach (var tag in tags)
             g.DrawString(tag.Word, new Font("Times New Roman", tag.Frequency),
                 new SolidBrush(GetRandomColor(random, colors)), tag.X, tag.Y);
         image.Save(outputSourceName, ImageFormat.Png);
     }
 }
Esempio n. 3
0
        public void BoundsOfLineString()
        {
            var lineString = new List <double[]>
            {
                new double[] { -1, -5 },
                new double[] { 1, 22 }
            }.ToLineString();
            var bounds = lineString.GetBounds();

            Assert.Equal(-1, bounds.XMin);
            Assert.Equal(1, bounds.XMax);
            Assert.Equal(-5, bounds.YMin);
            Assert.Equal(22, bounds.YMax);
            Assert.Equal(0, bounds.ZMin);
            Assert.Equal(0, bounds.ZMax);
        }
Esempio n. 4
0
        public static void LoadKML(this C1VectorLayer vl, Stream stream, bool centerAndZoom,
                                   ProcessVectorItem processVector)
        {
            using (StreamReader sr = new StreamReader(stream))
            {
                string s = sr.ReadToEnd();
                List <C1VectorItemBase> vects = KmlReader.Read(s);

                vl.BeginUpdate();
                foreach (C1VectorItemBase vect in vects)
                {
                    if (processVector != null)
                    {
                        if (!processVector(vect))
                        {
                            continue;
                        }
                    }

                    vl.Children.Add(vect);
                }
                vl.EndUpdate();

                if (centerAndZoom)
                {
                    Rect   bnds = vects.GetBounds();
                    C1Maps maps = ((IMapLayer)vl).ParentMaps;

                    if (maps != null)
                    {
                        maps.Center = new Point(bnds.Left + 0.5 * bnds.Width, bnds.Top + 0.5 * bnds.Height);
                        double scale = Math.Max(bnds.Width / 360 * maps.ActualWidth,
                                                bnds.Height / 180 * maps.ActualHeight);;
                        double zoom = Math.Log(512 / scale, 2.0);
                        maps.TargetZoom = maps.Zoom = zoom > 0 ? zoom : 0;
                    }
                }

                sr.Close();
            }
        }
Esempio n. 5
0
        public void BoundsOfListofLineString()
        {
            var c1 = new List <double[]>
            {
                new double[] { -1, -6 },
                new double[] { 1, 22 }
            }.ToLineString();
            var c2 = new List <double[]>
            {
                new double[] { -3, -5 },
                new double[] { 8, 7 }
            }.ToLineString();
            var lines = new List <LineString> {
                c1, c2
            };
            var bounds = lines.GetBounds();

            Assert.Equal(-3, bounds.XMin);
            Assert.Equal(8, bounds.XMax);
            Assert.Equal(-6, bounds.YMin);
            Assert.Equal(22, bounds.YMax);
            Assert.Equal(0, bounds.ZMin);
            Assert.Equal(0, bounds.ZMax);
        }
		private void RebuildUI()
		{
			if (DataSource == null)
			{
				//todo: clear
				return;
			}

			panel.Children.Clear();

			int width = DataSource.Width;
			int height = DataSource.Height;
			bounds = DataSource.Grid.GetGridBounds();
			fieldWrapper = new UniformFieldWrapper(DataSource.Data, width, height);

			List<Point[]> tracks = new List<Point[]>(pointsNum);
			for (int i = 0; i < pointsNum; i++)
			{
				var track = new List<Point>();

				var start = rnd.NextPoint(bounds.XMin, bounds.XMax, bounds.YMin, bounds.YMax);
				track.Add(start);

				int maxLength = Math.Max(width, height);
				var position = start;
				double length = 0;
				do
				{
					var K1 = fieldWrapper.GetVector(position);
					K1.Normalize();
					//var shift = K1;
					var K2 = fieldWrapper.GetVector(position + (K1 / 2).DecreaseLength(width, height));
					K2.Normalize();
					var K3 = fieldWrapper.GetVector(position + (K2 / 2).DecreaseLength(width, height));
					K3.Normalize();
					var K4 = fieldWrapper.GetVector(position + K3.DecreaseLength(width, height));
					K4.Normalize();

					var shift = ((K1 + 2 * K2 + 2 * K3 + K4) / 6);
					//shift.Normalize();
					if (shift.X.IsNaN() || shift.Y.IsNaN())
						break;

					var next = position + shift;
					track.Add(next);

					if (!OccupyCells(position, next, bounds))
						break;

					position = next;
					length += shift.Length;
				} while (length < maxLength);

				Polyline line = new Polyline
				{
					Stroke = Brushes.Orange,
					StrokeThickness = 1,
					Stretch = Stretch.Fill,
					Points = new PointCollection(track),
					Effect = new DropShadowEffect { Color = Colors.Black, Direction = 245, BlurRadius = 3 }
				};
				ViewportPanel.SetViewportBounds(line, track.GetBounds());
				panel.Children.Add(line);
			}
		}
Esempio n. 7
0
 public override RectangleF GetBounds()
 {
     return(__points.GetBounds());
 }
Esempio n. 8
0
        protected void DrawLine(Point point)
        {
            double    maxLength     = LineLengthFactor * Math.Max(DataSource.Width, DataSource.Height);
            const int maxIterations = 300;

            Action <double, List <Point> > pointTracking = (directionSign, track) =>
            {
                int    i        = 0;
                var    position = point;
                double length   = 0;
                bool   finished = false;
                do
                {
                    double x = position.X;
                    double y = position.Y;
                    if (x < 0 || x > 1 || y < 0 || y > 1 || x.IsNaN() || y.IsNaN())
                    {
                        break;
                    }

                    double xFactor = 1.0 / width;
                    double yFactor = 1.0 / height;

                    var K1 = fieldWrapper.GetVector(position).ChangeLength(xFactor, yFactor);
                    var K2 = fieldWrapper.GetVector(position + K1 / 2).ChangeLength(xFactor, yFactor);
                    var K3 = fieldWrapper.GetVector(position + K2 / 2).ChangeLength(xFactor, yFactor);
                    var K4 = fieldWrapper.GetVector(position + K3).ChangeLength(xFactor, yFactor);

                    var shift = (K1 + 2 * K2 + 2 * K3 + K4) / 6;
                    if (shift.X.IsNaN() || shift.Y.IsNaN())
                    {
                        break;
                    }

                    //shift /= 10;
                    Point next          = position + directionSign * shift;
                    Point viewportPoint = PointToViewport(next);
                    track.Add(viewportPoint);

                    position = next;
                    length  += shift.Length;
                    i++;

                    finished = !(length < maxLength && i < maxIterations);
                } while (!finished);
            };

            var forwardTrack = new List <Point>();

            forwardTrack.Add(PointToViewport(point));
            pointTracking(+1, forwardTrack);
            Polyline forwardLine = CreateLine(forwardTrack);

            ViewportPanel.SetViewportBounds(forwardLine, forwardTrack.GetBounds());
            if (forwardTrack.Count > 1)
            {
                panel.Children.Add(forwardLine);
            }

            var backwardTrack = new List <Point>();

            backwardTrack.Add(PointToViewport(point));
            pointTracking(-1, backwardTrack);
            var backwardLine = CreateLine(backwardTrack);

            ViewportPanel.SetViewportBounds(backwardLine, backwardTrack.GetBounds());
            if (backwardTrack.Count > 1)
            {
                panel.Children.Add(backwardLine);
            }
        }
Esempio n. 9
0
        private void CreateAndAddPath(IEnumerable <IndexWrapper <Point> > indexedPoints,
                                      out int globalMinIndex, out int globalMaxIndex, CoordinateTransform transform)
        {
            var screenPoints = indexedPoints.DataToScreen(transform);

            var parts = screenPoints.Split(pathLength);

            var splittedParts = from part in parts
                                select missingValueSplitter.SplitMissingValue(part);

            bool isSmoothJoin = UseSmoothJoin;

            Point?lastPoint = null;

            globalMinIndex = Int32.MaxValue;
            globalMaxIndex = Int32.MinValue;

            foreach (var shortSegment in splittedParts)
            {
                foreach (var part in shortSegment)
                {
                    if (part.MinIndex < globalMinIndex)
                    {
                        globalMinIndex = part.MinIndex;
                    }
                    if (part.MaxIndex > globalMaxIndex)
                    {
                        globalMaxIndex = part.MaxIndex;
                    }

                    List <Point> list = part.GetPoints().ToList();
                    if (list.Count == 0)
                    {
                        continue;
                    }

                    if (part.Splitted)
                    {
                        lastPoint = null;
                    }

                    StreamGeometry geometry = new StreamGeometry();
                    using (var context = geometry.Open())
                    {
                        var start = lastPoint ?? list[0];

                        context.BeginFigure(start, isFilled: false, isClosed: false);
                        context.PolyLineTo(list, isStroked: true, isSmoothJoin: isSmoothJoin);
                    }

                    lastPoint = list.Last();

                    Path path = pathsPool.GetOrCreate();
                    drawnPaths.Add(path);

                    PointChartBase.SetIndexRange(path, new Range <int>(part.MinIndex, part.MaxIndex));
                    LineChartBase.SetPointsCount(path, list.Count);

                    DataRect localBounds = list.GetBounds();
                    PointChartBase.SetContentBounds(path, localBounds);

                    //if (path.CacheMode == null)
                    //    path.CacheMode = new BitmapCache();

                    // todo for debug purpose
                    //path.Stroke = ColorHelper.RandomBrush;

                    path.SetBinding(Path.StrokeProperty, strokeBinding);
                    path.SetBinding(Path.StrokeThicknessProperty, strokeThicknessBinding);
                    path.SetBinding(Path.StrokeDashArrayProperty, strokeDashArrayBinding);
                    path.SetBinding(Panel.ZIndexProperty, zIndexBinding);
                    path.SetBinding(Path.IsHitTestVisibleProperty, isHitTestVisibleBinding);
                    path.SetBinding(Path.VisibilityProperty, visibilityBinding);
                    path.SetBinding(Path.ToolTipProperty, tooltipBinding);

                    path.Data = geometry;

                    canvas.Children.Add(path);
                }
            }
        }
		protected void DrawLine(Point point)
		{
			double maxLength = LineLengthFactor * Math.Max(DataSource.Width, DataSource.Height);
			const int maxIterations = 300;

			Action<double, List<Point>> pointTracking = (directionSign, track) =>
			{
				int i = 0;
				var position = point;
				double length = 0;
				bool finished = false;
				do
				{
					double x = position.X;
					double y = position.Y;
					if (x < 0 || x > 1 || y < 0 || y > 1 || x.IsNaN() || y.IsNaN())
						break;

					double xFactor = 1.0 / width;
					double yFactor = 1.0 / height;

					var K1 = fieldWrapper.GetVector(position).ChangeLength(xFactor, yFactor);
					var K2 = fieldWrapper.GetVector(position + K1 / 2).ChangeLength(xFactor, yFactor);
					var K3 = fieldWrapper.GetVector(position + K2 / 2).ChangeLength(xFactor, yFactor);
					var K4 = fieldWrapper.GetVector(position + K3).ChangeLength(xFactor, yFactor);

					var shift = (K1 + 2 * K2 + 2 * K3 + K4) / 6;
					if (shift.X.IsNaN() || shift.Y.IsNaN())
						break;

					//shift /= 10;
					Point next = position + directionSign * shift;
					Point viewportPoint = PointToViewport(next);
					track.Add(viewportPoint);

					position = next;
					length += shift.Length;
					i++;

					finished = !(length < maxLength && i < maxIterations);
				} while (!finished);
			};

			var forwardTrack = new List<Point>();
			forwardTrack.Add(PointToViewport(point));
			pointTracking(+1, forwardTrack);
			Polyline forwardLine = CreateLine(forwardTrack);
			ViewportPanel.SetViewportBounds(forwardLine, forwardTrack.GetBounds());
			if (forwardTrack.Count > 1)
				panel.Children.Add(forwardLine);

			var backwardTrack = new List<Point>();
			backwardTrack.Add(PointToViewport(point));
			pointTracking(-1, backwardTrack);
			var backwardLine = CreateLine(backwardTrack);
			ViewportPanel.SetViewportBounds(backwardLine, backwardTrack.GetBounds());
			if (backwardTrack.Count > 1)
				panel.Children.Add(backwardLine);
		}
Esempio n. 11
0
        private void RebuildUI()
        {
            if (DataSource == null)
            {
                //todo: clear
                return;
            }

            panel.Children.Clear();

            int width  = DataSource.Width;
            int height = DataSource.Height;

            bounds       = DataSource.Grid.GetGridBounds();
            fieldWrapper = new UniformFieldWrapper(DataSource.Data, width, height);

            List <Point[]> tracks = new List <Point[]>(pointsNum);

            for (int i = 0; i < pointsNum; i++)
            {
                var track = new List <Point>();

                var start = rnd.NextPoint(bounds.XMin, bounds.XMax, bounds.YMin, bounds.YMax);
                track.Add(start);

                int    maxLength = Math.Max(width, height);
                var    position  = start;
                double length    = 0;
                do
                {
                    var K1 = fieldWrapper.GetVector(position);
                    K1.Normalize();
                    //var shift = K1;
                    var K2 = fieldWrapper.GetVector(position + (K1 / 2).DecreaseLength(width, height));
                    K2.Normalize();
                    var K3 = fieldWrapper.GetVector(position + (K2 / 2).DecreaseLength(width, height));
                    K3.Normalize();
                    var K4 = fieldWrapper.GetVector(position + K3.DecreaseLength(width, height));
                    K4.Normalize();

                    var shift = ((K1 + 2 * K2 + 2 * K3 + K4) / 6);
                    //shift.Normalize();
                    if (shift.X.IsNaN() || shift.Y.IsNaN())
                    {
                        break;
                    }

                    var next = position + shift;
                    track.Add(next);

                    if (!OccupyCells(position, next, bounds))
                    {
                        break;
                    }

                    position = next;
                    length  += shift.Length;
                } while (length < maxLength);

                Polyline line = new Polyline
                {
                    Stroke          = Brushes.Orange,
                    StrokeThickness = 1,
                    Stretch         = Stretch.Fill,
                    Points          = new PointCollection(track),
                    Effect          = new DropShadowEffect {
                        Color = Colors.Black, Direction = 245, BlurRadius = 3
                    }
                };
                ViewportPanel.SetViewportBounds(line, track.GetBounds());
                panel.Children.Add(line);
            }
        }