Ejemplo n.º 1
0
        /// <summary>
        /// Saves the current view to an xml file, 
        /// this requires that worldWindow was created in the same thread as the caller
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="notes"></param>
        private void SaveCurrentView(string fileName, string picFileName, string notes)
        {
            DappleView view = new DappleView();

            // blue marble
            RenderableObject roBMNG = GetBMNG();
            if (roBMNG != null)
                view.View.Addshowbluemarble(new SchemaBoolean(roBMNG.IsOn));

            WorldWind.Camera.MomentumCamera camera = c_oWorldWindow.DrawArgs.WorldCamera as WorldWind.Camera.MomentumCamera;

            //stop the camera
            camera.SetPosition(camera.Latitude.Degrees, camera.Longitude.Degrees, camera.Heading.Degrees, camera.Altitude, camera.Tilt.Degrees);

            //store the servers
            m_oModel.SaveToView(view);

            // store the current layers
            if (c_oLayerList.AllLayers.Count > 0)
            {
                activelayersType lyrs = view.View.Newactivelayers();
                foreach (LayerBuilder container in c_oLayerList.AllLayers)
                {
                    if (!container.Temporary)
                    {
                        datasetType dataset = lyrs.Newdataset();
                        dataset.Addname(new SchemaString(container.Title));
                        opacityType op = dataset.Newopacity();
                        op.Value = container.Opacity;
                        dataset.Addopacity(op);
                        dataset.Adduri(new SchemaString(container.GetURI()));
                        dataset.Addinvisible(new SchemaBoolean(!container.Visible));
                        lyrs.Adddataset(dataset);
                    }
                }
                view.View.Addactivelayers(lyrs);
            }

            // store the camera information
            cameraorientationType cameraorient = view.View.Newcameraorientation();
            cameraorient.Addlat(new SchemaDouble(camera.Latitude.Degrees));
            cameraorient.Addlon(new SchemaDouble(camera.Longitude.Degrees));
            cameraorient.Addaltitude(new SchemaDouble(camera.Altitude));
            cameraorient.Addheading(new SchemaDouble(camera.Heading.Degrees));
            cameraorient.Addtilt(new SchemaDouble(camera.Tilt.Degrees));
            view.View.Addcameraorientation(cameraorient);

            if (notes.Length > 0)
                view.View.Addnotes(new SchemaString(notes));

            // Save screen capture (The regular WorldWind method crashes some systems, use interop)
            //this.worldWindow.SaveScreenshot(picFileName);
            //this.worldWindow.Render();

            using (Image img = TakeSnapshot(c_oWorldWindow.Handle))
                img.Save(picFileName, System.Drawing.Imaging.ImageFormat.Jpeg);

            FileStream fs = new FileStream(picFileName, FileMode.Open);
            BinaryReader br = new BinaryReader(fs);
            byte[] buffer = new byte[fs.Length];
            br.Read(buffer, 0, Convert.ToInt32(fs.Length));
            br.Close();
            fs.Close();
            view.View.Addpreview(new SchemaBase64Binary(buffer));

            view.Save(fileName);
        }