private void btnselect_Click(object sender, EventArgs e) { double width = axSceneControl1.Width; double height = axSceneControl1.Height; Graphics g = axSceneControl1.CreateGraphics(); Pen p = new Pen(Color.Red, 4); for (int y = 1; y <= height; y++) { for (int x = 1; x <= width; x++) { // g.Clear(Color.); g.DrawEllipse(p, x, y, 1, 1); g.Flush(); System.Windows.Forms.Application.DoEvents(); IHit3DSet pHit3DSet; axSceneControl1.SceneGraph.LocateMultiple(axSceneControl1.SceneGraph.ActiveViewer, x, y, esriScenePickMode.esriScenePickAll, false, out pHit3DSet); //MessageBox.Show(pHit3DSet.Hits.Count.ToString()); if (pHit3DSet != null && pHit3DSet.Hits.Count > 0) { pHit3DSet.OnePerLayer(); IHit3D pHit3D = pHit3DSet.Hits.get_Element(0) as IHit3D; toolStripStatusLabel1.Text = "X =" + pHit3D.Point.X + ",Y=" + pHit3D.Point.Y + ", Z =" + pHit3D.Point.Z; pIdnetifyIsOrNot = true; } else { toolStripStatusLabel1.Text = "X =0" + ",Y = 0" + ",Z=0"; } } } g.Dispose(); p.Dispose(); }添加详细的注释
时间: 2024-02-10 13:06:18 浏览: 59
托盘,右键演示,C#源代码private void Form1_Load(object sender, EventArgs e)
5星 · 资源好评率100%
这段代码是一个 Windows Forms 应用程序中的按钮点击事件的处理程序。它会在一个名为 axSceneControl1 的控件上绘制一组圆形,并尝试在每个圆形上使用 LocateMultiple 方法执行三维拾取。以下是代码的详细注释:
```
// 当 btnselect 按钮被点击时执行此方法
private void btnselect_Click(object sender, EventArgs e)
{
// 获取 axSceneControl1 控件的宽度和高度
double width = axSceneControl1.Width;
double height = axSceneControl1.Height;
// 创建 Graphics 对象以在 axSceneControl1 上绘制圆形
Graphics g = axSceneControl1.CreateGraphics();
// 创建红色笔对象,线宽为 4 像素
Pen p = new Pen(Color.Red, 4);
// 对于每个 y 坐标
for (int y = 1; y <= height; y++)
{
// 对于每个 x 坐标
for (int x = 1; x <= width; x++)
{
// 在当前坐标处绘制一个圆形
g.DrawEllipse(p, x, y, 1, 1);
// 刷新绘图表面
g.Flush();
// 处理其他事件
System.Windows.Forms.Application.DoEvents();
// 声明一个 IHit3DSet 对象,以存储拾取结果
IHit3DSet pHit3DSet;
// 尝试在当前坐标处执行三维拾取
axSceneControl1.SceneGraph.LocateMultiple(axSceneControl1.SceneGraph.ActiveViewer, x, y, esriScenePickMode.esriScenePickAll, false, out pHit3DSet);
// 如果拾取结果不为空并且其中有击中的对象
if (pHit3DSet != null && pHit3DSet.Hits.Count > 0)
{
// 从拾取结果中获取第一个击中的对象
pHit3DSet.OnePerLayer();
IHit3D pHit3D = pHit3DSet.Hits.get_Element(0) as IHit3D;
// 在状态栏上显示击中对象的坐标
toolStripStatusLabel1.Text = "X =" + pHit3D.Point.X + ",Y=" + pHit3D.Point.Y + ", Z =" + pHit3D.Point.Z;
// 将 pIdnetifyIsOrNot 标记设置为 true,表示已经执行了拾取
pIdnetifyIsOrNot = true;
}
// 如果拾取结果为空或者其中没有击中的对象
else
{
// 在状态栏上显示默认坐标
toolStripStatusLabel1.Text = "X =0" + ",Y = 0" + ",Z=0";
}
}
}
// 释放 Graphics 和 Pen 对象占用的资源
g.Dispose();
p.Dispose();
}
```
阅读全文