AE三维点击查询(3D Identify)的实现(转)
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
AE三维点击查询(3D Identify)的实现(转)的更多相关文章
- bind绑定事件,摁回车键提交查询,点击查询也可以提交查询
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- asp.mvc中的vue分页实例,分页组件无法重置reload,解决点击查询按钮后,分页不刷新的问题
刚刚接触Vue.js,现在需要做一个查询功能,并且进行服务端分页.主要思路是在页面中注册一个分页组件,然后进行调用.代码如下 1.引用vue.js,具体去网上下载 2.在html的body中添加如下代 ...
- <asp:Button点击查询后,调用js中函数展现加载圈
<div> <div id='paneloading' style='display:none;position:fixed;top:0px;left:0px;z-index:999 ...
- OpenLayers 3+Geoserver+PostGIS实现点击查询
WebGIS开发中,点击查询是最经常使用的一种查询方式,在ArcGIS api 中.这样的查询叫IdentifyTask,主要作用是前台提交參数.交ArcServer查询分析返回. 本文从开源框架的角 ...
- Android GIS开发系列-- 入门季(4) GraphicsLayer的点击查询要素
上一讲中我们学会了如何在MapView中添加Graphic要素,那么在百度或高德地图中,当我们点击要素时,会显示出相应的详细信息.在GraphicsLayer中也提供了这样的方法.下面我们来学习在Gr ...
- Layui 点击查询分页,页码不刷新解决方法
Layui 点击查询分页,页码不刷新解决方法 function queryDataGrid() { layui.table.reload(tableName, { where: { //设定异步数据接 ...
- ArcGIS API for JavaScript 4.2学习笔记[21] 对3D场景上的3D要素进行点击查询【Query类学习】
有人问我怎么这个系列没有写自己做的东西呢? 大哥大姐,这是"学习笔记"啊!当然主要以解读和笔记为主咯. 也有人找我要实例代码(不是示例),我表示AJS尚未成熟,现在数据编辑功能才简 ...
- mapserver+openlayers实现左键点击查询
效果图 第一步,配置自己的mapfile,在要查询的图层LAYER对象内加上HEADER,TEMPLATE,FOOTER三个参数,同时,TEMPLATE fooOnlyForWMSGetFeature ...
- unity区分点击在3D物体还是2D UI上
当场景中的3D物体需要响应点击,但同时有UI显示时,存在判断点击是在3D物体上还是UI上的问题,办法如下: 1. 射线检测所有2D 3D物体,有2D物体被检测到时表明当前有UI.但无论Physics2 ...
随机推荐
- POJ 3468A Simple Problem with Integers(线段树区间更新)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 112228 ...
- 怎样使用Navicat Premium导出导入mysql数据库
首先,在Navicat Premium中连接要导出数据库的mysql数据库. 2 1.填写好连接数据库的信息后就可以连接到需要导出的数据库了. 3 打开要导出的数据库. 4 将数据库的结构和数据导出为 ...
- 使用win10自带邮件应用发送文件
之前的电脑装过邮件客户端,想发送文件给别人时,只需要“右键文件——发送到邮件”,就能把文件作为附件发送给对方.新电脑win10系统自带邮件客户端,所以就想直接用.但是右键发送到邮件没有关联上,用不了. ...
- 【NOIP2017】逛公园 最短路+DP
诶,去年场上不会处理$0$的环,只拿了$60$有点可惜. 我们先不管边边权为$0$的边. 我们先跑一次最短路,令$dis[u]$表示从$1$至$u$的最短路的长度. 那么根据题目的要求,从起点走到$u ...
- Android4.0以上版本比较靠谱的获取手机屏幕分辨率的方法
/** * 获取虚拟按键栏高度 * * @param context * @return */ public static int getNavigationBarHeight(Context con ...
- alloca() 是什么?为什么不提倡使用它?
在调用 alloca() 的函数返回的时候, 它分配的内存会自动释放.也就是说, 用 alloca 分配的内存在某种程度上局部于函数的 ``堆栈帧" 或上下文中. alloca() 不具可 ...
- Linux发行版,分类,CentOS下载
目录 Debian 系(dpkg) 1. 包管理 2. 发行版 Red Hat 系(rpm) 1. 包管理 2. 发行版 其他发行版 Debian 系(dpkg) 1. 包管理 包管理器:dpkg ...
- koa2开发入门
一.koa2入门 1.创建koa2工程 首先,我们创建一个目录hello-koa并作为工程目录用VS Code打开.然后,我们创建app.js,输入以下代码: // 导入koa,和koa 1.x不同, ...
- textarea的placeholder属性内容折行显示(PC和移动端端)
1.PC端折行方法 placeholder="字体 字体" 可以使其折行显示 2.移动端折行方法 webkit内核 textarea::-webkit-input-placeh ...
- JavaScript引用类型和值类型
thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>t ...