首先用当前的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