package org.geogebra.common.geogebra3D.kernel3D.algos; import org.geogebra.common.kernel.Construction; import org.geogebra.common.kernel.Matrix.Coords; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.kernelND.GeoDirectionND; import org.geogebra.common.kernel.kernelND.GeoPointND; /** * Circular arc or sector defined by the circle's center, one point on the * circle (start point) and another point (angle for end-point), and * orientation. */ public class AlgoConicPartCircle3DOrientation extends AlgoConicPartCircle3D { private GeoDirectionND orientation; /** * constructor * * @param cons * @param label * @param center * @param startPoint * @param endPoint * @param orientation * @param type */ public AlgoConicPartCircle3DOrientation(Construction cons, String label, GeoPointND center, GeoPointND startPoint, GeoPointND endPoint, GeoDirectionND orientation, int type) { super(cons, label, center, startPoint, endPoint, orientation, type); } @Override protected void setOrientation(GeoDirectionND orientation) { this.orientation = orientation; } @Override protected boolean getPositiveOrientation() { return conic.getMainDirection() .dotproduct(orientation.getDirectionInD3()) >= 0; } @Override protected void setInput() { setInput(4); input[3] = (GeoElement) orientation; } @Override protected void semiCircle(Coords center, Coords v1) { AlgoCircle3DAxisPoint.setCircle(conic, conic.getCoordSys(), center, v1, orientation.getDirectionInD3()); setConicPart(0, Math.PI); } }