package org.geogebra.common.geogebra3D.kernel3D.algos;
import org.geogebra.common.geogebra3D.kernel3D.geos.GeoPlane3D;
import org.geogebra.common.geogebra3D.kernel3D.geos.GeoQuadric3DLimited;
import org.geogebra.common.geogebra3D.kernel3D.geos.GeoQuadric3DPart;
import org.geogebra.common.kernel.Construction;
import org.geogebra.common.kernel.kernelND.GeoConicND;
import org.geogebra.common.kernel.kernelND.GeoQuadricND;
public class AlgoIntersectPlaneQuadricPart
extends AlgoIntersectPlaneQuadricLimited {
private GeoConicND bottom, top;
private AlgoQuadricEnds algoEnds = null;
public AlgoIntersectPlaneQuadricPart(Construction cons, GeoPlane3D plane,
GeoQuadricND quadric) {
super(cons, plane, quadric);
}
@Override
protected void end() {
if (quadric.getParentAlgorithm() instanceof AlgoQuadricSide) {
// use quadric limited parent ends
GeoQuadric3DLimited parent = ((AlgoQuadricSide) quadric
.getParentAlgorithm()).getInputQuadric();
bottom = parent.getBottom();
top = parent.getTop();
} else {
algoEnds = new AlgoQuadricEnds(cons, quadric);
cons.removeFromConstructionList(algoEnds);
bottom = algoEnds.getSection1();
top = algoEnds.getSection2();
}
super.end();
}
@Override
public void compute() {
if (algoEnds != null) {
algoEnds.compute();
}
super.compute();
}
@Override
protected GeoConicND getBottom() {
return bottom;
}
@Override
protected GeoConicND getTop() {
return top;
}
@Override
protected GeoQuadric3DPart getSide() {
return (GeoQuadric3DPart) quadric;
}
@Override
protected double getBottomParameter() {
return ((GeoQuadric3DPart) quadric).getBottomParameter();
}
@Override
protected double getTopParameter() {
return ((GeoQuadric3DPart) quadric).getTopParameter();
}
}