【IT168技术文档】
首先用当前的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