三维可视域分析怎么判断分析结束并获取分析结果?

0 投票

我在进行idesktop 10i的插件开发时,发现在调用ViewShed3D对象的Build函数后不能立刻获取到该次分析的结果,例如下面的代码调用Build之后立刻获取VisibleBody,结果为null,而且在这个函数执行完成后可视域分析结果才会被渲染出来,同时只要调用了一次Build,之后修改了ViewShed3D对象的属性,可视域分析结果也会跟着变化。

问题:

1. 三维可视域分析的原理是不是调用了Build之后,每次渲染都会使用当前的ViewShed3D对象的属性进行可视域分析,直到调用了Clear函数才会停止分析并清空分析结果,如果不是的话,能不能简单描述一下这部分的原理?

2. 每次修改完ViewShed3D的属性后怎么判断该次可视域分析是否结束、什么时候结束,应该在哪个步骤调用GetVisibleBody等函数获取该次分析的结果?

6月 22 分类:  89次浏览 | 用户: LiangJN (5 分)
重新分类 6月 22 用户:jjz

1个回答

1 投票
 
已采纳
您好,可视域分析功能其实是一个实时分析的功能。

通常我们使用它的流程是这样的,

实例化ViewShed3D>

绑定场景和并设置可视域、不可视域、线的颜色>

设置可视域参数默认值(不包括观察点),并绑定相关场景鼠标事件>

使用Bulid开启可视域分析状态>

鼠标左键第一次点选,确定观察点坐标并设置ViewShed3D的观察点参数ViewerPosition>

鼠标移动实时更新ViewShed3D的可视距离、方向交参数,并在场景中清除上一次可视域分析结果,更新绘制最新的可视域分析结果>

鼠标再次点击,结束实时更新事件,可视域分析结果结果定格>

清除分析结果缓存Clear。

(该业务流程您可以在IDesktop桌面端中体验,当然部分流程您可以简化,比如不进行实时分析仅单例分析、录入参数而不是鼠标点选参数等都是可以的)

简而言之,可视域分析结果结果的更新是发生在Bulid开启分析状态后,每一次修改属性,分析结果便会实时更新。

希望可以帮助到您!
6月 22 用户: 执笔画月 名扬四海 (1,897 分)
采纳于 6月 22 用户:LiangJN
谢谢,我根据你的说明测试了一下,应该是我之前写的有点问题。

我用的是对话框输入参数,然后鼠标点击添加可视域的方式进行可视域分析。

之前我在点击的时候一次性在一个函数中实例化ViewShed3D对象>调用Build>设置参数和观察点,可能就是因为顺序不对,导致这部分代码结束后无法获取到分析结果。

现在我改成一开始就实例化ViewShed3D对象并Build,点击时再设置参数和观察点,就可以获取到实时的分析结果了。

感谢您的帮助!
...