Example #1
0
  private GeoElement[] processPointVector(ExpressionNode n, ExpressionValue evaluate) {
    String label = n.getLabel();

    GeoVec2D p = (GeoVec2D) ((VectorValue) evaluate).getVector();

    boolean polar = p.getMode() == Kernel.COORD_POLAR;

    // we want z = 3 + i to give a (complex) GeoPoint not a GeoVector
    boolean complex = p.getMode() == Kernel.COORD_COMPLEX;

    GeoVec3D[] ret = new GeoVec3D[1];
    boolean isIndependent = n.isConstant();

    // make point if complex parts are present, e.g. 3 + i
    if (complex) {
      n.setForcePoint();
    }
    // make vector, if label begins with lowercase character
    else if (label != null) {
      if (!(n.isForcedPoint() || n.isForcedVector())) { // may be set by MyXMLHandler
        if (Character.isLowerCase(label.charAt(0))) n.setForceVector();
        else n.setForcePoint();
      }
    }
    boolean isVector = n.isVectorValue();

    if (isIndependent) {
      // get coords
      double x = p.getX();
      double y = p.getY();
      if (isVector) ret[0] = kernel.Vector(label, x, y);
      else ret[0] = kernel.Point(label, x, y, complex);
    } else {
      if (isVector) ret[0] = kernel.DependentVector(label, n);
      else ret[0] = kernel.DependentPoint(label, n, complex);
    }
    if (polar) {
      ret[0].setMode(Kernel.COORD_POLAR);
      ret[0].updateRepaint();
    } else if (complex) {
      ret[0].setMode(Kernel.COORD_COMPLEX);
      ret[0].updateRepaint();
    }
    return ret;
  }