Beispiel #1
0
        private void savePointCloudToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (this.OglControl.GLrender.RenderableObjects.Count > 0)
            {
                for (int i = 0; i < this.OglControl.GLrender.RenderableObjects.Count; i++)
                {
                    RenderableObject o = null;
                    o = this.OglControl.GLrender.RenderableObjects[i];

                    if (o != null)
                    {
                        PointCloud pc = o.PointCloud;
                        pc.ToObjFile(pc.Path, IOUtils.ExtractFileNameWithoutExtension(pc.FileNameLong) + "_new.obj");
                    }
                }
            }
        }
Beispiel #2
0
 /// <summary>
 /// 递归获取所有可渲染对象名称
 /// </summary>
 /// <param name="ro">可渲染对象</param>
 /// <param name="name">对象名称</param>
 /// <returns>返回所有可渲染对象名称</returns>
 private string getFullRenderableObjectName(RenderableObject ro, string name)
 {
     if (ro.ParentList == null)
     {
         return("/" + name);
     }
     else
     {
         if (name == null)
         {
             return(getFullRenderableObjectName(ro.ParentList, ro.Name));
         }
         else
         {
             return(getFullRenderableObjectName(ro.ParentList, ro.Name + "/" + name));
         }
     }
 }
Beispiel #3
0
        /// <summary>
        /// 存储一些列的对象
        /// </summary>
        /// <param name="ro">存储的对象</param>
        /// <param name="file">存储位置</param>
        public static void SaveAs(RenderableObject ro, string file)
        {
            XmlDocument worldDoc = new XmlDocument();

            worldDoc.AppendChild((worldDoc.CreateXmlDeclaration("1.0", "utf-8", null)));
            if (ro is RenderableObjectList)
            {
                //worldDoc.AppendChild(saveLayer((RenderableObjectList)ro, worldDoc));
                worldDoc.AppendChild(ro.ToXml(worldDoc));
            }
            else
            {
                RenderableObjectList rol = new RenderableObjectList("Saved");
                rol.Add(ro);
                worldDoc.AppendChild(saveLayer(rol, worldDoc));
            }

            worldDoc.Save(file);
        }
Beispiel #4
0
        /// <summary>
        /// 绘制地球对象上的图层
        /// </summary>
        /// <param name="renderable"></param>
        /// <param name="priority"></param>
        /// <param name="drawArgs"></param>
        private void Render(RenderableObject renderable, RenderPriority priority, DrawArgs drawArgs)
        {
            //若是绘制星星,则返回,因为星星图层已经绘制过了
            //if (!renderable.IsOn || (renderable.Name != null && renderable.Name.Equals("Starfield")))
            if (!renderable.IsOn || (renderable.Name != null && renderable.Name.Equals("星空")))
            {
                return;
            }

            //绘制Icon图层
            if (priority == RenderPriority.Icons && renderable is Icons)
            {
                renderable.Render(drawArgs);
            }
            else if (priority == RenderPriority.GCPs && renderable is GCPs)
            {
                renderable.Render(drawArgs);
            }
            //绘制RenderableObjectList类型图层下的所有子图层
            else if (renderable is RenderableObjectList)
            {
                RenderableObjectList rol = (RenderableObjectList)renderable;
                for (int i = 0; i < rol.ChildObjects.Count; i++)
                {
                    Render((RenderableObject)rol.ChildObjects[i], priority, drawArgs);
                }
            }
            //绘制RenderPriority.SurfaceImages类型的图层
            else if (priority == RenderPriority.TerrainMappedImages)
            {
                if (renderable.RenderPriority == RenderPriority.SurfaceImages || renderable.RenderPriority == RenderPriority.TerrainMappedImages)
                {
                    renderable.Render(drawArgs);
                }
            }
            //绘制RenderPriority.LinePaths和RenderPriority.AtmosphericImages类型的图层
            else if (renderable.RenderPriority == priority)
            {
                renderable.Render(drawArgs);
            }
        }
Beispiel #5
0
 /// <summary>
 /// 2.绘制星星
 /// </summary>
 /// <param name="drawArgs"></param>
 /// <param name="renderable"></param>
 private void RenderStars(DrawArgs drawArgs, RenderableObject renderable)
 {
     if (renderable is RenderableObjectList)
     {
         RenderableObjectList rol = (RenderableObjectList)renderable;
         for (int i = 0; i < rol.ChildObjects.Count; i++)
         {
             RenderStars(drawArgs, (RenderableObject)rol.ChildObjects[i]);
         }
     }
     //else if (renderable.Name != null && renderable.Name.Equals("Starfield"))
     else if (renderable.Name != null && renderable.Name.Equals("星空"))
     {
         try
         {
             renderable.Render(drawArgs);
         }
         catch (Exception ex)
         {
             throw new Exception("绘制星星失败!\n" + ex.ToString());
         }
     }
 }
Beispiel #6
0
 /// <summary>
 /// 初始化一个LayerMenuItem2实例
 /// </summary>
 /// <param name="parent">当前菜单项所属到父图层菜单管理对象</param>
 /// <param name="renderableObject">与当前菜单项相关联到可渲染对象</param>
 public LayerMenuItem(LayerManagerMenu parent, RenderableObject renderableObject)
 {
     m_renderableObject = renderableObject;
     m_parent           = parent;
 }
Beispiel #7
0
 internal BlueMarbleBuilder(RenderableObject hObject) : base("Blue Marble", MainForm.WorldWindowSingleton, null)
 {
     m_hObject = hObject;
 }
Beispiel #8
0
 public override void Update(GameTime gT, RenderableObject obj)
 {
     obj.Y += 0.1f;
     base.Update(gT, obj);
 }
Beispiel #9
0
 public void AddRenderableObject(RenderableObject pc)
 {
     this.glControl.GLrender.AddRenderableObject(pc);
 }
Beispiel #10
0
 public void ReplaceRenderableObject(RenderableObject pc)
 {
     this.glControl.GLrender.ReplaceRenderableObject(pc, false);
 }
        private void LoadLayer(object stateInfo)
        {
#if !DEBUG
            try
            {
#endif
            lock (m_lockObject)
            {
                RenderableObject layer = null;
                try
                {
                    layer = GetLayer();
                }
                catch
                {
                    m_blnIsLoading = false;
                    m_blnFailed    = true;
                }
                if (!m_blnFailed)
                {
                    layer.Name = this.RenderableObjectName;
                    m_oWorldWindow.CurrentWorld.RenderableObjects.Remove(this.RenderableObjectName);
                    if (m_blnIsLoading)
                    {
                        m_oWorldWindow.CurrentWorld.RenderableObjects.Add(layer);
                        m_blnIsAdded = true;
                    }
                    m_blnIsLoading = false;
                }
            }
            if (!m_blnFailed)
            {
                if (m_bAsyncLoaded)
                {
                    SendBuilderChanged(BuilderChangeType.LoadedASync);
                }
                else
                {
                    SendBuilderChanged(BuilderChangeType.LoadedSync);
                }
            }
            else
            {
                if (m_bAsyncLoaded)
                {
                    SendBuilderChanged(BuilderChangeType.LoadedASyncFailed);
                }
                else
                {
                    SendBuilderChanged(BuilderChangeType.LoadedSyncFailed);
                }
            }
#if !DEBUG
        }

        catch (Exception e)
        {
            Utility.AbortUtility.Abort(e, Thread.CurrentThread);
        }
#endif
        }
        internal bool exportToGeoTiff(String szFilename)
        {
            if (!GeographicBoundingBox.FromQuad(MainForm.WorldWindowSingleton.CurrentAreaOfInterest).Intersects(this.Extents))
            {
                return(false);
            }
            String szTempMetaFilename = String.Empty;
            String szTempImageFile    = String.Empty;

            szFilename = Path.ChangeExtension(szFilename, ".tif");


            RenderableObject oRObj = GetLayer();

            RenderableObject.ExportInfo oExportInfo = new RenderableObject.ExportInfo();
            oRObj.InitExportInfo(MainForm.WorldWindowSingleton.DrawArgs, oExportInfo);

            if (!(oExportInfo.iPixelsX > 0 && oExportInfo.iPixelsY > 0))
            {
                return(false);
            }

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

            // Minimize the estimated extents to what is available
            GeographicBoundingBox oViewedArea = GeographicBoundingBox.FromQuad(MainForm.WorldWindowSingleton.CurrentAreaOfInterest);

            oViewedArea.East  = Math.Min(oViewedArea.East, oExportInfo.dMaxLon);
            oViewedArea.North = Math.Min(oViewedArea.North, oExportInfo.dMaxLat);
            oViewedArea.West  = Math.Max(oViewedArea.West, oExportInfo.dMinLon);
            oViewedArea.South = Math.Max(oViewedArea.South, oExportInfo.dMinLat);

            //Calculate the image dimensions
            int iImageWidth  = (int)(oExportInfo.iPixelsX * (oViewedArea.East - oViewedArea.West) / (oExportInfo.dMaxLon - oExportInfo.dMinLon));
            int iImageHeight = (int)(oExportInfo.iPixelsY * (oViewedArea.North - oViewedArea.South) / (oExportInfo.dMaxLat - oExportInfo.dMinLat));

            if (iImageWidth < 0 || iImageHeight < 0)
            {
                return(false);
            }

            try
            {
                // Export image
                using (System.Drawing.Bitmap oExportedImage = new System.Drawing.Bitmap(iImageWidth, iImageHeight))
                {
                    using (System.Drawing.Graphics oEIGraphics = System.Drawing.Graphics.FromImage(oExportedImage))
                    {
                        oExportInfo.dMaxLat  = oViewedArea.North;
                        oExportInfo.dMaxLon  = oViewedArea.East;
                        oExportInfo.dMinLat  = oViewedArea.South;
                        oExportInfo.dMinLon  = oViewedArea.West;
                        oExportInfo.gr       = oEIGraphics;
                        oExportInfo.iPixelsX = iImageWidth;
                        oExportInfo.iPixelsY = iImageHeight;

                        if (MainForm.Client == Dapple.Extract.Options.Client.ClientType.ArcMAP)
                        {
                            oEIGraphics.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(254, 254, 254)), new System.Drawing.Rectangle(0, 0, iImageWidth, iImageHeight));
                        }

                        oRObj.ExportProcess(MainForm.WorldWindowSingleton.DrawArgs, oExportInfo);
                    }

                    szTempMetaFilename = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
                    using (StreamWriter sw = new StreamWriter(szTempMetaFilename, false))
                    {
                        sw.WriteLine("Geotiff_Information:");
                        sw.WriteLine("Version: 1");
                        sw.WriteLine("Key_Revision: 1.0");
                        sw.WriteLine("Tagged_Information:");
                        sw.WriteLine("ModelTiepointTag (2,3):");
                        sw.WriteLine("0 0 0");
                        sw.WriteLine(oViewedArea.West.ToString(CultureInfo.InvariantCulture) + " " + oViewedArea.North.ToString(CultureInfo.InvariantCulture) + " 0");
                        sw.WriteLine("ModelPixelScaleTag (1,3):");
                        sw.WriteLine(((oViewedArea.East - oViewedArea.West) / (double)iImageWidth).ToString(CultureInfo.InvariantCulture) + " " + ((oViewedArea.North - oViewedArea.South) / (double)iImageHeight).ToString(CultureInfo.InvariantCulture) + " 0");
                        sw.WriteLine("End_Of_Tags.");
                        sw.WriteLine("Keyed_Information:");
                        sw.WriteLine("GTModelTypeGeoKey (Short,1): ModelTypeGeographic");
                        sw.WriteLine("GTRasterTypeGeoKey (Short,1): RasterPixelIsArea");
                        sw.WriteLine("GeogAngularUnitsGeoKey (Short,1): Angular_Degree");
                        sw.WriteLine("GeographicTypeGeoKey (Short,1): GCS_WGS_84");
                        sw.WriteLine("End_Of_Keys.");
                        sw.WriteLine("End_Of_Geotiff.");
                    }

                    szTempImageFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
                    oExportedImage.Save(szTempImageFile, System.Drawing.Imaging.ImageFormat.Tiff);

                    ProcessStartInfo psi = new ProcessStartInfo(Path.GetDirectoryName(Application.ExecutablePath) + @"\System\geotifcp.exe");
                    psi.UseShellExecute = false;
                    psi.CreateNoWindow  = true;
                    psi.Arguments       = "-g \"" + szTempMetaFilename + "\" \"" + szTempImageFile + "\" \"" + szFilename + "\"";

                    using (Process p = Process.Start(psi))
                        p.WaitForExit();

                    if (File.Exists(szFilename + ".gi"))
                    {
                        File.Delete(szFilename + ".gi");
                    }
                }
            }
            catch (ArgumentException ex)
            {
                throw new ArgumentException(
                          String.Format(CultureInfo.InvariantCulture, "An error occurred extracting data layer [{0}]: Viewed Area={1}, Extract area={2}, Extract image size={3}x{4}",
                                        this.ToString(),
                                        oViewedArea.ToString(),
                                        GeographicBoundingBox.FromQuad(MainForm.WorldWindowSingleton.CurrentAreaOfInterest),
                                        iImageWidth,
                                        iImageHeight),
                          ex);
            }
            finally
            {
                if (File.Exists(szTempMetaFilename))
                {
                    File.Delete(szTempMetaFilename);
                }
                if (File.Exists(szTempImageFile))
                {
                    File.Delete(szTempImageFile);
                }
            }

            return(true);
        }
Beispiel #13
0
 void m_imgLayer_LoadFailed(RenderableObject oRO, string message)
 {
     m_blnFailed     = true;
     m_imgLayer.IsOn = false;
     SendBuilderChanged(BuilderChangeType.LoadedASyncFailed);
 }
Beispiel #14
0
        private static RenderableObject Construct(String strRelativeDirectory, KMLObject oSource, World oWorld, GeographicBoundingBox oBounds, ProjectedVectorRenderer oPVR, Icons oIcons)
        {
            if (oSource is KMLContainer)
            {
                KMLContainer            oCastSource = oSource as KMLContainer;
                KMLRenderableObjectList result      = new KMLRenderableObjectList(oCastSource.Name);

                if (oPVR == null)
                {
                    oPVR = new ProjectedVectorRenderer("Polygons and LineStrings", oWorld);
                    result.Add(oPVR);
                }
                if (oIcons == null)
                {
                    oIcons = new Icons("Icons");
                    result.Add(oIcons);
                }

                for (int count = 0; count < oCastSource.Count; count++)
                {
                    if (oCastSource[count].Visibility == true)
                    {
                        RenderableObject oLayer = Construct(strRelativeDirectory, oCastSource[count], oWorld, oBounds, oPVR, oIcons);
                        if (oLayer != null)
                        {
                            result.Add(oLayer);
                        }
                    }
                }
                return(result);
            }
            else if (oSource is KMLPlacemark)
            {
                KMLPlacemark oCastSource = oSource as KMLPlacemark;
                return(Construct(strRelativeDirectory, oCastSource.Geometry, oWorld, oBounds, oPVR, oIcons));
            }
            else if (oSource is KMLMultiGeometry)
            {
                KMLMultiGeometry        oCastSource = oSource as KMLMultiGeometry;
                KMLRenderableObjectList result      = new KMLRenderableObjectList("MultiGeometry");
                for (int count = 0; count < oCastSource.Count; count++)
                {
                    RenderableObject oLayer = Construct(strRelativeDirectory, oCastSource[count], oWorld, oBounds, oPVR, oIcons);
                    if (oLayer != null)
                    {
                        result.Add(oLayer);
                    }
                }
                return(result);
            }
            else if (oSource is KMLPoint)
            {
                KMLPoint oCastSource = oSource as KMLPoint;

                KMLIcon result = new KMLIcon(oCastSource.Owner.Name, oCastSource.Coordinates.Latitude, oCastSource.Coordinates.Longitude, oCastSource.Coordinates.Altitude);
                result.DrawGroundStick = oCastSource.Extrude;
                result.Rotation        = WorldWind.Angle.FromDegrees(oCastSource.Style.NormalStyle.IconStyle.Heading);
                result.IsRotated       = oCastSource.Style.NormalStyle.IconStyle.Heading != 0.0f;
                result.NormalColor     = oCastSource.Style.NormalStyle.LabelStyle.Color;
                result.HotColor        = oCastSource.Style.HighlightStyle.LabelStyle.Color;
                oIcons.Add(result);

                oBounds.Union(oCastSource.Coordinates.Longitude, oCastSource.Coordinates.Latitude, oCastSource.Coordinates.Altitude);
                return(null);
            }
            else if (oSource is KMLPolygon)
            {
                KMLPolygon oCastSource = oSource as KMLPolygon;

                Polygon oTool = new Polygon();
                oTool.outerBoundary   = new WorldWind.LinearRing(GetPoints(oCastSource.OuterBoundary));
                oTool.innerBoundaries = GetInnerBoundaries(oCastSource);
                oTool.PolgonColor     = oCastSource.Style.NormalStyle.PolyStyle.Color;
                oTool.Fill            = oCastSource.Style.NormalStyle.PolyStyle.Fill;
                oTool.LineWidth       = oCastSource.Style.NormalStyle.LineStyle.Width;
                oTool.Outline         = oCastSource.Style.NormalStyle.PolyStyle.Outline;
                oTool.OutlineColor    = oCastSource.Style.NormalStyle.LineStyle.Color;
                oPVR.Add(oTool);

                oBounds.Union(oTool.GetGeographicBoundingBox());
                return(null);
            }
            else if (oSource is KMLLineString)
            {
                KMLLineString oCastSource = oSource as KMLLineString;

                LineString oTool = new LineString();
                oTool.Coordinates = GetPoints(oCastSource);
                oTool.Color       = oCastSource.Style.NormalStyle.LineStyle.Color;
                oTool.LineWidth   = oCastSource.Style.NormalStyle.LineStyle.Width;
                oPVR.Add(oTool);

                oBounds.Union(oTool.GetGeographicBoundingBox());
                return(null);
            }
            else if (oSource is KMLGroundOverlay)
            {
                KMLGroundOverlay oCastSource = oSource as KMLGroundOverlay;

                KMLGroundOverlayRenderable result = new KMLGroundOverlayRenderable(oCastSource, strRelativeDirectory);
                oBounds.Union(new GeographicBoundingBox(oCastSource.LatLonBox.North, oCastSource.LatLonBox.South, oCastSource.LatLonBox.West, oCastSource.LatLonBox.East));
                return(result);
            }
            else
            {
                return(null);
            }
        }