Point3f getCoordinate(int i, boolean allowFractional, boolean doConvert, boolean implicitFractional)
			throws ScriptException {
		// syntax: {1/2, 1/2, 1/3} or {0.5/, 0.5, 0.5}
		// ONE fractional sign anywhere is enough to make ALL fractional;
		// denominator of 1 can be implied;
		// commas not necessary if denominator is present or not a fraction
		if (i >= statementLength)
			coordinateExpected();
		coordinatesAreFractional = implicitFractional;
		if (statement[i++].tok != Token.leftbrace)
			coordinateExpected();
		Point3f pt = new Point3f();
		out: for (int j = i; j + 1 < statementLength; j++) {
			switch (statement[j].tok) {
			case Token.slash:
				coordinatesAreFractional = true;
			case Token.rightbrace:
				break out;
			}
		}
		if (coordinatesAreFractional && !allowFractional)
			evalError(GT._("fractional coordinates are not allowed in this context"));
		pt.x = coordinateValue(i);
		pt.y = coordinateValue(++pcLastExpressionInstruction);
		pt.z = coordinateValue(++pcLastExpressionInstruction);
		if (statement[++pcLastExpressionInstruction].tok != Token.rightbrace)
			coordinateExpected();
		if (coordinatesAreFractional && doConvert)
			viewer.convertFractionalCoordinates(pt);
		return pt;
	}