WorldWind Java 版学习:9、拾取与量算

1、在 mouseMoved 响应函数中得到屏幕点,设置给 StereoOptionSceneController
AWTInputHandler.mouseMoved(MouseEvent) line: 516
StereoOptionSceneController(AbstractSceneController).setPickPoint(Point) line: 222

2、在 initializeDrawContext 方法中,将 StereoOptionSceneController 的点设置给 DrawContext
WorldWindowGLAutoDrawable.doDisplay() line: 392
StereoOptionSceneController(AbstractSceneController).repaint() line: 334
StereoOptionSceneController(AbstractSceneController).initializeDrawContext(DrawContext) line: 399
DrawContextImpl.setPickPoint(Point) line: 381

3、在 renderTrianglesWithUniqueColors 使用各种颜色渲染各个 Tile 的三角形,并保存各个 Tile 颜色的范围
StereoOptionSceneController(BasicSceneController).doRepaint(DrawContext) line: 25
StereoOptionSceneController(AbstractSceneController).pick(DrawContext) line: 705
StereoOptionSceneController(AbstractSceneController).pickTerrain(DrawContext) line: 560
SectorGeometryList.pick(DrawContext, List<Point>) line: 238
RectangularTessellator$RectTile.pick(DrawContext, List<Point>) line: 277
RectangularTessellator.pick(DrawContext, RectTile, List<Point>) line: 1130
RectangularTessellator.renderTrianglesWithUniqueColors(DrawContext, RectangularTessellator$RectTile) line: 1168

4、在 resolvePick 方法中,先根据颜色值计算出所拾取的三角形的索引,然后得到三个顶点,然后调用 computeRayFromScreenPoint 根据屏幕坐标点得到一条射线,然后计算射线与三角形的交点,然后调用 computePositionFromPoint 根据交点的空间坐标的计算出对应的经纬度,再调用 getElevation 方法得到对应经纬度的高度
StereoOptionSceneController(BasicSceneController).doRepaint(DrawContext) line: 25
StereoOptionSceneController(AbstractSceneController).pick(DrawContext) line: 705
StereoOptionSceneController(AbstractSceneController).pickTerrain(DrawContext) line: 560
SectorGeometryList.pick(DrawContext, List<Point>) line: 238
RectangularTessellator$RectTile.pick(DrawContext, List<Point>) line: 277
RectangularTessellator.pick(DrawContext, RectTile, List<Point>) line: 1132
RectangularTessellator.resolvePick(DrawContext, RectangularTessellator$RectTile, Point) line: 1357

5、进行线段长度量算时,会调用 computeLength 方法,然后以是否使用地型两种方式对绘制的线进行差值,最终计算各个子线段的长度和
WorldWindowGLAutoDrawable.display(GLAutoDrawable) line: 315
WorldWindowGLAutoDrawable(WorldWindowImpl).callRenderingListeners(RenderingEvent) line: 236
MeasureToolController.stageChanged(RenderingEvent) line: 380
MeasureTool(AVListImpl).firePropertyChange(String, Object, Object) line: 282
PropertyChangeSupport.firePropertyChange(String, Object, Object) line: 263
PropertyChangeSupport.firePropertyChange(PropertyChangeEvent) line: 327
PropertyChangeSupport.fire(PropertyChangeListener[], PropertyChangeEvent) line: 335
MeasureToolPanel$1.propertyChange(PropertyChangeEvent) line: 159
MeasureToolPanel.access$6(MeasureToolPanel) line: 554
MeasureToolPanel.updateMetric() line: 556
MeasureTool.getLength() line: 978
Polyline.getLength(Globe) line: 284
LengthMeasurer.getLength(Globe) line: 250
LengthMeasurer.computeLength(Globe, boolean) line: 286
Vec4.distanceTo3(Vec4) line: 806

6、进行面积量算时,如果设置不使用地型,则是使用了凹多边形绘制的方式计算的投影面积
MeasureToolPanel.updateMetric() line: 567
MeasureTool.getArea() line: 991
SurfacePolygon(AbstractSurfaceShape).getArea(Globe, boolean) line: 428
AreaMeasurer.getArea(Globe) line: 123
AreaMeasurer.getProjectedArea(Globe) line: 151
AreaMeasurer.computeProjectedAreaGeometry(Globe) line: 244
AreaMeasurer.computeTriangleProjectedArea(Globe, float[], int, int, int) line: 256

7、如果面积量算时使用地型,则调用 computeSurfaceAreaSampling 方法,然后根据各个三角形的法线和坡度计算出面积然后求和
AreaMeasurer.getArea(Globe) line: 123
AreaMeasurer.getSurfaceArea(Globe) line: 136
AreaMeasurer.computeSurfaceAreaSampling(Globe, double) line: 337

转载于:https://www.cnblogs.com/redfler/archive/2012/11/12/2766734.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值