コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: DlgSightLine.cs プロジェクト: suixiaofeng/LineGraph
        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;
            }
        }
コード例 #3
0
 //鼠标右键事件,结束分析操作
 void m_sceneControl_Tracked(object sender, Tracked3DEventArgs e)
 {
     if (m_sceneControl.Action == Action3D.CreateLine)
     {
         m_sceneControl.Action = m_oldAction;
         this.RegisterEvents(false);
     }
 }
コード例 #4
0
ファイル: DlgSkyline.cs プロジェクト: suixiaofeng/LineGraph
 //鼠标右键事件,结束分析操作
 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);
         }
     }
 }
コード例 #5
0
 //鼠标右键事件,结束分析操作
 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;
     }
 }
コード例 #6
0
        //鼠标右键事件
        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;
            }
        }
コード例 #7
0
        //鼠标右键事件,结束绘制操作
        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;
            }
        }
コード例 #8
0
 //鼠标右键事件
 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();
     }
 }
コード例 #9
0
 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;
     }
 }
コード例 #10
0
 public void bd_sceneControl_Tracked(object sender, Tracked3DEventArgs e)
 {
     Output(e);
 }
コード例 #11
0
        //绘制线触发的事件
        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);
            }
        }
コード例 #12
0
        /// <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;
            }
        }
コード例 #13
0
		/// <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;
			}
		}
コード例 #14
0
 void m_sceneControl_Tracked(object sender, Tracked3DEventArgs e)
 {
     m_bHasDone = true;
 }
コード例 #15
0
 //鼠标右键事件,结束分析操作
 void m_sceneControl_Tracked(object sender, Tracked3DEventArgs e)
 {
     //Rectangle2D rect = m_contour.CoverageArea;
     //Console.WriteLine(rect.ToString());
 }