public void Output(SuperMap.UI.Tracked3DEventArgs e1) { try { //绘制量算面对象 GeoRegion3D geoRegion3D = e1.Geometry as GeoRegion3D; //得到面对象的外接矩形,作为查询区域 m_rec = geoRegion3D.Bounds; //设置数据集容量,避免空间查询出现过多对象 mUseData.OutWaterNetWork.Tolerance.NodeSnap = 0.0001; mUseData.SupplyWaterNetWork.Tolerance.NodeSnap = 0.0001; mGeoStyle3D = new GeoStyle3D(); mGeoStyle3D.MarkerColor = Color.FromArgb(255, 0, 255); mGeoStyle3D.LineColor = Color.FromArgb(255, 255, 0); mGeoStyle3D.LineWidth = 1; mGeoStyle3D.FillForeColor = Color.FromArgb(100, 250, 250, 50); // mGeoStyle3D.AltitudeMode = AltitudeMode.ClampToGround; geoRegion3D.Style3D = mGeoStyle3D.Clone(); geoRegion3D.Style3D.AltitudeMode = AltitudeMode.Absolute; geoRegion3D.Style3D.FillForeColor = Color.FromArgb(50, 255, 128, 64); TrackingLayer3D trackinglayer = mSceneControl.Scene.TrackingLayer; trackinglayer.IsEditable = true; trackinglayer.IsVisible = true; trackinglayer.Add(geoRegion3D, "geoRegion3D"); RegionID = trackinglayer.IndexOf("geoRegion3D"); mSceneControl.Action = Action3D.Pan2; } catch (System.Exception ex) { Trace.WriteLine(ex.Message); } }
//鼠标移动事件 void m_sceneControl_Tracking(object sender, Tracking3DEventArgs e) { if (m_sceneControl.Action == Action3D.CreateRectangle) { if (!m_bIsShowSlopInfo) { if (m_slope != null) { GeoRegion3D geoRegion3D = e.Geometry as GeoRegion3D; if (geoRegion3D.PartCount > 0) { Rectangle2D rect = m_slope.CoverageArea; rect = geoRegion3D.Bounds; m_slope.CoverageArea = rect; } } } //显示坡度坡向信息 else { m_timer.Enabled = true; m_timer.Interval = 2000; m_timer.Tick -= new EventHandler(timer_tick); m_timer.Tick += new EventHandler(timer_tick); m_point3D = new Point3D(e.X, e.Y, e.Z); m_timer.Start(); } } }
//鼠标移动事件 void m_sceneControl_Tracking(object sender, Tracking3DEventArgs e) { if (m_sceneControl.Action == Action3D.CreatePolygon) { m_sceneControl.Scene.TrackingLayer.Clear(); Geometry3D geometry = e.Geometry as Geometry3D; if (geometry is GeoLine3D) { m_sceneControl.Scene.TrackingLayer.Add(geometry, "line"); return; } else if (geometry is GeoRegion3D) { GeoRegion3D geoRegion3D = geometry as GeoRegion3D; if (geoRegion3D[0].Count < 3) { return; } GeoStyle3D style3D = new GeoStyle3D(); style3D.LineColor = Color.Yellow; style3D.AltitudeMode = AltitudeMode.Absolute; geoRegion3D.Style3D = style3D; m_sceneControl.Scene.TrackingLayer.Add(geoRegion3D, "region"); } } }
//鼠标移动事件 void m_sceneControl_Tracking(object sender, Tracking3DEventArgs e) { m_sceneControl.Scene.TrackingLayer.Clear(); if (m_sceneControl.Action == Action3D.CreatePolygon) { Geometry3D geometry = e.Geometry as Geometry3D; if (geometry is GeoLine3D) { m_style3D.LineColor = m_limitColor; geometry.Style3D = m_style3D; m_sceneControl.Scene.TrackingLayer.Add(geometry, "line"); return; } else if (geometry is GeoRegion3D) { GeoRegion3D geoRegion3D = geometry as GeoRegion3D; if (geoRegion3D[0].Count < 3) { return; } m_style3D.FillForeColor = m_limitColor; geoRegion3D.Style3D = m_style3D; m_sceneControl.Scene.TrackingLayer.Add(geoRegion3D, "region"); } } }
//鼠标右键事件,结束分析操作 void m_sceneControl_Tracked(object sender, Tracked3DEventArgs e) { if (m_sceneControl.Action == Action3D.CreatePolygon) { GeoRegion3D region3D = e.Geometry as GeoRegion3D; if (region3D != null) { m_style3D.FillForeColor = m_limitColor; region3D.Style3D = m_style3D; int i = m_skyline.AddLimitBody(region3D); } } }
//鼠标移动事件 void m_sceneControl_Tracking(object sender, Tracking3DEventArgs e) { if (m_sceneControl.Action == Action3D.CreateRectangle) { if (m_contour != null) { GeoRegion3D geoRegion3D = e.Geometry as GeoRegion3D; if (geoRegion3D.PartCount > 0) { Rectangle2D rect = m_contour.CoverageArea; rect = geoRegion3D.Bounds; m_contour.CoverageArea = rect; } } } }
public void OutputMeasureArea(SuperMap.UI.Tracking3DEventArgs e1) { try { Point location = mSceneControl.PointToClient(Cursor.Position); mTempPoint = new Point3D(e1.X, e1.Y, e1.Z); mPoint3Ds.Add(mTempPoint); GeoRegion3D geoRegion3D = null; if (mPoint3Ds.Count >= 3) { geoRegion3D = new GeoRegion3D(mPoint3Ds); mGeoStyle3DTemp = new GeoStyle3D(); mGeoStyle3DTemp.MarkerColor = Color.FromArgb(255, 0, 0); mGeoStyle3DTemp.LineColor = Color.FromArgb(0, 255, 0); mGeoStyle3DTemp.LineWidth = 1; mGeoStyle3DTemp.FillForeColor = Color.FromArgb(180, Color.Violet); mGeoStyle3DTemp.AltitudeMode = AltitudeMode.RelativeToGround; geoRegion3D.Style3D = mGeoStyle3DTemp.Clone(); location.Offset(30, 30); if (location.X > mSceneControl.Bounds.Width / 4 * 3) { location.X = mSceneControl.Bounds.Width / 4 * 3; } if (location.Y > mSceneControl.Bounds.Height) { location.Y = location.Y - 60; } int index = mSceneControl.Scene.TrackingLayer.IndexOf(mMessageTrackingTag); if (index >= 0) { mSceneControl.Scene.TrackingLayer.Remove(index); } } } catch (System.Exception ex) { Trace.WriteLine(ex.Message); } }
//鼠标右键事件 void m_sceneControl_Tracked(object sender, Tracked3DEventArgs e) { if (m_sceneControl.Action == Action3D.CreatePolygon) { GeoRegion3D region3D = e.Geometry as GeoRegion3D; if (region3D != null) { Point3Ds point3Ds = region3D[0]; if (point3Ds.Count < 3) { return; } else { Point3D pt1 = point3Ds[0]; Point3D pt2 = point3Ds[1]; Point3D pt3 = point3Ds[2]; m_layer3D.SetCustomClipPlane(pt1, pt2, pt3); } } m_sceneControl.Action = m_oldAction; m_sceneControl.Scene.TrackingLayer.Clear(); } }
/// <summary> /// 结束空间查询 /// </summary> private void EndSpatialQuery() { string actionStr = SmObjectLocator.getInstance().GlobeObject.Action.ToString().ToLower(); switch (actionStr) { case "createpoint": if (this.TempPoints3Ds.Count == 1) { GeoPoint3D geoPoint3D = new GeoPoint3D(TempPoints3Ds[0]); geoPoint3D.Style3D = GetGeoStyle3D(); SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoPoint3D, spatialTag); } break; //此时划线就是为了画圆 case "createline": int index = SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.IndexOf(spatialTempTag); if (index >= 0) { SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Remove(index); } if (this.TempPoints3Ds.Count == 2) { Point3D point3D = new Point3D(TempPoints3Ds[0].X, TempPoints3Ds[0].Y, TempPoints3Ds[0].Z); double radius = GetLengthBy2Point(TempPoints3Ds[0], TempPoints3Ds[1]); GeoCircle3D geoCircle3D = new GeoCircle3D(point3D, radius); GeoModel geoModel = geoCircle3D.GetGeoModel(72, 72); geoModel.Style3D = GetGeoStyle3D(); SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoModel, spatialTag); } break; case "createpolygon": if (this.TempPoints3Ds.Count > 2) { GeoRegion3D geoRegion3D = new GeoRegion3D(TempPoints3Ds); geoRegion3D.Style3D = GetGeoStyle3D(); SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoRegion3D, spatialTag); } else { int index1 = SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.IndexOf(spatialTempTag); if (index1 >= 0) { SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Remove(index1); } } break; default: break; } Point3Ds queryPoints = TempPoints3Ds.Clone(); TempPoints3Ds.Clear(); removeListener(); if (ms != null) { ms.ExecuteQuery(spatialTag, queryPoints, actionStr); } //恢复场景光标形状 SmObjectLocator.getInstance().GlobeObject.IsCursorCustomized = false; }
//绘制线触发的事件 private void m_sceneControl_Tracked(object sender, Tracked3DEventArgs e) { Recordset recordset; Double lineWidth = 0.0; Double bottomheight = 0; try { if (flag) { if (!isRegion) { GeoLine3D geoLine3D = e.Geometry as GeoLine3D; GeoStyle3D geoStyle = new GeoStyle3D(); geoStyle.LineSymbolID = m_line3DIndex; geoStyle.LineWidth = lineWidth; geoStyle.AltitudeMode = AltitudeMode.RelativeToGround; geoStyle.BottomAltitude = bottomheight; geoLine3D.Style3D = geoStyle; recordset = m_datasetLine3D.GetRecordset(false, CursorType.Dynamic); recordset.AddNew(geoLine3D); recordset.Update(); recordset.Dispose(); m_layer3DLine.UpdateData(); m_sceneControl.Scene.Refresh(); } else { if (ispointRegion) { GeoRegion3D geoRegion3D = e.Geometry as GeoRegion3D; if (geoRegion3D.PartCount > 0) { Rectangle2D rect = geoRegion3D.Bounds; Datasource datasource = m_workspace.Datasources[0]; DatasetVector pointDataset = datasource.Datasets["Point3D"] as DatasetVector; for (double y = geoRegion3D.Bounds.Bottom; y < geoRegion3D.Bounds.Top;) { for (double x = geoRegion3D.Bounds.Left; x < geoRegion3D.Bounds.Right;) { recordset = pointDataset.GetRecordset(false, CursorType.Dynamic); Point3D pt3d = new Point3D(); pt3d.X = x; pt3d.Y = y; pt3d.Z = 0; GeoPoint3D geopoint3D = new GeoPoint3D(pt3d); GeoStyle3D geoStyle = new GeoStyle3D(); geoStyle.MarkerSymbolID = m_marker3DIndex; geoStyle.IsMarkerSizeFixed = false; geoStyle.MarkerSize = 1; geoStyle.Marker3DScaleX = 1; geoStyle.Marker3DScaleY = 1; geoStyle.Marker3DScaleZ = 1; geoStyle.IsMarker3D = true; geoStyle.AltitudeMode = AltitudeMode.RelativeToGround; geopoint3D.Style3D = geoStyle; recordset.MoveLast(); recordset.AddNew(geopoint3D); recordset.Update(); recordset.Dispose(); m_layer3DPoint.IsSelectable = false; m_layer3DPoint.UpdateData(); m_sceneControl.Scene.Refresh(); x += 0.0002; } y += 0.0002; } } } else { Datasource datasource = m_workspace.Datasources[0]; DatasetVector Region3DDataset = datasource.Datasets["Region3D"] as DatasetVector; recordset = Region3DDataset.GetRecordset(false, CursorType.Dynamic); GeoRegion3D geoRegion = e.Geometry as GeoRegion3D; GeoStyle3D geoStyle = new GeoStyle3D(); geoStyle.FillSymbolID = m_region3DIndex; geoStyle.AltitudeMode = AltitudeMode.RelativeToGround; geoStyle.BottomAltitude = 0.5; geoRegion.Style3D = geoStyle; recordset.AddNew(geoRegion); recordset.Update(); recordset.Dispose(); (m_layer3DRegion.AdditionalSetting as Layer3DSettingVector).Style = geoStyle; m_layer3DRegion.UpdateData(); m_sceneControl.Scene.Refresh(); } } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// 测量面积 /// </summary> /// <param name="e"></param> private void OutputMeasureArea(SuperMap.UI.Tracking3DEventArgs e) { try { Point location = mSceneControl.PointToClient(Cursor.Position); if (mTempPoint != Point3D.Empty) { mPoint3Ds.Remove(mPoint3Ds.Count - 1); } mTempPoint = new Point3D(e.X, e.Y, e.Z); mPoint3Ds.Add(mTempPoint); GeoRegion3D geoRegion3D = null; if (mPoint3Ds.Count >= 3) { geoRegion3D = new GeoRegion3D(mPoint3Ds); geoRegion3D.Style3D = mGeoStyle3DTemp.Clone(); location.Offset(30, 30); if (location.X > mSceneControl.Bounds.Width / 4 * 3) { location.X = mSceneControl.Bounds.Width / 4 * 3; } if (location.Y > mSceneControl.Bounds.Height) { location.Y = location.Y - 60; } TextPart3D textPart3D = new TextPart3D(); textPart3D.AnchorPoint = new Point3D(0, 0, 0); textPart3D.Text = String.Empty; TextStyle style = new TextStyle(); style.ForeColor = Color.White; style.IsSizeFixed = true; style.FontHeight = 6; style.Alignment = TextAlignment.BottomLeft; style.BackColor = Color.Black; style.Outline = true; GeoText3D text3d = new GeoText3D(textPart3D, style); text3d.Style3D = new GeoStyle3D(); text3d.Style3D.AltitudeMode = AltitudeMode.Absolute; text3d[0].Text = e.TotalArea.ToString("##.00") + "平方米"; if (e.Geometry != null) { text3d[0].X = e.Geometry.InnerPoint.X; text3d[0].Y = e.Geometry.InnerPoint.Y; } else { text3d[0].X = geoRegion3D.InnerPoint.X; text3d[0].Y = geoRegion3D.InnerPoint.Y; } int index = mSceneControl.Scene.TrackingLayer.IndexOf(MessageTrackingTag); if (index >= 0) { mSceneControl.Scene.TrackingLayer.Remove(index); } mSceneControl.Scene.TrackingLayer.Add(text3d, MessageTrackingTag); mCurArea = e.TotalArea; } } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void TrackedHandler(object sender, Tracked3DEventArgs e) { try { // 清空临时结果 mPoint3Ds.Clear(); mCurLength = 0.0; Geometry3D geometry = e.Geometry; Point3D textLocation = new Point3D(0, 0, 0); String text = String.Empty; if (mSceneControl.Action == Action3D.MeasureDistance && mIndex == 8 || mSceneControl.Action == Action3D.MeasureTerrainDistance) { //绘制量算线对象 GeoLine3D geoLine3D = e.Geometry.Clone() as GeoLine3D; geoLine3D.Style3D = mGeoStyle3D.Clone(); if (mSceneControl.Action == Action3D.MeasureDistance && mIndex == 8) { geoLine3D.Style3D.AltitudeMode = AltitudeMode.Absolute; } else { geoLine3D.Style3D.AltitudeMode = AltitudeMode.ClampToGround; } mSceneControl.Scene.TrackingLayer.Add(geoLine3D, MeasureDistanceTag); //绘制量算点对象 Point3D point3D = Point3D.Empty; for (Int32 i = 0; i < geoLine3D.PartCount; i++) { for (Int32 j = 0; j < geoLine3D[i].Count; j++) { GeoPoint3D geoPoint3D = new GeoPoint3D(geoLine3D[i][j]); geoPoint3D.Style3D = mGeoStyle3D.Clone(); if (mSceneControl.Action == Action3D.MeasureDistance && mIndex == 8) { geoPoint3D.Style3D.AltitudeMode = AltitudeMode.Absolute; } else if (mSceneControl.Action == Action3D.MeasureTerrainDistance) { geoPoint3D.Style3D.AltitudeMode = AltitudeMode.ClampToGround; } mSceneControl.Scene.TrackingLayer.Add(geoPoint3D, MeasureDistanceTag); point3D = geoLine3D[i][j]; } } //量算结果 int index = mSceneControl.Scene.TrackingLayer.IndexOf(MessageTrackingTag); if (index >= 0) { mSceneControl.Scene.TrackingLayer.Remove(index); } // 添加结果文字 if (mSceneControl.Action == Action3D.MeasureDistance && mIndex == 8) { text = String.Format("{0}{1}{2}", "空间距离:", Math.Round(Convert.ToDecimal(e.Length), 2), "米"); } else { text = String.Format("{0}{1}{2}", "依地距离:", Math.Round(Convert.ToDecimal(e.Length), 2), "米"); } textLocation = geoLine3D[0][geoLine3D[0].Count - 1]; GeoText3D geoText = new GeoText3D(new TextPart3D(text, textLocation)); SetResultTextStyle(geoText); mSceneControl.Scene.TrackingLayer.Add(geoText, "MeasureDistance"); //计算首尾点高度差 Point3Ds point3Ds = geoLine3D[0]; double height = point3Ds[point3Ds.Count - 1].Z - point3Ds[0].Z; String message = string.Format("首尾点高度差为:{0}米。", height.ToString("##.00")); } else if (mSceneControl.Action == Action3D.MeasureArea && mIndex == 10 || mSceneControl.Action == Action3D.MeasureTerrainArea) { //绘制量算面对象 GeoRegion3D geoRegion3D = e.Geometry as GeoRegion3D; //绘制量算面对象 geoRegion3D.Style3D = mGeoStyle3D.Clone(); if (mSceneControl.Action == Action3D.MeasureArea) { geoRegion3D.Style3D.AltitudeMode = AltitudeMode.Absolute; } else { geoRegion3D.Style3D.AltitudeMode = AltitudeMode.ClampToGround; } geoRegion3D.Style3D.FillForeColor = Color.FromArgb(120, 250, 250, 50); ClearTextMessageTag(); int index = mSceneControl.Scene.TrackingLayer.IndexOf(MessageTrackingTag); if (index >= 0) { mSceneControl.Scene.TrackingLayer.Remove(index); } if (mIndex == 10) { mSceneControl.Scene.TrackingLayer.Add(geoRegion3D, "geoRegion3D"); } //绘制量算点对象 for (Int32 i = 0; i < geoRegion3D.PartCount; i++) { for (Int32 j = 0; j < geoRegion3D[i].Count; j++) { GeoPoint3D geoPoint3D = new GeoPoint3D(geoRegion3D[i][j]); geoPoint3D.Style3D = mGeoStyle3D.Clone(); if (mSceneControl.Action == Action3D.MeasureArea && mIndex == 10) { geoPoint3D.Style3D.AltitudeMode = AltitudeMode.Absolute; } else if (mSceneControl.Action == Action3D.MeasureTerrainArea) { geoPoint3D.Style3D.AltitudeMode = AltitudeMode.ClampToGround; } mSceneControl.Scene.TrackingLayer.Add(geoPoint3D, MeasureAreaTag + i.ToString() + j.ToString()); } } ClearTextMessageTag(); //量算结果 if (mSceneControl.Action == Action3D.MeasureArea && mIndex == 10) { mStrResult = String.Format("{0}{1}{2}", "空间面积:", Math.Round(Convert.ToDecimal(e.Area), 2), "平方米"); } else { mStrResult = String.Format("{0}{1}{2}", "依地面积:", Math.Round(Convert.ToDecimal(e.Area), 2), "平方米"); } GeoText3D text3d = GetGeoText3DMessage(); text3d[0].Text = mStrResult; text3d[0].X = geoRegion3D.InnerPoint3D.X; text3d[0].Y = geoRegion3D.InnerPoint3D.Y; text3d[0].Z = geoRegion3D.InnerPoint3D.Z; GeoText3D geoText = new GeoText3D(text3d); // 添加结果文字 SetResultTextStyle(geoText); mSceneControl.Scene.TrackingLayer.Add(geoText, "MeasureArea"); } else if (mSceneControl.Action == Action3D.MeasureAltitude && mIndex == 9) { //绘制量算线对象 GeoLine3D geoLine3D = e.Geometry as GeoLine3D; geoLine3D.Style3D = mGeoStyle3D.Clone(); geoLine3D.Style3D.AltitudeMode = AltitudeMode.Absolute; mSceneControl.Scene.TrackingLayer.Add(geoLine3D, "Altitude"); // 添加结果文字 text = String.Format("{0}{1}{2}", "高度:", Math.Round(Convert.ToDecimal(e.Height), 2), "米"); textLocation = geoLine3D[0][geoLine3D[0].Count - 1]; GeoText3D geoText = new GeoText3D(new TextPart3D(text, textLocation)); SetResultTextStyle(geoText); mSceneControl.Scene.TrackingLayer.Add(geoText, "Altitude"); //输出首尾点高度 Point3Ds point3Ds = geoLine3D[0]; double startHeight = point3Ds[0].Z; double endHeight = point3Ds[1].Z; string message = string.Format("首点高度为:{0}米。", startHeight.ToString("##.00")); //bd_formMain.ClearOutputMessage(); //bd_formMain.OutputMessage(message); message = string.Format("尾点高度为:{0}米。", endHeight.ToString("##.00")); //bd_formMain.OutputMessage(message); //绘制量算点对象 for (Int32 i = 0; i < geoLine3D.PartCount; i++) { for (Int32 j = 0; j < geoLine3D[i].Count; j++) { GeoPoint3D geoPoint3D = new GeoPoint3D(geoLine3D[i][j]); geoPoint3D.Style3D = mGeoStyle3D.Clone(); geoPoint3D.Style3D.AltitudeMode = AltitudeMode.Absolute; mSceneControl.Scene.TrackingLayer.Add(geoPoint3D, MeasureAltitudeTag + j.ToString()); } } ClearTextMessageTag(); if (!(Toolkit.IsZero(mCurAltitude))) { EndOneMeasure(); } } else if (mSceneControl.Action == Action3D.MeasureHorizontalDistance) { // 结果线 GeoLine3D resLine3D = e.Geometry as GeoLine3D; resLine3D.Style3D = mGeoStyle3D.Clone(); resLine3D.Style3D.AltitudeMode = AltitudeMode.Absolute; // 结果点 Point3Ds resPoints = resLine3D[0]; for (Int32 i = 0; i < resPoints.Count; i++) { GeoPoint3D geoPoint = new GeoPoint3D(resPoints[i]); SetGeometry3DStyle(geoPoint); mSceneControl.Scene.TrackingLayer.Add(geoPoint, "Geometry" + i.ToString()); } EndOneMeasure(); mSceneControl.Scene.TrackingLayer.Add(resLine3D, "Geometry"); // 添加结果文字 text = String.Format("{0}{1}{2}", "总长度: ", Math.Round(Convert.ToDecimal(e.Length), 2), "米"); GeoLine3D line = (geometry as GeoLine3D); textLocation = line[0][line[0].Count - 2]; //ClearTextMessageTag(); int index = mSceneControl.Scene.TrackingLayer.IndexOf(MessageTrackingTag); if (index >= 0) { mSceneControl.Scene.TrackingLayer.Remove(index); } GeoText3D geoText = new GeoText3D(new TextPart3D(text, textLocation)); SetResultTextStyle(geoText); mSceneControl.Scene.TrackingLayer.Add(geoText, "MeasureResult"); //bd_formMain.ClearOutputMessage(); //bd_formMain.OutputMessage(text); //计算首尾点高度差 Point3Ds point3Ds = resLine3D[0]; double height = point3Ds[point3Ds.Count - 1].Z - point3Ds[0].Z; string message = string.Format("首尾点高度差为:{0}米。", height.ToString("##.00")); //bd_formMain.OutputMessage(message); } } catch (Exception ex) { Trace.WriteLine(ex.Message); } finally { mLabel.Visible = false; } }
private void OutputMeasureArea(SuperMap.UI.Tracking3DEventArgs e) { try { Point location = SmObjectLocator.getInstance().GlobeObject.PointToClient(Cursor.Position); if (m_tempPoint != Point3D.Empty) { m_point3Ds.Remove(m_point3Ds.Count - 1); } m_tempPoint = new Point3D(e.X, e.Y, e.Z); m_point3Ds.Add(m_tempPoint); GeoRegion3D geoRegion3D = null; if (m_point3Ds.Count >= 3) { geoRegion3D = new GeoRegion3D(m_point3Ds); geoRegion3D.Style3D = m_GeoStyle3DTemp.Clone(); location.Offset(30, 30); if (location.X > SmObjectLocator.getInstance().GlobeObject.Bounds.Width / 4 * 3) { location.X = SmObjectLocator.getInstance().GlobeObject.Bounds.Width / 4 * 3; } if (location.Y > SmObjectLocator.getInstance().GlobeObject.Bounds.Height) { location.Y = location.Y - 60; } TextPart3D textPart3D = new TextPart3D(); textPart3D.AnchorPoint = new Point3D(0, 0, 0); textPart3D.Text = String.Empty; TextStyle style = new TextStyle(); style.ForeColor = Color.White; style.IsSizeFixed = true; style.FontHeight = 6; style.Alignment = TextAlignment.BottomLeft; style.BackColor = Color.Black; style.Outline = true; GeoText3D text3d = new GeoText3D(textPart3D, style); text3d.Style3D = new GeoStyle3D(); text3d.Style3D.AltitudeMode = AltitudeMode.Absolute; text3d.Style3D.BottomAltitude = 100; text3d[0].Text = e.TotalArea.ToString("##.00") + "平方米"; if (e.Geometry != null) { text3d[0].X = e.Geometry.InnerPoint.X; text3d[0].Y = e.Geometry.InnerPoint.Y; } else { text3d[0].X = geoRegion3D.InnerPoint.X; text3d[0].Y = geoRegion3D.InnerPoint.Y; } int index = SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.IndexOf(m_messageTrackingTag); if (index >= 0) { SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Remove(index); } SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(text3d, m_messageTrackingTag); m_curArea = e.TotalArea; } } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } }