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.AlgoDilate;
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.geos.GeoNumberValue;
import org.geogebra.common.kernel.kernelND.GeoPointND;
/**
* Algo for dilate at 3D point
*
* @author mathieu
*
*/
public class AlgoDilate3D extends AlgoDilate {
/**
* dilate at point
*
* @param cons
* construction
* @param A
* point dilated
* @param r
* factor
* @param S
* reference point
*/
public AlgoDilate3D(Construction cons, GeoElement A, GeoNumberValue r,
GeoPointND S) {
super(cons, A, r, S);
}
@Override
protected GeoElement copy(GeoElement geo) {
return kernel.copy3D(geo);
}
@Override
protected GeoElement getResultTemplate(GeoElement geo) {
if ((geo instanceof GeoFunction
|| geo instanceof GeoCurveCartesian) /*
* && mirror .
* isGeoElement3D ( )
*/) {
return new GeoCurveCartesian3D(cons);
}
return super.getResultTemplate(geo);
}
@Override
protected GeoElement copyInternal(Construction cons1, GeoElement geo) {
return kernel.copyInternal3D(cons1, geo);
}
@Override
protected void setOutGeo() {
if (inGeo instanceof GeoFunction /* && mirror.isGeoElement3D() */) {
AlgoTransformation3D.toGeoCurveCartesian(kernel,
(GeoFunction) inGeo, (GeoCurveCartesian3D) outGeo);
} else {
super.setOutGeo();
}
}
@Override
protected Coords getPointCoords() {
return S.getInhomCoordsInD3();
}
}