/** {@inheritDoc} */
  @Override
  protected PickedObject createPickedObject(DrawContext dc, Color pickColor) {
    PickedObject po = super.createPickedObject(dc, pickColor);

    // Add the KMLPlacemark to the picked object as the context of the picked object.
    po.setValue(AVKey.CONTEXT, this.parent);
    return po;
  }
  protected PickedObject getCurrentSelection() {
    if (this.sceneController == null) return null;

    PickedObjectList pol = this.getSceneController().getPickedObjectList();
    if (pol == null || pol.size() < 1) return null;

    PickedObject top = pol.getTopPickedObject();
    return top.isTerrain() ? null : top;
  }
  public Position getCurrentPosition() {
    if (this.sceneController == null) return null;

    PickedObjectList pol = this.getSceneController().getPickedObjectList();
    if (pol == null || pol.size() < 1) return null;

    Position p = null;
    PickedObject top = pol.getTopPickedObject();
    if (top != null && top.hasPosition()) p = top.getPosition();
    else if (pol.getTerrainObject() != null) p = pol.getTerrainObject().getPosition();

    return p;
  }
  @SuppressWarnings({"UnusedDeclaration"})
  protected void doMoved(PositionEvent event) {
    if (this.active
        && rubberBandTarget != null
        && this.measureTool.getWwd().getObjectsAtCurrentPosition() != null
        && this.measureTool.getWwd().getObjectsAtCurrentPosition().getTerrainObject() != null) {
      if (!isFreeHand()
          || (!measureTool.getMeasureShapeType().equals(MeasureTool.SHAPE_PATH)
              && !measureTool.getMeasureShapeType().equals(MeasureTool.SHAPE_POLYGON))) {
        // Rubber band - Move control point and update shape
        Position lastPosition = rubberBandTarget.getPosition();
        PickedObjectList pol = measureTool.getWwd().getObjectsAtCurrentPosition();
        PickedObject to = pol.getTerrainObject();
        rubberBandTarget.setPosition(new Position(to.getPosition(), 0));
        measureTool.moveControlPoint(rubberBandTarget);
        measureTool.firePropertyChange(
            MeasureTool.EVENT_POSITION_REPLACE, lastPosition, rubberBandTarget.getPosition());
        measureTool.getWwd().redraw();
      } else {
        // Free hand - Compute distance from current control point (rubber band target)
        Position lastPosition = rubberBandTarget.getPosition();
        Position newPosition = measureTool.getWwd().getCurrentPosition();
        double distance =
            LatLon.greatCircleDistance(lastPosition, newPosition).radians
                * measureTool.getWwd().getModel().getGlobe().getRadius();
        if (distance >= freeHandMinSpacing) {
          // Add new control point
          measureTool.addControlPoint();
          rubberBandTarget =
              (MeasureTool.ControlPoint)
                  getMeasureTool()
                      .getControlPoints()
                      .get(getMeasureTool().getControlPoints().size() - 1);
          measureTool.getWwd().redraw();
        }
      }
    } else if (this.moving
        && movingTarget != null
        && measureTool.getWwd().getCurrentPosition() != null) {
      // Moving the whole shape
      Position lastPosition = movingTarget.getPosition();
      Position newPosition = measureTool.getWwd().getCurrentPosition();
      this.moveToPosition(lastPosition, newPosition);

      // Update the tool tip to follow the shape as it moves.
      if (measureTool.isShowAnnotation()) measureTool.updateAnnotation(movingTarget.getPosition());

      measureTool.getWwd().redraw();
    }
  }
Esempio n. 5
0
  public void selected(SelectEvent event) {
    // Select/unselect object on left click,
    // or follow URL if one was clicked
    if (event.getEventAction().equals(SelectEvent.LEFT_CLICK)) {
      if (event.hasObjects()) {
        if (event.getTopObject() instanceof Annotation) {
          // if URL was clicked, open in browser
          PickedObject po = event.getTopPickedObject();

          if (po.getValue(AVKey.URL) != null && po.getValue(AVKey.URL) instanceof String) {
            // Execute the URL.
            this.processUrl((String) po.getValue(AVKey.URL), true);

            return;
          }
        }

        if (event.getTopObject() instanceof Selectable) {
          if (this.selectedObject != event.getTopObject()
              || (this.selectedObject instanceof Selectable
                  && !((Selectable) this.selectedObject).isSelected())) {
            // either a new object was clicked, or this.selectedObject was clicked
            // but it's been unselected already from outside this listener
            select(
                event.getTopObject(),
                event.getTopPickedObject().getParentLayer(),
                event.getTopPickedObject().getPosition());
            return;
          } else {
            // same, already selected object clikcked
            select(null, null, null);
            return;
          }
        }
      }
    } // Highlight on rollover
    else if (event.getEventAction().equals(SelectEvent.ROLLOVER)) {
      if (!(event.getTopObject() instanceof DialogAnnotation)) {
        highlight(event.getTopObject());

        // if URL was rollod-over, show it in status bar
        PickedObject po = event.getTopPickedObject();

        if (po != null
            && po.getValue(AVKey.URL) != null
            && po.getValue(AVKey.URL) instanceof String) {
          // show the URL.
          this.processUrl((String) po.getValue(AVKey.URL), false);

          return;
        }
      } // if
    }

    setStatusText("");
  }
Esempio n. 6
0
    @Override
    public void render(DrawContext dc) {
      if (dc.isPickingMode() && this.isResizeable()) return;

      // This is called twice: once during normal rendering, then again during ordered surface
      // rendering. During
      // normal renering we render both the interior and border shapes. During ordered surface
      // rendering, both
      // shapes are already added to the DrawContext and both will be individually processed.
      // Therefore we just
      // call our superclass behavior
      if (dc.isOrderedRenderingMode()) {
        super.render(dc);
        return;
      }

      if (!this.isResizeable()) {
        if (this.hasSelection()) {
          this.doRender(dc);
        }
        return;
      }

      PickedObjectList pos = dc.getPickedObjects();
      PickedObject terrainObject = pos != null ? pos.getTerrainObject() : null;

      if (terrainObject == null) return;

      if (this.getStartPosition() != null) {
        Position end = terrainObject.getPosition();
        if (!this.getStartPosition().equals(end)) {
          this.setEndPosition(end);
          this.setSector(Sector.boundingSector(this.getStartPosition(), this.getEndPosition()));
          this.doRender(dc);
        }
      } else {
        this.setStartPosition(pos.getTerrainObject().getPosition());
      }
    }