Java 点位置标记的绘制顺序

Java 点位置标记的绘制顺序,java,worldwind,Java,Worldwind,有没有办法确定“世界风”中点位置标记的绘图顺序 即使在Placemark B和音频Placemark的顺序中,也可以通过在特定的缩放级别移动鼠标来更改: 到目前为止,我已经尝试: 将点放置标记添加到单独的图层 使用RenderableLayer.setRenderables而不是RenderableLayer.addRenderable 黑客解决方案(需要修改World Wind源代码) 在gov.nasa.worldwind.render.DrawContextImplchangeor

有没有办法确定“世界风”中点位置标记的绘图顺序

即使在Placemark B和音频Placemark的顺序中,也可以通过在特定的缩放级别移动鼠标来更改:

到目前为止,我已经尝试:

  • 将点放置标记添加到单独的图层
  • 使用
    RenderableLayer.setRenderables
    而不是
    RenderableLayer.addRenderable

    • 黑客解决方案(需要修改World Wind源代码)

      gov.nasa.worldwind.render.DrawContextImpl
      change
      orderedRenderables
      from

      protected PriorityQueue<OrderedRenderableEntry> orderedRenderables =
          new PriorityQueue<OrderedRenderableEntry>(100, new Comparator<OrderedRenderableEntry>()
          {
              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;
              }
          });
      

      黑客解决方案(需要修改World Wind源代码)

      gov.nasa.worldwind.render.DrawContextImpl
      change
      orderedRenderables
      from

      protected PriorityQueue<OrderedRenderableEntry> orderedRenderables =
          new PriorityQueue<OrderedRenderableEntry>(100, new Comparator<OrderedRenderableEntry>()
          {
              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;
              }
          });
      
      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);
              }
          }
      }