绘制PointPlacemarks的顺序
有没有办法在World Wind中修复PointPlacemarks的绘制顺序?
即使在地标示例中,地标B和音频地标的排序也可以通过在特定缩放级别移动鼠标来改变:
到目前为止,我尝试过:
- 将PointPlacemarks添加到单独的图层
- 使用
RenderableLayer.setRenderables
而不是RenderableLayer.addRenderable
- World Wind论坛上的相关问题
Hacky解决方案 (需要修改World Wind源代码)
在gov.nasa.worldwind.render.DrawContextImpl
更改orderedRenderables
protected PriorityQueue orderedRenderables = new PriorityQueue (100, new Comparator () { public int compare(OrderedRenderableEntry orA, OrderedRenderableEntry orB) { double eA = orA.distanceFromEye; double eB = orB.distanceFromEye; return eA > eB ? -1 : eA == eB ? (orA.time < orB.time ? -1 : orA.time == orB.time ? 0 : 1) : 1; } });
至
protected Queue orderedRenderables = new ArrayDeque<>();
(或修改比较器以做你想要的)。 这将修复绘图顺序。
备用解决方案 (不需要修改World Wind源代码)
扩展PointPlacemark
并覆盖makeOrderedRenderable()
:
public class OrderedPointPlacemark extends PointPlacemark { public OrderedPointPlacemark(Position position) { super(position); } @Override protected void makeOrderedRenderable(DrawContext dc) { super.makeOrderedRenderable(dc); if (this.intersectsFrustum(dc) || this.isDrawLine(dc)) { dc.pollOrderedRenderables(); dc.addOrderedSurfaceRenderable(this); } } }