private void TrackedSectionEvent(object sender, Tracked3DEventArgs e) { try { //绘制量算线对象 GeoLine3D geoLine3D = e.Geometry.Clone() as GeoLine3D; mRec2D = geoLine3D.Bounds; //设置数据集容量,避免空间查询出现过多对象 mUseData.OutWaterNetWork.Tolerance.NodeSnap = 0.0001; mUseData.SupplyWaterNetWork.Tolerance.NodeSnap = 0.0001; mUseData.ElectricNetWork.Tolerance.NodeSnap = 0.0001; GeoStyle3D mGeoStyle3D = new GeoStyle3D(); // mGeoStyle3D.MarkerColor = Color.FromArgb(255, 0, 255); mGeoStyle3D.LineColor = Color.FromArgb(0x00, 0x99, 0x00); mGeoStyle3D.LineWidth = 3; geoLine3D.Style3D = mGeoStyle3D.Clone(); geoLine3D.Style3D.AltitudeMode = AltitudeMode.Absolute; TrackingLayer3D trackinglayer = mSceneControl.Scene.TrackingLayer; trackinglayer.IsEditable = true; trackinglayer.IsVisible = true; trackinglayer.Add(geoLine3D, "GeoLine3D"); mSceneControl.Action = Action3D.Pan2; CrossSecLine(); } catch (Exception ex) { Trace.WriteLine(ex.Message); } }
void m_sceneControl_Tracked(object sender, Tracked3DEventArgs e) { this.cb_TargetPtsIndex.Items.Clear(); if (m_sceneControl.Action == Action3D.CreatePolyline) { GeoLine3D geoline3d = e.Geometry as GeoLine3D; if (geoline3d != null && geoline3d.PartCount > 0) { Point3Ds pts = geoline3d[0]; m_sightLine.ViewerPosition = pts[0]; updateObservePosition(pts[0]); m_sightLine.RemoveAllTargetPoints(); for (int i = 1; i < pts.Count; ++i) { m_sightLine.AddTargetPoint(pts[i]); this.cb_TargetPtsIndex.Items.Add(i - 1); } } } if (this.cb_TargetPtsIndex.Items.Count > 0) { this.cb_TargetPtsIndex.SelectedIndex = 0; } }
//鼠标右键事件,结束分析操作 void m_sceneControl_Tracked(object sender, Tracked3DEventArgs e) { if (m_sceneControl.Action == Action3D.CreateLine) { m_sceneControl.Action = m_oldAction; this.RegisterEvents(false); } }
//鼠标右键事件,结束分析操作 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_Tracked(object sender, Tracked3DEventArgs e) { if (m_sceneControl.Action == Action3D.CreateLine) { GeoLine3D geoline3d = e.Geometry as GeoLine3D; if (geoline3d != null && geoline3d.PartCount > 0) { Point3Ds pts = geoline3d[0]; m_profile.StartPoint = pts[0]; m_profile.EndPoint = pts[1]; outPutPic(); } m_sceneControl.Action = m_oldAction; m_bHasDrawn = true; } }
//鼠标右键事件 void m_sceneControl_Tracked(object sender, Tracked3DEventArgs e) { if (m_sceneControl.Action == Action3D.CreatePolygon) { Geometry3D geometry3D = e.Geometry; if (geometry3D != null) { m_style3D.BottomAltitude = m_minAltitude; m_style3D.ExtendedHeight = m_maxAltitude - m_minAltitude; geometry3D.Style3D = m_style3D; m_shadowQuery.QueryRegion = geometry3D; m_bAnalyisSucess = m_shadowQuery.Build(); if (m_bAnalyisSucess) { this.cb_GetShadowRatio.Enabled = true; this.label_shadowRatio.Enabled = true; } } m_sceneControl.Action = m_oldAction; } }
//鼠标右键事件,结束绘制操作 void m_sceneControl_Tracked(object sender, Tracked3DEventArgs e) { int a = 0; if (m_sceneControl.Action == Action3D.CreatePolyline) { GeoLine3D line3D = e.Geometry as GeoLine3D; m_geoLine3D = line3D; m_style3D.LineColor = Color.Yellow; m_style3D.LineWidth = 1; m_style3D.AltitudeMode = AltitudeMode.Absolute; m_geoLine3D.Style3D = m_style3D; m_sceneControl.Scene.TrackingLayer.Add(m_geoLine3D, "track" + (++a)); m_nodeAnimation.SetTrack(m_geoLine3D); m_nodeAnimation.Length = m_length; m_nodeAnimation.TimePostition = 0; m_sceneControl.Action = Action3D.Pan; this.btn_AddToKML.Enabled = true; } }
//鼠标右键事件 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(); } }
private void TrackedHandler(object sender, Tracked3DEventArgs e) { string actionStr = SmObjectLocator.getInstance().GlobeObject.Action.ToString().ToLower(); switch (actionStr) { case "createline": if (TempPoints3Ds.Count == 2) { EndSpatialQuery(); } break; default: break; } }
public void bd_sceneControl_Tracked(object sender, Tracked3DEventArgs e) { Output(e); }
//绘制线触发的事件 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="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; } }
/// <summary> /// 显示最终量算的结果 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void TrackedHandler(object sender, Tracked3DEventArgs e) { try { // 清空临时结果 m_point3Ds.Clear(); m_curLength = 0.0; Geometry3D geometry = e.Geometry; Point3D textLocation = new Point3D(0, 0, 0); String text = String.Empty; if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureDistance || SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureTerrainDistance) { //绘制量算线对象 GeoLine3D geoLine3D = e.Geometry.Clone() as GeoLine3D; geoLine3D.Style3D = m_GeoStyle3D.Clone(); if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureDistance) { geoLine3D.Style3D.AltitudeMode = AltitudeMode.Absolute; geoLine3D.Style3D.BottomAltitude = 100; } else { geoLine3D.Style3D.AltitudeMode = AltitudeMode.ClampToGround; } SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoLine3D, m_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 = m_GeoStyle3D.Clone(); if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureDistance) { geoPoint3D.Style3D.AltitudeMode = AltitudeMode.Absolute; geoPoint3D.Style3D.BottomAltitude = 100; } else if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureTerrainDistance) { geoPoint3D.Style3D.AltitudeMode = AltitudeMode.ClampToGround; } SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoPoint3D, m_MeasureDistanceTag); point3D = geoLine3D[i][j]; } } //量算结果 int index = SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.IndexOf(m_messageTrackingTag); if (index >= 0) { SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Remove(index); } // 添加结果文字 if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureDistance) { 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); SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoText, m_MeasureDistanceTag); //计算首尾点高度差 Point3Ds point3Ds = geoLine3D[0]; double height = point3Ds[point3Ds.Count - 1].Z - point3Ds[0].Z; //m_formMain.ClearOutputMessage(); //m_formMain.OutputMessage(text); //String message = string.Format("首尾点高度差为:{0}米。", height.ToString("##.00")); //m_formMain.OutputMessage(message); } else if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureArea || SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureTerrainArea) { //绘制量算面对象 GeoRegion3D geoRegion3D = e.Geometry as GeoRegion3D; //绘制量算面对象 geoRegion3D.Style3D = m_GeoStyle3D.Clone(); if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureArea) { geoRegion3D.Style3D.AltitudeMode = AltitudeMode.Absolute; geoRegion3D.Style3D.BottomAltitude = 100; } else { geoRegion3D.Style3D.AltitudeMode = AltitudeMode.ClampToGround; } geoRegion3D.Style3D.FillForeColor = Color.FromArgb(120, 250, 250, 50); ClearTextMessageTag(); 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(geoRegion3D, "Measure_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 = m_GeoStyle3D.Clone(); if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureArea) { geoPoint3D.Style3D.AltitudeMode = AltitudeMode.Absolute; } else if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureTerrainArea) { geoPoint3D.Style3D.AltitudeMode = AltitudeMode.ClampToGround; } SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoPoint3D, m_MeasureAreaTag + i.ToString() + j.ToString()); } } ClearTextMessageTag(); //量算结果 if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureArea) { m_strResult = String.Format("{0}{1}{2}", "空间面积:", Math.Round(Convert.ToDecimal(e.Area), 2), "平方米"); } else { m_strResult = String.Format("{0}{1}{2}", "依地面积:", Math.Round(Convert.ToDecimal(e.Area), 2), "平方米"); } GeoText3D text3d = GetGeoText3DMessage(); text3d[0].Text = m_strResult; 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); SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoText, m_MeasureAreaTag); //m_formMain.ClearOutputMessage(); //m_formMain.OutputMessage(m_strResult); } else if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureAltitude) { //绘制量算线对象 GeoLine3D geoLine3D = e.Geometry as GeoLine3D; geoLine3D.Style3D = m_GeoStyle3D.Clone(); geoLine3D.Style3D.AltitudeMode = AltitudeMode.Absolute; SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoLine3D, "Measure_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); SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoText, "Measure_Altitude"); //输出首尾点高度 Point3Ds point3Ds = geoLine3D[0]; double startHeight = point3Ds[0].Z; double endHeight = point3Ds[1].Z; string message = string.Format("首点高度为:{0}米。", startHeight.ToString("##.00")); //m_formMain.ClearOutputMessage(); //m_formMain.OutputMessage(message); //message = string.Format("尾点高度为:{0}米。", endHeight.ToString("##.00")); //m_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 = m_GeoStyle3D.Clone(); geoPoint3D.Style3D.AltitudeMode = AltitudeMode.Absolute; SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoPoint3D, m_MeasureAltitudeTag + j.ToString()); } } ClearTextMessageTag(); if (!(Toolkit.IsZero(m_curAltitude))) { EndOneMeasure(); } } else if (SmObjectLocator.getInstance().GlobeObject.Action == Action3D.MeasureHorizontalDistance) { // 结果线 GeoLine3D resLine3D = e.Geometry as GeoLine3D; resLine3D.Style3D = m_GeoStyle3D.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); SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoPoint, "Measure_Geometry" + i.ToString()); } EndOneMeasure(); SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(resLine3D, "Measure_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 = SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.IndexOf(m_messageTrackingTag); if (index >= 0) { SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Remove(index); } GeoText3D geoText = new GeoText3D(new TextPart3D(text, textLocation)); SetResultTextStyle(geoText); SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoText, "MeasureResult"); //m_formMain.ClearOutputMessage(); //m_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")); //m_formMain.OutputMessage(message); } } catch (Exception ex) { Trace.WriteLine(ex.Message); } finally { m_label.Visible = false; } }
void m_sceneControl_Tracked(object sender, Tracked3DEventArgs e) { m_bHasDone = true; }
//鼠标右键事件,结束分析操作 void m_sceneControl_Tracked(object sender, Tracked3DEventArgs e) { //Rectangle2D rect = m_contour.CoverageArea; //Console.WriteLine(rect.ToString()); }