package org.geogebra.common.geogebra3D.euclidian3D.openGL; import org.geogebra.common.kernel.Matrix.Coords; /** * Class that describes the geometry of buttons for 3D view * * @author ggb3D * */ public class PlotterMouseCursor { static private float coeff = 30f; private int index; /** * common constructor * * @param manager * geometry manager */ public PlotterMouseCursor(Manager manager) { Coords n = new Coords(0, 0, 1); // vertices Coords[] a = new Coords[7]; a[0] = new Coords(0, 0, 0); a[1] = new Coords(0.38 * coeff, -0.39 * coeff, 0); a[2] = new Coords(0.21 * coeff, -0.38 * coeff, 0); a[3] = new Coords(0.29 * coeff, -0.56 * coeff, 0); a[4] = new Coords(0.21 * coeff, -0.60 * coeff, 0); a[5] = new Coords(0.13 * coeff, -0.42 * coeff, 0); a[6] = new Coords(0, -0.55 * coeff, 0); // outline vertices Coords[] b = new Coords[7]; b[0] = new Coords(-0.028 * coeff, 0.068859231 * coeff, 0); b[1] = new Coords(0.450461328556841 * coeff, -0.422193185106047 * coeff, 0); b[2] = new Coords(0.254264077762676 * coeff, -0.410652170353449 * coeff, 0); b[3] = new Coords(0.326453438653662 * coeff, -0.573078232358169 * coeff, 0); b[4] = new Coords(0.196313798935428 * coeff, -0.638148052217286 * coeff, 0); b[5] = new Coords(0.120971069271961 * coeff, -0.468626910474487 * coeff, 0); b[6] = new Coords(-0.0280000000000002 * coeff, -0.617597979746448 * coeff, 0); // create geometry with color // lines index = manager.startNewList(-1); manager.startGeometry(Manager.Type.TRIANGLES); manager.normalToScale(n); vertexBlack(manager, a[0]); vertexBlack(manager, b[0]); vertexBlack(manager, b[1]); vertexBlack(manager, a[0]); vertexBlack(manager, b[1]); vertexBlack(manager, a[1]); vertexBlack(manager, a[1]); vertexBlack(manager, b[1]); vertexBlack(manager, b[2]); vertexBlack(manager, a[1]); vertexBlack(manager, b[2]); vertexBlack(manager, a[2]); vertexBlack(manager, a[2]); vertexBlack(manager, b[2]); vertexBlack(manager, b[3]); vertexBlack(manager, a[2]); vertexBlack(manager, b[3]); vertexBlack(manager, a[3]); vertexBlack(manager, a[3]); vertexBlack(manager, b[3]); vertexBlack(manager, b[4]); vertexBlack(manager, a[3]); vertexBlack(manager, b[4]); vertexBlack(manager, a[4]); vertexBlack(manager, a[4]); vertexBlack(manager, b[4]); vertexBlack(manager, b[5]); vertexBlack(manager, a[4]); vertexBlack(manager, b[5]); vertexBlack(manager, a[5]); vertexBlack(manager, a[5]); vertexBlack(manager, b[5]); vertexBlack(manager, b[6]); vertexBlack(manager, a[5]); vertexBlack(manager, b[6]); vertexBlack(manager, a[6]); vertexBlack(manager, a[6]); vertexBlack(manager, b[6]); vertexBlack(manager, b[0]); vertexBlack(manager, a[6]); vertexBlack(manager, b[0]); vertexBlack(manager, a[0]); // polygon vertexWhite(manager, a[0]); vertexWhite(manager, a[1]); vertexWhite(manager, a[2]); vertexWhite(manager, a[0]); vertexWhite(manager, a[2]); vertexWhite(manager, a[5]); vertexWhite(manager, a[0]); vertexWhite(manager, a[5]); vertexWhite(manager, a[6]); vertexWhite(manager, a[2]); vertexWhite(manager, a[3]); vertexWhite(manager, a[4]); vertexWhite(manager, a[2]); vertexWhite(manager, a[4]); vertexWhite(manager, a[5]); manager.endGeometry(); manager.endList(); } private static void vertexWhite(Manager manager, Coords v) { manager.color(1, 1, 1, 1); manager.vertex(v); } private static void vertexBlack(Manager manager, Coords v) { manager.color(0, 0, 0, 1); manager.vertex(v); } // //////////////////////////////// // INDEX // //////////////////////////////// /** * * @return geometry index */ public int getIndex() { return index; } }