private void axMapControl_OnDoubleClick(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnDoubleClickEvent e) { if (this.m_Application.CurrentTool != null) { this.m_CurrentTool = this.m_ToolCol[this.m_Application.CurrentTool]; this.m_CurrentTool.OnDblClick(); } }
private void axMapControl1_OnDoubleClick(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnDoubleClickEvent e) { //设置三维视角 IActiveView pActiveView = axMapControl1.ActiveView; //IActiveView pActiveView1 = this.axMapControl1 as IActiveView; //获取当前二维活动区域 //IEnvelope pEnv = pActiveView1 as IEnvelope; //将此二位区域的Extent 保存在Envelope中 IActiveView pActiveView1 = this.axMapControl1.Map as IActiveView; //获取当前二维活动区域 IEnvelope pEnv = pActiveView1.Extent as IEnvelope; //将此二位区域的Extent 保存在Envelope中 IPoint point = new PointClass(); //将此区域的中心点保存起来 point = GetGeo(pActiveView, (pEnv.XMax + pEnv.XMin) / 2, (pEnv.YMax + pEnv.YMin) / 2); //取得视角中心点X坐标 ICamera pCamera = this.axSceneControl1.Camera; //取得三维活动区域的Camara ,就像你照相一样的视角,它有Taget(目标点)和Observer(观察点)两个属性需要设置 IPoint ptTaget = new PointClass(); //创建一个目标点 ptTaget = point; //视觉区域中心点作为目标点 ptTaget.Z = 0; //设置目标点高度,这里设为 0米 IPoint ptObserver = new PointClass(); //创建观察点 的X,Y,Z ptObserver.X = point.X; //设置观察点坐标的X坐标 ptObserver.Y = point.Y + 2; //设置观察点坐标的Y坐标(这里加90米,是在南北方向上加了90米,当然这个数字可以自己定,意思就是将观察点和目标点有一定的偏差,从南向北观察 double height = 10; //计算观察点合适的高度,这里用三目运算符实现的,效果稍微好一些,当然可以自己拟定 ptObserver.Z = height; //设置观察点坐标的Y坐标 // ptObserver = GetProject(pActiveView1, pCamera.Observer.X, pCamera.Observer.Y); pCamera.Target = ptTaget; //赋予目标点 pCamera.Observer = ptObserver; //将上面设置的观察点赋予camera的观察点 pCamera.Inclination = 15; //设置三维场景视角,也就是高度角,视线与地面所成的角度 pCamera.Azimuth = 180; //设置三维场景方位角,视线与向北的方向所成的角度 axSceneControl1.SceneGraph.RefreshViewers(); //刷新地图,(很多时候,看不到效果,都是你没有刷新) System.Timers.Timer t = new System.Timers.Timer(); //500ms空隙 t.Elapsed += new System.Timers.ElapsedEventHandler(sceneRotate); //调用函数 t.AutoReset = false; //是否循环调用 t.Enabled = true; //是否调用 t.Start(); }