Example #1
0
  @SuppressWarnings("unchecked")
  @Override
  public T interpretMouseDragging(double[] spt, double[] ept) {
    T croi = null; // return null if not a valid event

    switch (status) {
      case RMOVE:
        croi = (T) roi.copy();
        ept[0] -= spt[0];
        ept[1] -= spt[1];
        croi.addPoint(ept);
        break;
      case NONE:
        croi = (T) roi.copy();
        //			croi.setEndPoint(ept);
        break;
      case REORIENT:
        croi = reorient(ept);
        break;
      case RESIZE:
        croi = resize(spt, ept);
        break;
      case ROTATE:
        //			croi = (T) roi.copy();
        //			double ang = croi.getAngleRelativeToMidPoint(ept);
        //			double[] mpt = croi.getMidPoint();
        //			croi.setAngle(ang);
        //			croi.setMidPoint(mpt);
        break;
      case CMOVE:
        break;
      case CRMOVE:
        break;
    }

    if (croi == null) {
      throw new UnsupportedOperationException("Not implemented yet");
    }

    return croi;
  }
Example #2
0
  /**
   * @param spt starting point
   * @param pt
   * @return resized ROI
   */
  @SuppressWarnings("unchecked")
  public T resize(double[] spt, double[] pt) {
    T rroi = null;

    if (!closed && handle == 4) return rroi;

    rroi = (T) roi.copy();
    pt[0] -= spt[0];
    pt[1] -= spt[1];

    switch (handle) {
      case -1: // new definition
        rroi.setPoint(spt);
        break;
      case 0: // focus/centre
        rroi.addPoint(pt);
        break;
      case 1: // periapsis
        if (rroi instanceof CircularROI) {
          if (pt[0] == 0) break;
          CircularROI lroi = (CircularROI) rroi;
          // work out perpendicular displacement
          double r = lroi.getRadius();
          r -= pt[0];
          if (r < 0) r = 0;
          lroi.setRadius(r);
        } else if (rroi instanceof OrientableROIBase) {
          // work out perpendicular displacement
          double a = rroi.getAngle();
          double d = pt[0] * Math.cos(a) + pt[1] * Math.sin(a);
          if (d == 0) break;

          if (rroi instanceof EllipticalROI) {
            EllipticalROI lroi = (EllipticalROI) rroi;
            double r = lroi.getSemiAxis(0) - d;
            if (r < 0) r = 0;
            lroi.setSemiAxis(0, r);
          } else if (rroi instanceof ParabolicROI) {
            ParabolicROI lroi = (ParabolicROI) rroi;
            double p = lroi.getFocalParameter() - d;
            if (p < 0) p = 0;
            lroi.setFocalParameter(p);
          } else if (rroi instanceof HyperbolicROI) {
            HyperbolicROI lroi = (HyperbolicROI) rroi;
            double l = lroi.getSemilatusRectum();
            double e = lroi.getEccentricity();
            double x = l / (1 + e) - d;
            e = l / x - 1;
            if (e < 1) e = 1;
            lroi.setEccentricity(e);
          }
        }
        break;
      case 2:
        if (rroi instanceof CircularROI) {
          if (pt[1] == 0) break;
          CircularROI lroi = (CircularROI) rroi;
          double r = lroi.getRadius();
          r += pt[1];
          if (r < 0) r = 0;
          lroi.setRadius(r);
        } else if (rroi instanceof OrientableROIBase) {
          // work out perpendicular displacement
          double a = rroi.getAngle();
          double d = -pt[0] * Math.sin(a) + pt[1] * Math.cos(a);
          if (d == 0) break;

          if (rroi instanceof EllipticalROI) {
            EllipticalROI lroi = (EllipticalROI) rroi;
            // work out perpendicular displacement
            double r = lroi.getSemiAxis(1) + d;
            if (r < 0) r = 0;
            lroi.setSemiAxis(1, r);
          } else if (rroi instanceof ParabolicROI) {
            ParabolicROI lroi = (ParabolicROI) rroi;
            double p = lroi.getFocalParameter() + 0.5 * d;
            if (p < 0) p = 0;
            lroi.setFocalParameter(p);
          } else if (rroi instanceof HyperbolicROI) {
            HyperbolicROI lroi = (HyperbolicROI) rroi;
            double l = lroi.getSemilatusRectum() + d;
            if (l < 0) l = 0;
            lroi.setSemilatusRectum(l);
          }
        }
        break;
      case 3:
        if (rroi instanceof CircularROI) {
          if (pt[1] == 0) break;
          CircularROI lroi = (CircularROI) rroi;
          double r = lroi.getRadius();
          r -= pt[1];
          if (r < 0) r = 0;
          lroi.setRadius(r);
        } else if (rroi instanceof OrientableROIBase) {
          // work out perpendicular displacement
          double a = rroi.getAngle();
          double d = -pt[0] * Math.sin(a) + pt[1] * Math.cos(a);
          if (d == 0) break;

          if (rroi instanceof EllipticalROI) {
            EllipticalROI lroi = (EllipticalROI) rroi;
            // work out perpendicular displacement
            double r = lroi.getSemiAxis(1) - d;
            if (r < 0) r = 0;
            lroi.setSemiAxis(1, r);
          } else if (rroi instanceof ParabolicROI) {
            ParabolicROI lroi = (ParabolicROI) rroi;
            double p = lroi.getFocalParameter() - 0.5 * d;
            if (p < 0) p = 0;
            lroi.setFocalParameter(p);
          } else if (rroi instanceof HyperbolicROI) {
            HyperbolicROI lroi = (HyperbolicROI) rroi;
            double l = lroi.getSemilatusRectum() - d;
            if (l < 0) l = 0;
            lroi.setSemilatusRectum(l);
          }
        }
        break;
      case 4:
        if (closed) {
          if (rroi instanceof CircularROI) {
            if (pt[0] == 0) break;
            CircularROI lroi = (CircularROI) rroi;
            double r = lroi.getRadius();
            r += pt[0];
            if (r < 0) r = 0;
            lroi.setRadius(r);
          } else if (rroi instanceof EllipticalROI) {
            EllipticalROI lroi = (EllipticalROI) rroi;
            // work out perpendicular displacement
            double a = lroi.getAngle();
            double d = pt[0] * Math.cos(a) + pt[1] * Math.sin(a);
            if (d == 0) break;
            double r = lroi.getSemiAxis(0) + d;
            if (r < 0) r = 0;
            lroi.setSemiAxis(0, r);
          }
        }
        break;
      default:
        break;
    }

    return rroi;
  }