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; }