package org.geogebra.common.geogebra3D.kernel3D.algos; import org.geogebra.common.geogebra3D.kernel3D.geos.GeoCurveCartesian3D; import org.geogebra.common.kernel.Construction; import org.geogebra.common.kernel.Matrix.Coords; import org.geogebra.common.kernel.algos.AlgoTranslate; import org.geogebra.common.kernel.geos.GeoCurveCartesian; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.geos.GeoFunction; import org.geogebra.common.kernel.kernelND.GeoVectorND; public class AlgoTranslate3D extends AlgoTranslate { public AlgoTranslate3D(Construction cons, GeoElement in, GeoElement v) { super(cons, in, v); } @Override protected Coords getVectorCoords() { GeoVectorND vec = (GeoVectorND) v; return vec.getCoordsInD3(); } @Override protected GeoElement copy(GeoElement geo) { if (v.isGeoElement3D()) { return kernel.copy3D(geo); } return super.copy(geo); } @Override protected GeoElement getResultTemplate(GeoElement geo) { if ((geo instanceof GeoFunction || geo instanceof GeoCurveCartesian) && v.isGeoElement3D()) { return new GeoCurveCartesian3D(cons); } return super.getResultTemplate(geo); } @Override protected GeoElement copyInternal(Construction cons, GeoElement geo) { if (v.isGeoElement3D()) { return kernel.copyInternal3D(cons, geo); } return super.copyInternal(cons, geo); } @Override protected void setOutGeo() { if (inGeo instanceof GeoFunction && v.isGeoElement3D()) { AlgoTransformation3D.toGeoCurveCartesian(kernel, (GeoFunction) inGeo, (GeoCurveCartesian3D) outGeo); } else { super.setOutGeo(); } } }