package org.geogebra.common.geogebra3D.kernel3D.commands; import org.geogebra.common.kernel.Kernel; import org.geogebra.common.kernel.arithmetic.Command; import org.geogebra.common.kernel.commands.CmdLine; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.kernelND.GeoLineND; import org.geogebra.common.kernel.kernelND.GeoPointND; import org.geogebra.common.kernel.kernelND.GeoVectorND; import org.geogebra.common.main.MyError; /** * Line[ <GeoPoint3D>, <GeoPoint3D> ] or CmdLine */ public class CmdLine3D extends CmdLine { /** * @param kernel * Kernel */ public CmdLine3D(Kernel kernel) { super(kernel); } @Override public GeoElement[] process(Command c) throws MyError { int n = c.getArgumentNumber(); boolean[] ok = new boolean[n]; GeoElement[] arg; if (n == 2) { arg = resArgs(c); if (arg[0].isGeoElement3D() || arg[1].isGeoElement3D()) { GeoElement geo0 = arg[0]; GeoElement geo1 = arg[1]; if ((ok[0] = (geo0.isGeoPoint())) && (ok[1] = (geo1.isGeoPoint()))) { // line between two // 3D points GeoElement[] ret = { kernelA.getManager3D().Line3D(c.getLabel(), (GeoPointND) geo0, (GeoPointND) geo1) }; return ret; } else if ((ok[0] = (geo0.isGeoPoint())) && (ok[1] = (geo1.isGeoVector()))) { // line directed GeoElement[] ret = { (GeoElement) kernelA.getManager3D() .Line3D(c.getLabel(), (GeoPointND) geo0, (GeoVectorND) geo1) }; return ret; } else if ((ok[0] = (geo0.isGeoPoint())) && (ok[1] = (geo1 instanceof GeoLineND))) { // line // parallel GeoElement[] ret = { (GeoElement) kernelA.getManager3D() .Line3D(c.getLabel(), (GeoPointND) geo0, (GeoLineND) geo1) }; return ret; } } } return super.process(c); } }