private void ActivateFlight()
        {
            airport            = a_airportClass.getAirport("JFK");
            a_flightlist       = a_baseClass.getInformationForFlightVisualization("JFK", 3);
            texture            = Texture.FromResource(typeof(BunnyActor).Assembly, "ActorDataSource.bunny.png");
            a_dataSourcePlugin = new ActorDataSourcePlugIn(globleHost);
            b_builder          = new BunnyBuilder(globleHost, texture, a_dataSourcePlugin.BindingsSource);
            LatLonAlt position = LatLonAlt.CreateUsingDegrees(airport.Latitude, airport.Longitude, 0);

            b_actors = b_builder.CreateBunnyActors(a_flightlist.Count, position);

            int index = 0;

            foreach (BunnyActor bactor in b_actors)
            {
                bactor.setDestination = LatLonAlt.CreateUsingDegrees(
                    ((double)(a_flightlist[index].Destination.Latitude)),
                    ((double)(a_flightlist[index].Destination.Longitude)),
                    a_flightlist[index].Destination.Altitude);
                bactor.Flight = a_flightlist[index].Identity;
                index++;

                globleHost.Actors.Add(bactor);
            }
            //globleHost.Actors.Add(b_actors.GetEnumerator().Current);
        }
Esempio n. 2
0
        public override void Update(Microsoft.MapPoint.Rendering3D.Scene.SceneState sceneState)
        {
            if (needUpdate && newSegment != null)
            {
                CameraData data;
                if (sceneState.TryGetData <CameraData>(out data))
                {
                    double altitude = data.MetersAboveGround / 100.0;

                    List <Vertex.PositionColored> vertices = new List <Vertex.PositionColored>();

                    LatLonAlt position = LatLonAlt.CreateUsingDegrees(newSegment.StartPoint.Y, newSegment.StartPoint.X, altitude);
                    Vector3F  vec      = new Vector3F(position.GetVector());
                    vertices.Add(new Vertex.PositionColored(vec, lineColor.ToArgb()));

                    foreach (System.Windows.Point point in newSegment.OtherPoints)
                    {
                        position = LatLonAlt.CreateUsingDegrees(point.Y, point.X, altitude);
                        vec      = new Vector3F(position.GetVector());
                        vertices.Add(new Vertex.PositionColored(vec, lineColor.ToArgb()));
                    }

                    mesh = new MeshGraphicsObject <Vertex.PositionColored, ushort>(
                        GraphicsBufferUsage.Static,
                        GraphicsBufferUsage.Static,
                        vertices.Count,
                        vertices.Count,
                        true);

                    Material material = new Material {
                        AmbientColor = Color.White, DiffuseColor = Color.White, SpecularColor = Color.White
                    };
                    int id = mesh.Materials.Add(material);

                    mesh.Vertices.AddData(vertices.ToArray());

                    List <ushort> indexData = new List <ushort>();
                    for (int i = 0; i < newSegment.OtherPoints.Count + 1; i++)
                    {
                        indexData.Add((ushort)i);
                    }

                    mesh.Indices.AddData(indexData.ToArray(),
                                         PrimitiveType.LineStrip,
                                         id);

                    mesh.RenderState.Lighting.Enabled = false;
                    mesh.RenderState.Cull.Enabled     = false;

                    oldSegment = newSegment;
                    needUpdate = false;
                    host.NeedUpdate();
                }
            }

            base.Update(sceneState);
        }
Esempio n. 3
0
        private List <Vertex.PositionColored> BuildVertices(PointSet pointSet, double altitude)
        {
            List <Vertex.PositionColored> vertices = new List <Vertex.PositionColored>();

            double minT = 0, maxT = 0, k;

            if (!Double.IsNaN(pointSet.MaxValue))
            {
                minT = pointSet.MinValue;
                maxT = pointSet.MaxValue;
                k    = 1.0 / (maxT - minT);
            }
            else
            {
                k = Double.NaN;
            }

            for (int j = 0; j < pointSet.Data.Count; j++)
            {
                float     x        = (float)pointSet.Data[j].Longitude;
                float     y        = (float)pointSet.Data[j].Latitude;
                LatLonAlt position = LatLonAlt.CreateUsingDegrees(y + step, x + step, altitude);
                Vector3F  vec      = new Vector3F(position.GetVector());

                double hue;
                Color  color = Color.Red;
                System.Windows.Media.Color tempColor;

                if (!Double.IsNaN(k))
                {
                    hue       = 270 * ((maxT - (double)pointSet.Data[j].Value) * k);
                    tempColor = new HsbColor(hue, 1, 1, 0.8).ToArgb();
                    color     = Color.FromArgb(tempColor.A, tempColor.R, tempColor.G, tempColor.B);
                }

                vertices.Add(new Vertex.PositionColored(vec, color.ToArgb()));

                position = LatLonAlt.CreateUsingDegrees(y - step, x - step, altitude);
                vec      = new Vector3F(position.GetVector());
                vertices.Add(new Vertex.PositionColored(vec, color.ToArgb()));

                position = LatLonAlt.CreateUsingDegrees(y + step, x - step, altitude);
                vec      = new Vector3F(position.GetVector());
                vertices.Add(new Vertex.PositionColored(vec, color.ToArgb()));

                position = LatLonAlt.CreateUsingDegrees(y - step, x + step, altitude);
                vec      = new Vector3F(position.GetVector());
                vertices.Add(new Vertex.PositionColored(vec, color.ToArgb()));
            }

            return(vertices);
        }
        public void changeDisplayMode_Click()
        {
            modeChange = !modeChange;
            if (modeChange)
            {
                //DeactivateFlight();
                //ActivateFlight();

                int       index    = 0;
                LatLonAlt position = LatLonAlt.CreateUsingDegrees(airport.Latitude, airport.Longitude, 0);

                foreach (BunnyActor b in b_actors)
                {
                    b.changeMode    = !b.changeMode;
                    b.isStaticState = !b.isStaticState;
                    b.setLocation   = position;
                    //bactor.isStaticState = false;
                    b.setDestination = LatLonAlt.CreateUsingDegrees(
                        ((double)(a_flightlist[index].Destination.Latitude)),
                        ((double)(a_flightlist[index].Destination.Longitude)),
                        a_flightlist[index].Destination.Altitude);
                    b.Flight = a_flightlist[index].Identity;
                    index++;
                }
            }
            else
            {
                foreach (BunnyActor b in b_actors)
                {
                    InFlightAircraftStruct f = a_baseClass.getFlightStatus(b.Flight);
                    LatLonAlt loc            = LatLonAlt.CreateUsingDegrees(f.latitude, f.longitude, 0);
                    b.setLocation = loc;
                }
                foreach (BunnyActor b in b_actors)
                {
                    b.changeMode = !b.changeMode;
                }
            }
        }
Esempio n. 5
0
        private void AddDataSource(IDataSource2D <double> field, Guid guid)
        {
            List <PolylineGeometry> geometry = new List <PolylineGeometry>();
            List <VisualPushpin>    labels   = new List <VisualPushpin>();

            isolineBuilder.DataSource = field;
            IsolineCollection collection = isolineBuilder.Build();

            annotater.WayBeforeText = 20.0;

            foreach (LevelLine segment in collection.Lines)
            {
                List <Coordinate2D> points = new List <Coordinate2D>();
                points.Add(new Coordinate2D(segment.StartPoint.X, segment.StartPoint.Y));
                foreach (Point point in segment.OtherPoints)
                {
                    points.Add(new Coordinate2D(point.X, point.Y));
                }
                PolyInfo style = PolyInfo.DefaultPolyline;
                Color    color = palette.GetColor(segment.Value01);
                style.LineColor = System.Drawing.Color.FromArgb(color.A, color.R, color.G, color.B);

                geometry.Add(new PolylineGeometry(guid.ToString(), Guid.NewGuid().ToString(), new Polyline2(Wgs84CoordinateReferenceSystem.Instance,
                                                                                                            Coordinate2DCollection.CreateUnsafe(points.ToArray())), style));
            }

            foreach (IsolineTextLabel label in annotater.Annotate(collection, new Rect()))
            {
                labels.Add(new VisualPushpin(30, 30, label.Text, LatLonAlt.CreateUsingDegrees(label.Position.Y, label.Position.X, 0), this, Guid.NewGuid().ToString()));
            }

            layers.Add(new IsolinesLayer()
            {
                Geometry = geometry, IsVisible = true, Guid = guid, Labels = labels
            });
            AddLayerToHost(layers[layers.Count - 1]);
        }
Esempio n. 6
0
        public bool CheckIntersection(Microsoft.MapPoint.Rendering3D.LatLonAlt location)
        {
            bool hasIntersections = false;

            foreach (VisualPushpin pin in intersectedValues)
            {
                host.Geometry.RemoveGeometry(pin.Pushpin.LayerId, pin.Pushpin.Id);
            }
            intersectedValues.Clear();

            lock (trajectoriesLayers)
            {
                foreach (TrajectoriesLayer trajectoriesLayer in trajectoriesLayers)
                {
                    if (trajectoriesLayer.IsVisible)
                    {
                        for (int i = 0; i < trajectoriesLayer.DataSource.PointSet.Data.Count; i++)
                        {
                            LatLonAlt gridPos = LatLonAlt.CreateUsingDegrees(trajectoriesLayer.DataSource.PointSet.Data[i].Latitude, trajectoriesLayer.DataSource.PointSet.Data[i].Longitude, 0);
                            if (CheckEnvirons(gridPos, location, trajectoriesLayer.DataSource.Step))
                            {
                                if (!hasIntersections)
                                {
                                    hasIntersections = true;
                                }

                                intersectedValues.Add(new VisualPushpin(60, 60, trajectoriesLayer.DataSource.PointSet.Data[i].Value.ToString(), gridPos, null, Guid.NewGuid().ToString()));
                                break;
                            }
                        }
                    }
                }
            }


            return(hasIntersections);
        }
        public bool CheckIntersection(LatLonAlt location)
        {
            bool hasIntersections = false;

            foreach (VisualPushpin pin in intersectedValues)
            {
                host.Geometry.RemoveGeometry(pin.Pushpin.LayerId, pin.Pushpin.Id);
            }
            intersectedValues.Clear();

            lock (probesLayers)
            {
                foreach (ProbesLayer probesLayer in probesLayers)
                {
                    if (probesLayer.IsVisible)
                    {
                        if (probesLayer.DataSource.Field is IDataSource2D <double> )
                        {
                            //for warped grids
                            IDataSource2D <double> field = probesLayer.DataSource.Field as IDataSource2D <double>;
                            System.Windows.Point[,] grid = field.Grid;

                            Coordinate2D minCoordinate = new Coordinate2D(grid[0, 0].X, grid[0, 0].Y);
                            Coordinate2D maxCoordinate = new Coordinate2D(grid[field.Width - 1, field.Height - 1].X, grid[field.Width - 1, field.Height - 1].Y);

                            bool intersectionFound = false;
                            for (int j = 0; j < field.Height; j++)
                            {
                                for (int i = 0; i < field.Width; i++)
                                {
                                    if (grid[i, j].X < minCoordinate.X)
                                    {
                                        minCoordinate.X = grid[i, j].X;
                                    }

                                    if (grid[i, j].X > maxCoordinate.X)
                                    {
                                        maxCoordinate.X = grid[i, j].X;
                                    }

                                    if (grid[i, j].Y < minCoordinate.Y)
                                    {
                                        minCoordinate.Y = grid[i, j].Y;
                                    }

                                    if (grid[i, j].Y > maxCoordinate.Y)
                                    {
                                        maxCoordinate.Y = grid[i, j].Y;
                                    }
                                }
                            }

                            if (location.LatitudeDegrees > minCoordinate.Y && location.LongitudeDegrees > minCoordinate.X && location.LongitudeDegrees < maxCoordinate.X && location.LatitudeDegrees < maxCoordinate.Y)
                            {
                                for (int i = 0; i < field.Width; i++)
                                {
                                    for (int j = 0; j < field.Height; j++)
                                    {
                                        LatLonAlt gridPos = LatLonAlt.CreateUsingDegrees(field.Grid[i, j].Y, field.Grid[i, j].X, 0);
                                        if (CheckEnvirons(gridPos, location, probesLayer.DataSource.Step))
                                        {
                                            if (!hasIntersections)
                                            {
                                                hasIntersections = true;
                                            }

                                            intersectedValues.Add(new VisualPushpin(60, 60, field.Data[i, j].ToString(), gridPos, null, Guid.NewGuid().ToString()));
                                            intersectionFound = true;
                                            break;
                                        }
                                    }
                                    if (intersectionFound)
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                        else if (probesLayer.DataSource.Field is PointSet)
                        {
                            PointSet pointSet = probesLayer.DataSource.Field as PointSet;
                            if (probesLayer.IsVisible)
                            {
                                for (int i = 0; i < pointSet.Data.Count; i++)
                                {
                                    LatLonAlt gridPos = LatLonAlt.CreateUsingDegrees(pointSet.Data[i].Latitude, pointSet.Data[i].Longitude, 0);
                                    if (CheckEnvirons(gridPos, location, probesLayer.DataSource.Step))
                                    {
                                        if (!hasIntersections)
                                        {
                                            hasIntersections = true;
                                        }

                                        intersectedValues.Add(new VisualPushpin(60, 60, pointSet.Data[i].Value.ToString(), gridPos, null, Guid.NewGuid().ToString()));
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(hasIntersections);
        }
 /// <summary>
 /// Reset camera position
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void MenuButton_MouseLeftButtonUp_1(object sender, MouseButtonEventArgs e)
 {
     this.viewBase.Host.Navigation.FlyTo(LatLonAlt.CreateUsingDegrees(0, 0, 20000000), -90.0, 0.0);
 }
Esempio n. 9
0
        private void AddDataSource(IDataSource2D <double> field, Guid guid)
        {
            double minT, maxT;

            //if (colorMapControl.PaletteType == PaletteType.FromMaxMin)
            //{
            //    minT = colorMapControl.MinValue;
            //    maxT = colorMapControl.MaxValue;
            //}
            //else
            //{
            MathHelper.GetMaxMin(field.Data, out maxT, out minT);

            //colorMapControl.MinValue = minT;
            //colorMapControl.MaxValue = maxT;
            //}

            double k = 1.0 / (maxT - minT);

            List <Vertex.PositionColored> vertices = new List <Vertex.PositionColored>();

            double altitude = layerHelper.GetNewAltitude();

            for (int i = 0; i < field.Width; i++)
            {
                for (int j = 0; j < field.Height; j++)
                {
                    float     x        = (float)field.Grid[i, j].X;
                    float     y        = (float)field.Grid[i, j].Y;
                    LatLonAlt position = LatLonAlt.CreateUsingDegrees(y, x, altitude);
                    Vector3F  vec      = new Vector3F(position.GetVector());
                    System.Windows.Media.Color color = palette.GetColor((field.Data[i, j] - minT) * k);
                    vertices.Add(new Vertex.PositionColored(vec, Color.FromArgb(opacity, color.R, color.G, color.B).ToArgb()));
                }
            }

            MeshGraphicsObject <Vertex.PositionColored, ushort> mesh = new MeshGraphicsObject <Vertex.PositionColored, ushort>(
                GraphicsBufferUsage.Static,
                GraphicsBufferUsage.Static,
                vertices.Count,
                vertices.Count * 6,
                true);

            Material material = new Material {
                AmbientColor = Color.White, DiffuseColor = Color.White, SpecularColor = Color.White
            };
            int id = mesh.Materials.Add(material);

            mesh.Vertices.AddData(vertices.ToArray());

            for (int i = 0; i < field.Width - 1; i++)
            {
                for (int j = 0; j < field.Height - 1; j++)
                {
                    mesh.Indices.AddData(

                        (ushort)(i * field.Height + j),
                        (ushort)(i * field.Height + j + 1),

                        (ushort)((i + 1) * field.Height + j),

                        PrimitiveType.TriangleList, id);

                    mesh.Indices.AddData(
                        (ushort)(i * field.Height + j + 1),
                        (ushort)((i + 1) * field.Height + j + 1),
                        (ushort)((i + 1) * field.Height + j),

                        PrimitiveType.TriangleList, id);
                }
            }


            mesh.RenderState.Lighting.Enabled       = false;
            mesh.RenderState.Alpha.Enabled          = true;
            mesh.RenderState.Alpha.AlphaTestEnable  = true;
            mesh.RenderState.Alpha.SourceBlend      = Blend.BothInvSourceAlpha;
            mesh.RenderState.Alpha.DestinationBlend = Blend.BothInvSourceAlpha;
            mesh.RenderState.Cull.Enabled           = false;

            meshLayers.Add(new MeshLayer {
                LayerAltitude = altitude, Mesh = mesh, Guid = guid, IsVisible = true, ScalarField = field
            });
        }
Esempio n. 10
0
        private void AddDataSource(IDataSource2D <double> field, Guid guid)
        {
            // Get data and min/max.
            double[,] data = field.Data;
            double minT, maxT;

            MathHelper.GetMaxMin(data, out maxT, out minT);


            double k = 1.0 / (maxT - minT);


            double altitude = layerAltitude;

            //TODO: Perform right calculation depending on grid
            step = 0.3;

            List <Vertex.PositionColored> vertices = new List <Vertex.PositionColored>();

            for (int i = 0; i < field.Width; i++)
            {
                for (int j = 0; j < field.Height; j++)
                {
                    float     x        = (float)field.Grid[i, j].X;
                    float     y        = (float)field.Grid[i, j].Y;
                    LatLonAlt position = LatLonAlt.CreateUsingDegrees(y + step, x + step, altitude);
                    Vector3F  vec      = new Vector3F(position.GetVector());
                    vertices.Add(new Vertex.PositionColored(vec, Color.Red.ToArgb()));

                    position = LatLonAlt.CreateUsingDegrees(y - step, x - step, altitude);
                    vec      = new Vector3F(position.GetVector());
                    vertices.Add(new Vertex.PositionColored(vec, Color.Red.ToArgb()));

                    position = LatLonAlt.CreateUsingDegrees(y + step, x - step, altitude);
                    vec      = new Vector3F(position.GetVector());
                    vertices.Add(new Vertex.PositionColored(vec, Color.Red.ToArgb()));

                    position = LatLonAlt.CreateUsingDegrees(y - step, x + step, altitude);
                    vec      = new Vector3F(position.GetVector());
                    vertices.Add(new Vertex.PositionColored(vec, Color.Red.ToArgb()));
                }
            }



            MeshGraphicsObject <Vertex.PositionColored, ushort> mesh = new MeshGraphicsObject <Vertex.PositionColored, ushort>(
                GraphicsBufferUsage.Static,
                GraphicsBufferUsage.Static,
                vertices.Count,
                vertices.Count,
                true);

            Material material = new Material {
                AmbientColor = Color.White, DiffuseColor = Color.White, SpecularColor = Color.White
            };
            int id = mesh.Materials.Add(material);

            mesh.Vertices.AddData(vertices.ToArray());

            List <ushort> indexData = new List <ushort>();

            for (int i = 0; i < field.Width; i++)
            {
                for (int j = 0; j < field.Height; j++)
                {
                    indexData.Add((ushort)((i * field.Height + j) * 4));
                    indexData.Add((ushort)((i * field.Height + j) * 4 + 1));
                    indexData.Add((ushort)((i * field.Height + j) * 4 + 2));
                    indexData.Add((ushort)((i * field.Height + j) * 4 + 3));
                }
            }

            mesh.Indices.AddData(indexData.ToArray(),
                                 PrimitiveType.LineList,
                                 id);

            mesh.RenderState.Lighting.Enabled = false;
            mesh.RenderState.Cull.Enabled     = false;

            meshLayers.Add(new MeshLayer {
                LayerAltitude = altitude, Mesh = mesh, Guid = guid, IsVisible = true, ScalarField = field, Step = step
            });
        }