Example #1
0
 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);
     }
 }
Example #2
0
        //鼠标移动事件
        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();
                }
            }
        }
Example #3
0
        //鼠标移动事件
        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");
                }
            }
        }
Example #4
0
        //鼠标移动事件
        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");
                }
            }
        }
Example #5
0
 //鼠标右键事件,结束分析操作
 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);
         }
     }
 }
Example #6
0
        //鼠标移动事件
        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;
                    }
                }
            }
        }
Example #7
0
        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);
            }
        }
Example #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();
     }
 }
        /// <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;
            }
        }
Example #13
0
		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);
			}
		}