package org.geogebra.common.kernel.commands; import org.geogebra.common.kernel.CircularDefinitionException; import org.geogebra.common.kernel.Kernel; import org.geogebra.common.kernel.algos.AlgoTranslateVector; import org.geogebra.common.kernel.arithmetic.Command; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.geos.GeoPolygon; import org.geogebra.common.kernel.geos.GeoVec3D; import org.geogebra.common.kernel.geos.GeoVector; import org.geogebra.common.kernel.geos.Translateable; import org.geogebra.common.kernel.kernelND.GeoPointND; import org.geogebra.common.main.MyError; /** * Translate[ <GeoPoint>, <GeoVector> ] Translate[ <GeoLine>, <GeoVector> ] * Translate[ <GeoConic>, <GeoVector> ] Translate[ <GeoFunction>, <GeoVector> ] * Translate[ <GeoVector>, <GeoPoint> ] // set start point Translate[ * <GeoPolygon>, <GeoVector> ] * */ public class CmdTranslate extends CommandProcessor { /** * Create new command processor * * @param kernel * kernel */ public CmdTranslate(Kernel kernel) { super(kernel); } @Override public GeoElement[] process(Command c) throws MyError, CircularDefinitionException { String label = c.getLabel(); int n = c.getArgumentNumber(); boolean[] ok = new boolean[n]; GeoElement[] arg; GeoElement[] ret = new GeoElement[1]; switch (n) { case 2: arg = resArgs(c); // translate object if ((ok[0] = (arg[0].isGeoVector())) && (ok[1] = (arg[1].isGeoPoint()))) { AlgoTranslateVector algo = getAlgoTranslateVector(label, arg[0], arg[1]); ret[0] = (GeoElement) algo.getTranslatedVector(); return ret; } else if ((ok[0] = (arg[0] instanceof Translateable || arg[0] instanceof GeoPolygon || arg[0].isGeoList())) && (ok[1] = (arg[1] instanceof GeoVec3D))) { // 2D Vectors, Points GeoVec3D v = (GeoVec3D) arg[1]; ret = getAlgoDispatcher().Translate(label, arg[0], v); return ret; } // syntax error else { if (!ok[0]) { throw argErr(app, c, arg[0]); } throw argErr(app, c, arg[1]); } default: throw argNumErr(app, c, n); } } /** * * @param label * label * @param v * input vector * @param P * starting point * @return new algo translate vector */ protected AlgoTranslateVector getAlgoTranslateVector(String label, GeoElement v, GeoElement P) { return new AlgoTranslateVector(cons, label, (GeoVector) v, (GeoPointND) P); } }