package org.jzy3d.plot3d.primitives.axes;

import org.jzy3d.maths.Range;
import org.jzy3d.plot3d.rendering.compat.GLES2CompatUtils;

import com.jogamp.opengl.GL;
import com.jogamp.opengl.GL2;
import com.jogamp.opengl.GL2GL3;

public class AxeXRectangleAnnotation extends AxeXLineAnnotation implements AxeAnnotation {

    public void drawLineGLES2(Range yrange, Range zrange) {
        GLES2CompatUtils.glBegin(GL2.GL_POLYGON);
        //GLES2CompatUtils.glLineWidth(width);
        GLES2CompatUtils.glColor4f(color.r, color.g, color.b, color.a);
        GLES2CompatUtils.glVertex3f(value, yrange.getMin(), 0);
        GLES2CompatUtils.glVertex3f(value, yrange.getMax(), 0);
        GLES2CompatUtils.glVertex3f(value-width, yrange.getMax(), 0);
        GLES2CompatUtils.glVertex3f(value-width, yrange.getMin(), 0);
        GLES2CompatUtils.glEnd();
    }

    public synchronized void drawLineGL2(GL gl, Range yrange, Range zrange) {
        //gl.getGL2().glLineWidth(width);
        gl.getGL2().glBegin(GL2.GL_POLYGON);
        gl.getGL2().glColor4f(color.r, color.g, color.b, color.a);
        
        applyPolygonModeLine(gl);
        applyPolygonModeFill(gl);
        float ymin = yrange.getMin()-yrange.getRange()/30;
        float ymax = yrange.getMax()+yrange.getRange()/30;
        float z = zrange.getMin()-2;
        
        gl.getGL2().glVertex3f(value-width, ymin, z);
        gl.getGL2().glVertex3f(value-width, ymax, z);
        gl.getGL2().glVertex3f(value, ymax, z);
        gl.getGL2().glVertex3f(value, ymin, z);
        
        gl.getGL2().glEnd();
    }
    
    public enum PolygonMode {
        FRONT, BACK, FRONT_AND_BACK
    }
    PolygonMode polygonMode = PolygonMode.FRONT_AND_BACK;

    protected void applyPolygonModeLine(GL gl) {
        if (gl.isGL2()) {
            switch (polygonMode) {
            case FRONT:
                gl.getGL2().glPolygonMode(GL.GL_FRONT, GL2GL3.GL_LINE);
                break;
            case BACK:
                gl.getGL2().glPolygonMode(GL.GL_BACK, GL2GL3.GL_LINE);
                break;
            case FRONT_AND_BACK:
                gl.getGL2().glPolygonMode(GL.GL_FRONT_AND_BACK, GL2GL3.GL_LINE);
                break;
            default:
                break;
            }
        } else {
            // glPolygonMode does not exist in opengl es ??

            switch (polygonMode) {
            case FRONT:
                GLES2CompatUtils.glPolygonMode(GL.GL_FRONT, GL2GL3.GL_LINE);
                break;
            case BACK:
                GLES2CompatUtils.glPolygonMode(GL.GL_BACK, GL2GL3.GL_LINE);
                break;
            case FRONT_AND_BACK:
                GLES2CompatUtils.glPolygonMode(GL.GL_FRONT_AND_BACK, GL2GL3.GL_LINE);
                break;
            default:
                break;
            }
        }
    }

    protected void applyPolygonModeFill(GL gl) {
        if (gl.isGL2()) {
            switch (polygonMode) {
            case FRONT:
                gl.getGL2().glPolygonMode(GL.GL_FRONT, GL2GL3.GL_FILL);
                break;
            case BACK:
                gl.getGL2().glPolygonMode(GL.GL_BACK, GL2GL3.GL_FILL);
                break;
            case FRONT_AND_BACK:
                gl.getGL2().glPolygonMode(GL.GL_FRONT_AND_BACK, GL2GL3.GL_FILL);
                break;
            default:
                break;
            }
        } else {

            // glPolygonMode does not exist in opengl es ??
            switch (polygonMode) {
            case FRONT:
                GLES2CompatUtils.glPolygonMode(GL.GL_FRONT, GL2GL3.GL_FILL);
                break;
            case BACK:
                GLES2CompatUtils.glPolygonMode(GL.GL_BACK, GL2GL3.GL_FILL);
                break;
            case FRONT_AND_BACK:
                GLES2CompatUtils.glPolygonMode(GL.GL_FRONT_AND_BACK, GL2GL3.GL_FILL);
                break;
            default:
                break;
            }

        }
    }

    protected void polygonOffseFillEnable(GL gl) {
        gl.glEnable(GL.GL_POLYGON_OFFSET_FILL);
        gl.glPolygonOffset(1.0f, 1.0f);
    }

    protected void polygonOffsetFillDisable(GL gl) {
        gl.glDisable(GL.GL_POLYGON_OFFSET_FILL);
    }
}

 

Ads help maintain this website.