void drawLcaoCartoon(String lcaoCartoon, Vector3f z, Vector3f x) {
		Vector3f y = new Vector3f();
		boolean isReverse = (lcaoCartoon.length() > 0 && lcaoCartoon.charAt(0) == '-');
		if (isReverse)
			lcaoCartoon = lcaoCartoon.substring(1);
		colorPos = colorPosLCAO;
		colorNeg = colorNegLCAO;
		int sense = (isReverse ? -1 : 1);
		y.cross(z, x);
		String id = (currentMesh == null ? "lcao" + (++nLCAO) + "_" + lcaoCartoon : currentMesh.thisID);
		if (currentMesh == null)
			allocMesh(id);
		defaultColix = Graphics3D.getColix(colorPos);

		if (lcaoCartoon.equals("px")) {
			currentMesh.thisID += "a";
			createLcaoLobe(x, sense);
			setProperty("thisID", id + "b", null);
			createLcaoLobe(x, -sense);
			currentMesh.colix = Graphics3D.getColix(colorNeg);
			return;
		}
		if (lcaoCartoon.equals("py")) {
			currentMesh.thisID += "a";
			createLcaoLobe(y, sense);
			setProperty("thisID", id + "b", null);
			createLcaoLobe(y, -sense);
			currentMesh.colix = Graphics3D.getColix(colorNeg);
			return;
		}
		if (lcaoCartoon.equals("pz")) {
			currentMesh.thisID += "a";
			createLcaoLobe(z, sense);
			setProperty("thisID", id + "b", null);
			createLcaoLobe(z, -sense);
			currentMesh.colix = Graphics3D.getColix(colorNeg);
			return;
		}
		if (lcaoCartoon.equals("pxa")) {
			createLcaoLobe(x, sense);
			return;
		}
		if (lcaoCartoon.equals("pxb")) {
			createLcaoLobe(x, -sense);
			return;
		}
		if (lcaoCartoon.equals("pya")) {
			createLcaoLobe(y, sense);
			return;
		}
		if (lcaoCartoon.equals("pyb")) {
			createLcaoLobe(y, -sense);
			return;
		}
		if (lcaoCartoon.equals("pza")) {
			createLcaoLobe(z, sense);
			return;
		}
		if (lcaoCartoon.equals("pzb")) {
			createLcaoLobe(z, -sense);
			return;
		}
		if (lcaoCartoon.indexOf("sp") == 0 || lcaoCartoon.indexOf("lp") == 0) {
			createLcaoLobe(z, sense);
			return;
		}

		// assume s
		createLcaoLobe(null, 1);
		return;
	}