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.CmdAngularBisector;
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.GeoPointND;
import org.geogebra.common.main.MyError;
/**
* 3D processor for AngularBisector
*/
public class CmdAngularBisector3D extends CmdAngularBisector {
/**
* @param kernel
* kernel
*/
public CmdAngularBisector3D(Kernel kernel) {
super(kernel);
}
@Override
protected GeoElement[] process4(GeoElement[] arg, boolean[] ok, Command c)
throws MyError {
// angular bisector of three points
if ((ok[0] = (arg[0].isGeoPoint())) && (ok[1] = (arg[1].isGeoPoint()))
&& (ok[2] = (arg[2].isGeoPoint()))
&& (ok[3] = (arg[3] instanceof GeoDirectionND))) {
GeoElement[] ret = { kernelA.getManager3D().AngularBisector3D(
c.getLabel(), (GeoPointND) arg[0], (GeoPointND) arg[1],
(GeoPointND) arg[2], (GeoDirectionND) arg[3]) };
return ret;
}
throw argErr(app, c, getBadArg(ok, arg));
}
@Override
protected GeoElement[] angularBisector(String[] labels, GeoLineND g,
GeoLineND h) {
if (g.isGeoElement3D() || h.isGeoElement3D()) {
GeoElement[] ret = kernelA.getManager3D().AngularBisector3D(labels,
g, h);
return ret;
}
return super.angularBisector(labels, g, h);
}
@Override
protected GeoElement angularBisector(String label, GeoPointND A,
GeoPointND B, GeoPointND C) {
if (A.isGeoElement3D() || B.isGeoElement3D() || C.isGeoElement3D()) {
return kernelA.getManager3D().AngularBisector3D(label, A, B, C);
}
return super.angularBisector(label, A, B, C);
}
}