/**
   * Create new instance
   *
   * @param type the type of shape.
   * @param env the area that is visible. If shape is not in area then skip.
   * @param mt the transform to go from data to the envelope (and that should be used to transform
   *     the shape coords)
   * @param hasOpacity
   */
  public MultiPointHandler(
      ShapeType type, Envelope env, Rectangle screenSize, MathTransform mt, boolean hasOpacity)
      throws TransformException {
    if (mt == null) {
      throw new NullPointerException();
    }

    this.type = type;
    this.bbox = env;
    this.mt = mt;

    screenMap = GeometryHandlerUtilities.calculateScreenSize(screenSize, hasOpacity);

    Point2D span = GeometryHandlerUtilities.calculateSpan(mt, 0, 0);
    this.spanx = span.getX();
    this.spany = span.getY();
  }