package org.geogebra.common.geogebra3D.kernel3D.algos; import org.geogebra.common.kernel.Construction; import org.geogebra.common.kernel.Kernel; import org.geogebra.common.kernel.Matrix.Coords; import org.geogebra.common.kernel.arithmetic.NumberValue; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.kernelND.GeoPointND; /** * @author ggb3D * */ public abstract class AlgoQuadricPointNumber extends AlgoQuadric { private GeoPointND origin; /** * @param c * construction */ public AlgoQuadricPointNumber(Construction c, String label, GeoPointND origin, GeoElement secondInput, NumberValue r, AlgoQuadricComputer computer) { super(c, secondInput, r, computer); this.origin = origin; setInputOutput(new GeoElement[] { (GeoElement) origin, secondInput, (GeoElement) r }, new GeoElement[] { getQuadric() }); compute(); getQuadric().setLabel(label); } @Override public void compute() { // check origin if (!((GeoElement) origin).isDefined() || origin.isInfinite()) { getQuadric().setUndefined(); return; } // check direction Coords d = getDirection(); if (d.equalsForKernel(0, Kernel.STANDARD_PRECISION)) { getQuadric().setUndefined(); return; } // check number double r = getComputer() .getNumber(((NumberValue) getNumber()).getDouble()); if (Double.isNaN(r)) { getQuadric().setUndefined(); return; } // compute the quadric getQuadric().setDefined(); getComputer().setQuadric(getQuadric(), origin.getInhomCoordsInD3(), d, null, r, r); } /** * * @return origin point */ protected GeoPointND getOrigin() { return origin; } /** * * @return plain name */ abstract protected String getPlainName(); }