AE三維點擊查詢(3D Identify)的實現(轉)

來源:互聯網
上載者:User

標籤:get   strong   os   art   類   cti   

AE三維點擊查詢(3D Identify)的實現,類似ArcGIS的Identify對話方塊
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Function: 三維點擊查詢 3D Identify
// Copyright ©  天下無雙之dxcgis
// 2008-5-8  於嶽麓山下。

主表單中的代碼:

        // 在主表單中定義一個frmIdentify表單類的對象
        frmIdentify m_frmIdentify = new frmIdentify();

        // SceneControl1的MouseDown 事件中添加代碼
private void axSceneControl1_OnMouseDown(object sender, ISceneControlEvents_OnMouseDownEvent e)
        {
               //三維查詢         
                axSceneControl1.SceneGraph.IsNavigating = false;
               
                IHit3DSet pHit3DSet;
                axSceneControl1.SceneGraph.LocateMultiple(axSceneControl1.SceneGraph.ActiveViewer,
                    e.x, e.y, esriScenePickMode.esriScenePickAll, false, out pHit3DSet);
                                
                pHit3DSet.OnePerLayer();
                if (pHit3DSet.Hits.Count == 0)
                {
                    MessageBox.Show("當前點未能尋找到任何要素");
                    return;
                }
                IDisplay3D pDisplay3D = (IDisplay3D)axSceneControl1.Scene.SceneGraph;//用於高亮顯示要素
                //顯示資訊表單
                m_frmIdentify.listBox1.Items.Clear();
                m_frmIdentify.listView1.Items.Clear();
                m_frmIdentify.pHit3DSet = pHit3DSet;
                m_frmIdentify.pDisplay3D = pDisplay3D;
                m_frmIdentify.InitData();
                m_frmIdentify.Location = System.Windows.Forms.Cursor.Position; //獲得當前滑鼠的螢幕座標
                m_frmIdentify.Show();
                m_frmIdentify.Focus();
    }



3D Identify 表單(frmIdentify)的代碼

public partial class frmIdentify : Form
    {
        
        public IHit3DSet pHit3DSet;
        public IDisplay3D pDisplay3D;

        public frmIdentify()
        {
            InitializeComponent();
        }              
        private void frmIdentify_Load(object sender, EventArgs e)
        {
        }
        private void btnHide_Click(object sender, EventArgs e)
        {
            this.Hide();
        }
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {                  
            listView1.Items.Clear();//消除 listView1 的內容
      IHit3D pHit3D = (IHit3D)pHit3DSet.Hits.get_Element(listBox1.SelectedIndex);
            IFeature pFeature = (IFeature)pHit3D.Object;
            for (int j = 0; j < pFeature.Fields.FieldCount; j++)
            {
                ListViewItem li = new ListViewItem();
                li.SubItems.Clear();
                li.SubItems[0].Text = pFeature.Fields.get_Field(j).Name;
                li.SubItems.Add(pFeature.get_Value(j).ToString());               
                listView1.Items.Add(li);
            }
            //pDisplay3D.AddFlashFeature(pFeature.Shape);
            pDisplay3D.FlashGeometry(pHit3D.Owner,pHit3D.Object);
        }

       //自己添加的方法,用以初始化表單。
        public void InitData()
        {
            listBox1.Items.Clear();//消除 listBox1 的內容
            listView1.Items.Clear();//消除 listView1 的內容
            if (pHit3DSet == null)
                return;
            for (int i = 0; i < pHit3DSet.Hits.Count; )
            {
                IHit3D pHit3D = (IHit3D)pHit3DSet.Hits.get_Element(i);
                IPoint pPoint = pHit3D.Point;
                //if (pPoint.IsEmpty)
                //    return;
                ILayer pLayer = (ILayer)pHit3D.Owner;
                //判斷是否為要素圖層
         if (pLayer is IFeatureLayer)
                {
                    IFeature pFeature = (IFeature)pHit3D.Object;
                    listBox1.Items.Add(pLayer.Name);//在列表中添加圖層名
                    //for (int j = 0; j < pFeature.Fields.FieldCount; j++)
                    //    strHits += "\n  :" + pFeature.Fields.get_Field(j).Name + pFeature.get_Value(j).ToString();
                    pDisplay3D.AddFlashFeature(pFeature.Shape);
                    i++; //計數i加1
                }
                else
                {
                    //不是要素層就從pHit3DSet中刪去,因刪除後總數減1,計數i不加1
                    pHit3DSet.Hits.Remove(i);
                }
            }                     
            pDisplay3D.FlashFeatures();
        }
    }

 

轉自ESRI官論壇的dxcGIS

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.