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"); } } } }
/// <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)); } } }
/// <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); }
/// <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); } }
/// <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()); } } }
/// <summary> /// 初始化一个LayerMenuItem2实例 /// </summary> /// <param name="parent">当前菜单项所属到父图层菜单管理对象</param> /// <param name="renderableObject">与当前菜单项相关联到可渲染对象</param> public LayerMenuItem(LayerManagerMenu parent, RenderableObject renderableObject) { m_renderableObject = renderableObject; m_parent = parent; }
internal BlueMarbleBuilder(RenderableObject hObject) : base("Blue Marble", MainForm.WorldWindowSingleton, null) { m_hObject = hObject; }
public override void Update(GameTime gT, RenderableObject obj) { obj.Y += 0.1f; base.Update(gT, obj); }
public void AddRenderableObject(RenderableObject pc) { this.glControl.GLrender.AddRenderableObject(pc); }
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); }
void m_imgLayer_LoadFailed(RenderableObject oRO, string message) { m_blnFailed = true; m_imgLayer.IsOn = false; SendBuilderChanged(BuilderChangeType.LoadedASyncFailed); }
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); } }