package org.geogebra.common.geogebra3D.kernel3D.commands;
import org.geogebra.common.geogebra3D.kernel3D.scripting.CmdSetSpinSpeed;
import org.geogebra.common.geogebra3D.kernel3D.scripting.CmdSetViewDirection;
import org.geogebra.common.kernel.Kernel;
import org.geogebra.common.kernel.arithmetic.Command;
import org.geogebra.common.kernel.commands.CommandDispatcher;
import org.geogebra.common.kernel.commands.CommandProcessor;
import org.geogebra.common.kernel.commands.Commands;
import org.geogebra.common.kernel.kernelND.GeoConicNDConstants;
import org.geogebra.common.main.Feature;
import org.geogebra.common.util.debug.Log;
/**
* Command dispatcher for 3D
*
* @author Mathieu
*
*/
public class CommandDispatcher3D extends CommandDispatcher {
/**
*
* @param kernel
* kernel
*/
public CommandDispatcher3D(Kernel kernel) {
super(kernel);
}
@Override
public CommandProcessor commandTableSwitch(Command c) {
String cmdName = c.getName();
try {
switch (Commands.valueOf(cmdName)) {
case Segment:
return new CmdSegment3D(kernel);
case Line:
return new CmdLine3D(kernel);
case Ray:
return new CmdRay3D(kernel);
case Vector:
return new CmdVector3D(kernel);
case Polygon:
return new CmdPolygon3D(kernel);
case Area:
return new CmdArea3D(kernel);
case PolyLine:
return new CmdPolyLine3D(kernel);
case Point:
return new CmdPoint3D(kernel);
case Midpoint:
case Center:
return new CmdMidpoint3D(kernel);
case Tangent:
return new CmdTangent3D(kernel);
case Polar:
return new CmdPolar3D(kernel);
case Diameter:
case ConjugateDiameter:
return new CmdDiameter3D(kernel);
case Circle:
return new CmdCircle3D(kernel);
case Ellipse:
return new CmdEllipseHyperbola3D(kernel,
GeoConicNDConstants.CONIC_ELLIPSE);
case Hyperbola:
return new CmdEllipseHyperbola3D(kernel,
GeoConicNDConstants.CONIC_HYPERBOLA);
case Conic:
return new CmdConic3D(kernel);
case CircumcircleSector:
case CircumcircularSector:
return new CmdCircumcircleSector3D(kernel);
case CircumcircleArc:
case CircumcircularArc:
return new CmdCircumcircleArc3D(kernel);
case Arc:
return new CmdArcSector3D(kernel,
GeoConicNDConstants.CONIC_PART_ARC);
case Sector:
return new CmdArcSector3D(kernel,
GeoConicNDConstants.CONIC_PART_SECTOR);
case CircleArc:
case CircularArc:
return new CmdCircleArcSector3D(kernel,
GeoConicNDConstants.CONIC_PART_ARC);
case CircleSector:
case CircularSector:
return new CmdCircleArcSector3D(kernel,
GeoConicNDConstants.CONIC_PART_SECTOR);
case Semicircle:
return new CmdSemicircle3D(kernel);
case Parabola:
return new CmdParabola3D(kernel);
case Corner:
return new CmdCorner3D(kernel);
case CornerThreeD:
return new CmdVertexForce3D(kernel);
case Locus:
return new CmdLocus3D(kernel);
case Vertex:
return new CmdVertex3D(kernel);
case FirstAxis:
return new CmdFirstAxis3D(kernel);
case SecondAxis:
return new CmdSecondAxis3D(kernel);
case Focus:
return new CmdFocus3D(kernel);
case PerpendicularLine:
case OrthogonalLine:
return new CmdOrthogonalLine3D(kernel);
case LineBisector:
case PerpendicularBisector:
return new CmdLineBisector3D(kernel);
case AngleBisector:
case AngularBisector:
return new CmdAngularBisector3D(kernel);
case PerpendicularVector:
case OrthogonalVector:
return new CmdOrthogonalVector3D(kernel);
case UnitPerpendicularVector:
case UnitOrthogonalVector:
return new CmdUnitOrthogonalVector3D(kernel);
case Direction:
return new CmdUnitVector3D(kernel, false);
case UnitVector:
return new CmdUnitVector3D(kernel, true);
case Curve:
case CurveCartesian:
return new CmdCurveCartesian3D(kernel);
case Plane:
return new CmdPlane(kernel);
// English for scripting
case PerpendicularPlane:
// internal name
case OrthogonalPlane:
return new CmdOrthogonalPlane(kernel);
case PlaneBisector:
return new CmdPlaneBisector(kernel);
case Prism:
return new CmdPrism(kernel);
case Pyramid:
return new CmdPyramid(kernel);
case Tetrahedron:
return new CmdArchimedeanSolid(kernel, Commands.Tetrahedron);
case Cube:
return new CmdArchimedeanSolid(kernel, Commands.Cube);
case Octahedron:
return new CmdArchimedeanSolid(kernel, Commands.Octahedron);
case Dodecahedron:
return new CmdArchimedeanSolid(kernel, Commands.Dodecahedron);
case Icosahedron:
return new CmdArchimedeanSolid(kernel, Commands.Icosahedron);
case Polyhedron:
if (kernel.getApplication().has(Feature.CONVEX_HULL_3D)) {
return new CmdPolyhedronConvex(kernel);
}
return super.commandTableSwitch(c);
case Net:
return new CmdPolyhedronNet(kernel);
/*
* case Polyhedron: return new CmdPolyhedronConvex(kernel);
*/
case PointIn:
return new CmdPointIn3D(kernel);
case Distance:
return new CmdDistance3D(kernel);
case ClosestPoint:
return new CmdClosestPoint3D(kernel);
case ClosestPointRegion:
return new CmdClosestPointRegion(kernel);
case Intersect:
return new CmdIntersect3D(kernel);
case IntersectPath:
case IntersectionPaths: // deprecated
case IntersectRegion: // deprecated
return new CmdIntersectPath3D(kernel);
case IntersectCircle:
case IntersectConic:
return new CmdIntersectConic(kernel);
case Sphere:
return new CmdSphere3D(kernel);
case Cone:
return new CmdCone(kernel);
case InfiniteCone:
return new CmdConeInfinite(kernel);
case ConeInfinite:
return new CmdConeInfinite(kernel); // removed for release
// candidate
case Cylinder:
return new CmdCylinder(kernel);
case InfiniteCylinder:
return new CmdCylinderInfinite(kernel);
case CylinderInfinite:
return new CmdCylinderInfinite(kernel); // removed for release
// candidate
case Side:
case QuadricSide:
return new CmdQuadricSide(kernel);
case Bottom:
return new CmdBottom(kernel);
case Top:
return new CmdTop(kernel);
case Ends:
return new CmdEnds(kernel);
case Function:
return new CmdFunction2Var(kernel);
case Surface:
return new CmdSurfaceCartesian3D(kernel);
case Angle:
return new CmdAngle3D(kernel);
case Translate:
return new CmdTranslate3D(kernel);
case Rotate:
return new CmdRotate3D(kernel);
case Reflect:
case Mirror:
return new CmdMirror3D(kernel);
case Dilate:
return new CmdDilate3D(kernel);
case Length:
return new CmdLength3D(kernel);
case Volume:
return new CmdVolume(kernel);
case Height:
return new CmdHeight(kernel);
case Axes:
return new CmdAxes3D(kernel);
// scripting : 3D
case SetViewDirection:
return new CmdSetViewDirection(kernel);
case SetSpinSpeed:
return new CmdSetSpinSpeed(kernel);
// polygon operations
case Difference:
return new CmdDifference3D(kernel);
case Union:
return new CmdUnion3D(kernel);
default:
return super.commandTableSwitch(c);
}
} catch (RuntimeException e) {
Log.debug("command not found / CAS command called");
}
return null;
}
}