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