package org.geogebra.desktop.geogebra3D.gui.dialogs;
import org.geogebra.common.euclidian.EuclidianController;
import org.geogebra.common.euclidian.EuclidianView;
import org.geogebra.common.gui.dialog.handler.NumberInputHandler;
import org.geogebra.common.kernel.geos.GeoElement;
import org.geogebra.common.kernel.geos.GeoPolygon;
import org.geogebra.common.kernel.kernelND.GeoDirectionND;
import org.geogebra.common.kernel.kernelND.GeoLineND;
import org.geogebra.common.kernel.kernelND.GeoPointND;
import org.geogebra.desktop.geogebra3D.App3D;
import org.geogebra.desktop.geogebra3D.euclidianForPlane.EuclidianViewForPlaneD;
import org.geogebra.desktop.gui.dialog.DialogManagerD;
import org.geogebra.desktop.gui.dialog.InputDialogD;
import org.geogebra.desktop.main.AppD;
/**
* 3D version of the dialog manager.
*/
public class DialogManager3D extends DialogManagerD {
/**
* Construct 3D dialog manager.
*
* Use {@link App3D} instead of {@link AppD}
*
* @param app
* Instance of the 3d application object
*/
public DialogManager3D(App3D app) {
super(app);
}
@Override
public void showNumberInputDialogCirclePointRadius(String title,
GeoPointND geoPoint1, EuclidianView view) {
if (((GeoElement) geoPoint1).isGeoElement3D()
|| (view instanceof EuclidianViewForPlaneD)) {
// create a circle parallel to plane containing the view
showNumberInputDialogCirclePointDirectionRadius(title, geoPoint1,
view.getDirection(), view.getEuclidianController());
} else {
// create 2D circle
super.showNumberInputDialogCirclePointRadius(title, geoPoint1,
view);
}
}
/**
* @param title
* @param geoPoint
* @param forAxis
*
*/
@Override
public void showNumberInputDialogCirclePointDirectionRadius(String title,
GeoPointND geoPoint, GeoDirectionND forAxis,
EuclidianController ec) {
NumberInputHandler handler = new NumberInputHandler(
app.getKernel().getAlgebraProcessor());
InputDialogD id = new InputDialogCirclePointDirectionRadius((AppD) app,
title, handler, geoPoint, forAxis, app.getKernel());
id.setVisible(true);
}
/**
*
* @param title
* @param geoPoint
*/
@Override
public void showNumberInputDialogSpherePointRadius(String title,
GeoPointND geoPoint, EuclidianController ec) {
NumberInputHandler handler = new NumberInputHandler(
app.getKernel().getAlgebraProcessor());
InputDialogD id = new InputDialogSpherePointRadius((AppD) app, title,
handler, geoPoint, app.getKernel());
id.setVisible(true);
}
/**
* for creating a cone
*
* @param title
* @param a
* basis center
* @param b
* apex point
*/
@Override
public void showNumberInputDialogConeTwoPointsRadius(String title,
GeoPointND a, GeoPointND b, EuclidianController ec) {
NumberInputHandler handler = new NumberInputHandler(
app.getKernel().getAlgebraProcessor());
InputDialogD id = new InputDialogConeTwoPointsRadius((AppD) app, title,
handler, a, b, app.getKernel());
id.setVisible(true);
}
/**
* for creating a cylinder
*
* @param title
* @param a
* basis center
* @param b
* top center
*/
@Override
public void showNumberInputDialogCylinderTwoPointsRadius(String title,
GeoPointND a, GeoPointND b, EuclidianController ec) {
NumberInputHandler handler = new NumberInputHandler(
app.getKernel().getAlgebraProcessor());
InputDialogD id = new InputDialogCylinderTwoPointsRadius((AppD) app,
title, handler, a, b, app.getKernel());
id.setVisible(true);
}
@Override
public void showNumberInputDialogRotate(String title, GeoPolygon[] polys,
GeoLineND[] selectedLines, GeoElement[] selGeos,
EuclidianController ec) {
NumberInputHandler handler = new NumberInputHandler(
app.getKernel().getAlgebraProcessor());
InputDialogD id = new InputDialogRotateAxis(((AppD) app), title,
handler, polys, selectedLines, selGeos, ec);
id.setVisible(true);
}
public static class Factory extends DialogManagerD.Factory {
@Override
public DialogManagerD create(AppD app) {
if (!(app instanceof App3D)) {
throw new IllegalArgumentException();
}
DialogManager3D dialogManager = new DialogManager3D((App3D) app);
return dialogManager;
}
}
}