package org.geogebra.common.kernel;
import org.geogebra.common.kernel.algos.AlgoShearOrStretch;
import org.geogebra.common.kernel.algos.AlgoTransformation;
import org.geogebra.common.kernel.geos.GeoElement;
import org.geogebra.common.kernel.geos.GeoNumberValue;
import org.geogebra.common.kernel.geos.GeoNumeric;
import org.geogebra.common.kernel.geos.GeoVec3D;
/**
* Shear or stretch
*
* @author Zbynek
*
*/
public class TransformShearOrStretch extends Transform {
private boolean shear;
private GeoVec3D line;
private GeoNumberValue num;
/**
* @param cons
* construction
* @param line
* line determining shear/stretch direction
* @param num
* shear/stretch ratio
* @param shear
* true to shear, false to stretch
*/
public TransformShearOrStretch(Construction cons, GeoVec3D line,
GeoNumeric num, boolean shear) {
this.shear = shear;
this.line = line;
this.num = num;
this.cons = cons;
}
@Override
protected AlgoTransformation getTransformAlgo(GeoElement geo) {
AlgoShearOrStretch algo = new AlgoShearOrStretch(cons, geo, line, num,
shear);
return algo;
}
@Override
public boolean isSimilar() {
return false;
}
@Override
public boolean changesOrientation() {
return !shear && num.getDouble() < 0;
}
}