package org.geogebra.common.geogebra3D.kernel3D.commands;
import org.geogebra.common.geogebra3D.kernel3D.algos.AlgoUnitVector3D;
import org.geogebra.common.kernel.Kernel;
import org.geogebra.common.kernel.algos.AlgoUnitVector;
import org.geogebra.common.kernel.algos.CmdUnitVector;
import org.geogebra.common.kernel.arithmetic.Command;
import org.geogebra.common.kernel.geos.GeoElement;
import org.geogebra.common.kernel.kernelND.GeoDirectionND;
import org.geogebra.common.kernel.kernelND.GeoLineND;
import org.geogebra.common.kernel.kernelND.GeoVectorND;
import org.geogebra.common.main.MyError;
/**
* UnitOrthogonalVector[ <GeoPlane3D> ]
*/
public class CmdUnitVector3D extends CmdUnitVector {
/**
* @param kernel
* Kernel
* @param normalize
* whether this is UnitVector or Direction command
*/
public CmdUnitVector3D(Kernel kernel, boolean normalize) {
super(kernel, normalize);
}
@Override
protected GeoElement[] processNotLineNotVector(Command c, GeoElement arg)
throws MyError {
if (arg instanceof GeoDirectionND) {
AlgoUnitVector3D algo = new AlgoUnitVector3D(cons,
(GeoDirectionND) arg, normalize);
algo.getVector().setLabel(c.getLabel());
GeoElement[] ret = { (GeoElement) algo.getVector() };
return ret;
}
return super.processNotLineNotVector(c, arg);
}
@Override
protected AlgoUnitVector algo(GeoLineND line) {
if (line.isGeoElement3D()) {
return new AlgoUnitVector3D(cons, line, normalize);
}
return super.algo(line);
}
@Override
protected AlgoUnitVector algo(GeoVectorND v) {
if (v.isGeoElement3D()) {
return new AlgoUnitVector3D(cons, v, normalize);
}
return super.algo(v);
}
}