现在的位置: 首页 > 综合 > 正文

Scene中获得当前的extent,附代码

2012年07月23日 ⁄ 综合 ⁄ 共 829字 ⁄ 字号 评论关闭

     首先用当前的camera的目标点(target)和观察点(observer)来构建一个三维向量,然后用该向量和target来构建一个shpere,该sphere的envelope就是当前三维空间的extent,这样只是获得了当前三维空间的extent,但是scene中仍然无法响应extent_changed事件,也就是说,我们无法捕获当前三维空间的extent是否变化了的消息,要解决这个问题,我们可以重写三维中的一些操作按钮,如,全图、放大、缩小、浏览、漫游等,然后手动触发extent_changed事件

源码如下:
 ''' <summary>
  ''' 获得当前三维场景的extent
  ''' </summary>
  ''' <param name="pCamera">当前camera</param>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Public Function GetEnvelopeFromCamera(ByVal pCamera As ICamera) As IEnvelope
    Try
      Dim pVector3D As IVector3D = New Vector3D
      pVector3D.ConstructDifference(pCamera.Observer, pCamera.Target)
      Dim pSphere As ISphere = New Sphere
      pSphere.Center = pCamera.Target
      pSphere.Radius = pCamera.ViewingDistance * Math.Sin(pCamera.ViewFieldAngle * Math.PI / 180) * 0.5
      Return pSphere.Envelope
    Catch ex As Exception
      Return Nothing
    End Try
  End Function

抱歉!评论已关闭.